Один из возможных вариантов перевода текста на русский язык:
XPush
Лёгкий и встраиваемый фреймворк для отправки сообщений Android. Интеграция в один клик (отправка через WeChat, Tencent, MailGun, Huawei, Xiaomi и т. д.), эффективная система сохранения активности, поддержка расширения функций отправки, полное разделение отправки и бизнес-логики, освобождение ваших рук!
Перед тем как создать задачу, пожалуйста, прочитайте мудрость создания вопросов, а также строго следуйте шаблону задачи (создать новую задачу), чтобы сэкономить время всех участников.
Прежде чем использовать, обязательно внимательно прочтите руководство по использованию, важные вещи повторяются трижды!
Прежде чем использовать, обязательно внимательно прочтите руководство по использованию, важные вещи повторяются трижды!
Прежде чем использовать, обязательно внимательно прочтите руководство по использованию, важные вещи повторяются трижды!
Публичный аккаунт | Juejin | Zhihu | CSDN | Jianshu | Segmentfault | Bilibili | RuTeng |
---|---|---|---|---|---|---|---|
Путешествие в мир открытого исходного кода Android | кликните сюда | кликните сюда | кликните сюда | кликните сюда | кликните сюда | кликните сюда | кликните сюда |
Простота интеграции. Всего несколько строк кода позволяют интегрировать отправку, в настоящее время уже поддерживаются WeChat, QQ, MailGun и другие каналы отправки, кроме того, можно расширить в соответствии с вашими потребностями.
Сильная совместимость. В настоящее время полностью поддерживает Android 9.0.
Мощные функции. Поддерживает регистрацию, отмену регистрации, добавление, удаление и получение тегов, привязку и открепление псевдонимов, получение, подключение к статусу отправки и другие операции, связанные с отправкой, а также может возвращать результаты ответов; поддерживает получение уведомлений о доставке, события кликов уведомлений, настраиваемые типы сообщений и т.д.
Унифицированная подписка на сообщения. Фреймворк предоставляет унифицированный канал подписки на сообщения, независимо от того, какой метод отправки вы используете, вы можете подписаться и отказаться от подписки на сообщения в любом месте, что удобно для получения и обработки сообщений.
Поддержка добавления фильтров сообщений. Подобно перехватчикам OkHttp, он может глобально фильтровать полученные сообщения и выбирать те сообщения, которые нам действительно нужны.
Предоставляет эффективную систему сохранения активности. Гарантирует, что приложения, подключённые к XPush, имеют высокий уровень доставки и стабильности сообщений, чего не могут достичь многие другие фреймворки для отправки.
Этот фреймворк заимствует некоторые идеи из OnePush (в настоящее время не поддерживается), а также мой трёхлетний опыт отправки сообщений, образуя следующие компоненты:
Клиент отправки сообщений IPushClient: в основном предоставляет основные API платформы отправки сообщений.
Диспетчер событий отправки IPushDispatcher: в основном используется для пересылки сторонних событий отправки в распознаваемые события XPush.
Получатель сообщений IPushReceiver: централизованно получает события отправки, переданные IPushDispatcher, и является центром приёма событий.
Наблюдаемый за сообщениями IMessageObservable: в основном отвечает за управление подпиской и пересылкой сообщений отправки.
Стратегия фильтрации сообщений IMessageFilterStrategy: в основном отвечает за обработку и управление фильтрацией сообщений отправки.
Эти пять компонентов можно настроить в соответствии с требованиями вашего бизнеса.
После отправки сообщения из бэкенда:
Сторонняя платформа отправки --- (сообщение) ---> внутренняя система приёма сообщений сторонней платформы ----> (переопределение метода приёма)---> IPushDispatcher ----> (преобразование содержимого сообщения в XPushMsg/XPushCommand)---> IPushReceiver ----> (если не используется XPushManager для управления сообщениями, здесь завершается)
[Использование XPushManager для управления сообщениями]:---IPushReceiver---> XPushManager -----> IMessageFilterStrategy ---> (фильтрация сообщений)---> IMessageObservable ---> (сообщения пересылаются в места подписки)
Все, кто работал с Android, знают, насколько серьёзной является фрагментация устройств, и то же самое относится к платформам отправки. Ещё в 2017 году Министерство промышленности и информатизации призвало все компании разработать единую платформу отправки для Android, но до сих пор ничего не было сделано (по сути, это связано с тем, что интересы слишком велики, и никто не хочет идти на компромисс).
Но мы не можем возлагать все свои надежды на событие, которое может произойти или не произойти, код должен быть написан, функции должны быть реализованы, и лучше сделать это самим, чем зависеть от других людей. Создание собственной системы отправки, которая будет контролироваться нами, кажется более надёжным решением, чем полагаться на сторонние платформы.
Возможно, кто-то спросит, почему вы решили создать свою собственную систему отправки вместо использования существующих систем, таких как WeChat и MailGun? Если вам не важны своевременность и уровень доставки, то это не имеет значения (на практике WeChat не очень удобен в использовании). Здесь я хочу подчеркнуть, что вы не можете доверить свою судьбу другим людям, отправка отличается от других бизнес-процессов, она относительно сложна, требует обработки большого количества событийных сообщений, предъявляет высокие требования к серверу, и вы готовы доверить свои сообщения отправки третьей стороне? Кроме того, можете ли вы заставить своих коллег использовать определённую платформу отправки? Если нет, то лучше взять контроль над своей судьбой в свои руки, так что создание собственной системы отправки будет более безопасным выбором.
Ранее в группе обмена сообщениями QQ всегда были люди, которые хотели, чтобы я открыл исходный код фреймворка для отправки, на самом деле я уже написал такой фреймворк во время работы в предыдущей компании, но он был слишком тесно связан с бизнесом, плюс избегал риска утечки информации, поэтому не было необходимости открывать исходный код. Эта новая система отправки полностью переписана, с новым дизайном, который делает её более универсальной и гибкой.
2. Добавление XPush основных зависимостей:
dependencies {
...
// Библиотека для отправки уведомлений
implementation 'com.github.xuexiangjys.XPush:xpush-core:1.0.1'
// Библиотека для поддержания активности приложения
implementation 'com.github.xuexiangjys.XPush:keeplive:1.0.1'
}
3. Добавление сторонних библиотек для отправки уведомлений (в зависимости от ваших потребностей):
dependencies {
...
// Выберите библиотеку для интеграции
implementation 'com.github.xuexiangjys.XPush:xpush-jpush:1.0.1'
implementation 'com.github.xuexiangjys.XPush:xpush-umeng:1.0.1'
implementation 'com.github.xuexiangjys.XPush:xpush-huawei:1.0.1'
implementation 'com.github.xuexiangjys.XPush:xpush-xiaomi:1.0.1'
implementation 'com.github.xuexiangjys.XPush:xpush-xg:1.0.1'
}
Если вы хотите использовать управление сообщениями, предоставляемое XPushManager, зарегистрируйте в AndroidManifest.xml стандартный приёмник XPushReceiver. Вы также можете создать свой собственный приёмник, унаследовав от XPushReceiver и переопределив методы.
Для реализации собственного управления сообщениями наследуйте от AbstractPushReceiver, переопределите методы и зарегистрируйте приёмник в AndroidManifest.xml.
<!-- Пользовательский приёмник сообщений -->
<receiver android:name=".push.CustomPushReceiver">
<intent-filter>
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_CONNECT_STATUS_CHANGED" />
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_NOTIFICATION" />
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_NOTIFICATION_CLICK" />
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_MESSAGE" />
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_COMMAND_RESULT" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
<!-- Стандартный приёмник сообщений -->
<receiver android:name="com.xuexiang.xpush.core.receiver.impl.XPushReceiver">
<intent-filter>
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_CONNECT_STATUS_CHANGED" />
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_NOTIFICATION" />
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_NOTIFICATION_CLICK" />
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_MESSAGE" />
<action android:name="com.xuexiang.xpush.core.action.RECEIVE_COMMAND_RESULT" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
Обратите внимание, что статическая регистрация широковещательных сообщений не будет работать на устройствах с Android 8.0 и выше. Решить эту проблему можно двумя способами:
Динамически регистрировать приёмники сообщений.
Изменить отправителя сообщений.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Решение проблемы с регистрацией на Android 8.0: динамическая регистрация
XPush.registerPushReceiver(new CustomPushReceiver());
// Другое решение проблемы с регистрацией на Android 8.0: изменение отправителя
XPush.setIPushDispatcher(new Android26PushDispatcherImpl(CustomPushReceiver.class));
}
<!--name формата: XPush_[PlatformName]_[PlatformCode]-->
<!--value формата: путь к полному имени класса сущности клиента-->
<!-- Если используется библиотека xpush-jpush -->
<meta-data
android:name="XPush_JPush_1000"
android:value="com.xuexiang.xpush.jpush.JPushClient" />
<!-- Если используется библиотека xpush-umeng -->
<meta-data
android:name="XPush_UMengPush_1001"
android:value="com.xuexiang.xpush.umeng.UMengPushClient" />
<!-- Если используется библиотека xpush-huawei -->
<meta-data
android:name="XPush_HuaweiPush_1002"
android:value="com.xuexiang.xpush.huawei.HuaweiPushClient" />
<!-- Если используется библиотека xpush-xiaomi -->
<meta-data
android:name="XPush_MIPush_1003"
android:value="com.xuexiang.xpush.xiaomi.XiaoMiPushClient" />
<!-- Если используется библиотека xpush-xg -->
<meta-data
android:name="XPush_XGPush_1004"
android:value="@string/xpush_xg_client_name" />
<!-- Статическая регистрация GCM -->
<meta-data
android:name="JPUSH_CHANNEL"
android:value="default_developer" />
<meta-data
android:name="JPUSH_APPKEY"
android:value="a32109db64ebe04e2430bb01" />
<!-- Статическая регистрация UMENG -->
<meta-data
android:name="UMENG_APPKEY"
android:value="5d5a42ce570df37e850002e9" />
<meta-data
android:name="UMENG_MESSAGE_SECRET"
``` ```
return false;
}
};
@Override
public void onDestroyView() {
XPushManager.get().removeFilter(mMessageFilter);
super.onDestroyView();
}
6. Обработка кликов в уведомлениях о push-уведомлениях
Для уведомлений о push-уведомлениях можно обрабатывать клики более элегантно, настраивая действия, которые должны выполняться после нажатия на уведомление.
В глобальном приёмнике сообщений IPushReceiver
можно добавить действие для открытия нужной страницы в методе onNotificationClick
.
@Override
public void onNotificationClick(Context context, XPushMsg msg) {
super.onNotificationClick(context, msg);
// Открытие нужной Activity
Intent intent = IntentUtils.getIntent(context, TestActivity.class, null, true);
intent.putExtra(KEY_PARAM_STRING, msg.getContent());
intent.putExtra(KEY_PARAM_INT, msg.getId());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
ActivityUtils.startActivity(intent);
}
Обратите внимание, что для этого необходимо использовать тип уведомления «настроить действие» или «открыть нужную страницу» и передавать содержимое уведомления в формате:
title: заголовок уведомления;
content: содержание уведомления;
extraMsg: дополнительное сообщение, которое может содержать json или другое содержимое;
keyValue: пары ключ-значение, связанные с уведомлением.
xpush://com.xuexiang.xpush/notification?title=Это уведомление&content=Это содержание&extraMsg=xxxxxxxxx&keyValue={"param1": "1111", "param2": "2222"}
Вы также можете настроить формат передаваемого содержимого уведомления. Для получения дополнительной информации обратитесь к проекту XPush
, а именно к классам XPushNotificationClickActivity
и AndroidManifest.xml
.
Поддерживаемые платформы
Платформа | Название | Код | Модуль | Класс клиента |
---|---|---|---|---|
Jiguang | JPush | 1000 | xpush-jpush | com.xuexiang.xpush.jpush.JPushClient |
UMeng | UMengPush | 1001 | xpush-umeng | com.xuexiang.xpush.umeng.UMengPushClient |
Huawei | HuaweiPush | 1002 | xpush-huawei | com.xuexiang.xpush.huawei.HuaweiPushClient |
Xiaomi | MIPush | 1003 | xpush-xiaomi | com.xuexiang.xpush.xiaomi.XiaoMiPushClient |
XGPush | XGPush | 1004 | xpush-xg | com.xuexiang.xpush.xg.XGPushClient |
Также существует пример использования MQTT для отправки сообщений — XPush-MQTT
.
Особенности платформ
Jiguang: все функции поддерживаются.
UMeng: при инициализации XPush необходимо зарегистрироваться в основном процессе и в канале. Не поддерживает получение тегов и псевдонимов. Не отслеживает состояние соединения при отправке уведомлений.
XGPush: не поддерживает получение тегов и псевдонимов. Не отслеживает состояние соединения при отправке уведомлений.
Huawei: перед регистрацией необходимо установить последнюю версию службы push-уведомлений. Не поддерживает получение всех тегов и псевдонимов. Не получает уведомления о получении уведомлений.
Xiaomi: за один раз можно работать только с одним тегом. Отмена регистрации не возвращает результат. Не отслеживает состояние соединения при отправке уведомлений.
Расширение сторонних платформ
Поскольку существует множество платформ для Android, невозможно и не нужно предоставлять библиотеки для интеграции со всеми из них. Если вы хотите использовать платформу, которой нет в списке, вам придётся создать свою собственную библиотеку.
Создание библиотеки для новой платформы не так сложно. Необходимо выполнить следующие шаги:
Создать новый модуль Android Library и импортировать зависимости для платформы, которую вы хотите интегрировать. Это включает в себя импорт библиотек или SDK для push-платформы и настройку файла AndroidManifest.xml
.
Создать клиент для этой платформы (например, XXXClient), который реализует интерфейс IPushClient
и переопределяет соответствующие методы. Методы init
, register
, unRegister
, getPlatformCode
и getPlatformName
являются обязательными для переопределения.
Создать и переопределить методы для обработки сообщений и уведомлений от третьей стороны. В основном это означает вызов методов transmitXXX
из XPush
для пересылки уведомлений, сообщений и других событий на платформу XPush
.
Основные методы, которые необходимо вызвать:
(1) XPush.transmitMessage()
: пересылка пользовательских (прозрачных) сообщений.
(2) XPush.transmitNotification()
: пересылка уведомлений о доставке.
(3) XPush.transmitNotificationClick()
: пересылка событий нажатия на уведомления. (4) XPush.transmitCommandResult(): передаёт результат выполнения команды IPushClient.
(5) XPush.transmitConnectStatusChanged(): передаёт событие, связанное с изменением состояния соединения для отправки.
После этого интеграция платформы push-уведомлений завершена. Осталось только выбрать платформу при инициализации XPush. Если вы всё ещё не понимаете, вы можете обратиться к примерам xpush-xiaomi и xpush-huawei.
Предоставленный здесь механизм сохранения активности приложения представляет собой смесь различных решений, разработанных ранее другими людьми. В настоящее время он обеспечивает хороший эффект сохранения активности в версиях 9.0 и ниже (если вы не убиваете программу активно), и вы можете попробовать его, если ваше приложение должно работать в фоновом режиме (например, служба push-уведомлений), чтобы система не завершала его автоматически. Следует отметить, что сохранение активности программы не означает, что программа становится неубиваемой. Программа будет оставаться активной, но это не защитит её от завершения системой, если только вы не сделаете своё приложение системным или не добавите его в белый список системы. Это просто повышает приоритет программы и снижает вероятность того, что система завершит её работу.
Для получения дополнительной информации о механизме сохранения активности см. Использование механизма сохранения активности.
Сущность, которая преобразует push-сообщение и содержит исходные данные сообщения. | Поле | Тип | Примечание | | --- | --- | --- | | mId | int | Идентификатор сообщения / статус | | mTitle | String | Заголовок уведомления | | mContent | String | Содержание уведомления | | mMsg | String | Настраиваемое (прозрачное) сообщение | | mExtraMsg | String | Расширенное поле сообщения | | mKeyValue | String | Ключ-значение сообщения |
Уведомление, полученное из XPushMsg. | Поле | Тип | Примечание | | --- | --- | --- | | mId | int | Идентификатор сообщения / статус | | mTitle | String | Заголовок уведомления | | mContent | String | Содержание уведомления | | mExtraMsg | String | Расширенное поле сообщения | | mKeyValue | String | Ключ-значение сообщения |
Настраиваемое (прозрачное) сообщение, полученное из XPushMsg. | Поле | Тип | Примечание | | --- | --- | --- | | mMsg | String | Настраиваемое (прозрачное) сообщение | | mExtraMsg | String | Расширенное поле сообщения | | mKeyValue | String | Ключ-значение сообщения |
Информация о результате выполнения команд IPushClient. | Поле | Тип | Примечание | | --- | --- | --- | | mType | int | Тип команды | | mResultCode | int | Код результата | | mContent | String | Текст команды | | mExtraMsg | String | Дополнительное поле | | mError | String | Сообщение об ошибке |
Типы команд. | Команда | Код | Примечание | | --- | --- | --- | | TYPE_REGISTER | 2000 | Регистрация push-уведомления | | TYPE_UNREGISTER | 2001 | Отмена регистрации push-уведомления | | TYPE_ADD_TAG | 2002 | Добавление тега | | TYPE_DEL_TAG | 2003 | Удаление тега | | TYPE_GET_TAG | 2004 | Получение тега | | TYPE_BIND_ALIAS | 2005 | Привязка псевдонима | | TYPE_UNBIND_ALIAS | 2006 | Отвязка псевдонима | | TYPE_GET_ALIAS | 2007 | Получение псевдонима | | TYPE_AND_OR_DEL_TAG | 2008 | Добавление или удаление тега |
Коды результатов команд. | Результат | Код | Примечание | | --- | --- | --- | | RESULT_OK | 0 | Успех | | RESULT_ERROR | 1 | Ошибка |
Статус подключения. | Статус | Код | Примечание | | --- | --- | --- | | DISCONNECT | 10 | Соединение разорвано | | CONNECTING | 11 | Соединение устанавливается | | CONNECTED | 12 | Соединение установлено |
# Обфускация для XPush
-keep class * extends com.xuexiang.xpush.core.IPushClient{*;}
-keep class * extends com.xuexiang.xpush.core.receiver.IPushReceiver{*;}
# Обфускация для Glimmer push
-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
-dontwarn cn.jiguang.**
-keep class cn.jiguang.** { *; }
-keep class * extends cn.jpush.android.service.JPushMessageReceiver{*;}
# Обфускация для Umeng push
-dontwarn com.umeng.**
-dontwarn com.taobao.**
-dontwarn anet.channel.**
-dontwarn anetwork.channel.**
-dontwarn org.android.**
-dontwarn org.apache.thrift.**
-dontwarn com.xiaomi.**
-dontwarn com.huawei.**
-dontwarn com.meizu.**
-keep class com.taobao.** {*;}
-keep class org.android.** {*;}
-keep class anet.channel.** {*;}
-keep class com.xiaomi.** {*;}
-keep class com.huawei.** {*;}
-keep class com.meizu.** {*;}
-keep class org.apache.thrift.** {*;}
-keep class com.alibaba.sdk.android.**{*;}
-keep class com.ut.**{*;}
-keep class com.ta.**{*;}
# Обфускация для QQ push
-keep class com.tencent.android.tpush.** {*;}
-keep class com.tencent.mid.** {*;}
-keep class com.qq.taf.jce.** {*;}
-keep class com.tencent.bigdata.** {*;}
# Обфускация для Huawei push
-keep class com.huawei.hms.**{*;}
-keep class com.huawei.android.hms.agent.**{*;}
# Обфускация для Xiaomi push
-keep class * extends com.xiaomi.mipush.sdk.PushMessageReceiver{*;}
Ваша поддержка — это моя мотивация. Я буду вести список всех спонсоров в качестве доказательства, поэтому, пожалуйста, оставьте комментарий о поддержке перед тем, как сделать пожертвование!
Для получения дополнительной информации, пожалуйста, отсканируйте QR-код, чтобы подписаться на мой личный аккаунт WeChat: [Мой Android с открытым исходным кодом]
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )