Руководство по миграции
Миграция с Android SDK 5 на 6
Anchor link to- Перенесите свой проект на AndroidX в соответствии с официальной документацией.
- Добавьте новый модуль в файл build.gradle приложения, если вы используете Firebase Cloud Messaging.
implementation 'com.pushwoosh:pushwoosh-firebase:+'Для тех, кто использует Amazon и не использует Firebase, изменения не требуются.
Миграция с предыдущих версий Android SDK
Anchor link toБольшинство классов и методов Pushwoosh стали устаревшими с момента выпуска версии 5.0, а некоторые из них были удалены. Классы PushManager, BasePushMessageReceiver, BaseRegistrationReceiver, SendPushTagsCallback, PushFragment и PushEventListener по-прежнему доступны как часть библиотеки com.pushwoosh:pushwoosh-deprecated, но рекомендуется как можно скорее перейти на новый API.
PushManager
Anchor link toPushManager состоял из различных методов для разных функций. Эти методы теперь разделены между различными классами и библиотеками:
com.pushwoosh:pushwoosh: Pushwoosh, PushwooshNotificationSettings, PushwooshInApp.
com.pushwoosh:pushwoosh-badge: PushwooshBadge.
com.pushwoosh:pushwoosh-location: PushwooshLocation.
com.pushwoosh:pushwoosh-beacon: PushwooshBeacon.
BaseRegistrationReceiver
Anchor link toBaseRegistrationReceiver использовался для обработки событий регистрации и отмены регистрации push-уведомлений. Этот ресивер теперь заменен простым механизмом обратного вызова:
Pushwoosh.getInstance().registerForPushNotifications(result -> { if (result.isSuccess()) { String token = result.getData(); // handle successful registration } else { PushwooshException exception = result.getException(); // handle registration error }});BasePushMessageReceiver
Anchor link toBasePushMessageReceiver использовался для имитации поведения уведомлений iOS при получении push-уведомления на переднем плане. Это достигалось путем отмены входящего уведомления и вызова обратного вызова onMessageReceive. Это было громоздко и требовало ручной регистрации, когда приложение становилось активным, и отмены регистрации, когда приложение переходило в фоновый режим. Этот ресивер был заменен на NotificationServiceExtension:
<meta-data android:name="com.pushwoosh.notification_service_extension" android:value="com.your.package.name.YourNotificationServiceExtension"/>public class YourNotificationServiceExtension extends NotificationServiceExtension { @Override public boolean onMessageReceived(final PushMessage message) { if (isAppOnForeground()) { Handler mainHandler = new Handler(getApplicationContext().getMainLooper()); mainHandler.post(() -> { handlePush(message); });
// this indicates that notification should not be displayed return true; }
return false; }
@Override protected void startActivityForPushMessage(PushMessage message) { super.startActivityForPushMessage(message); handlePush(message); }
@MainThread private void handlePush(PushMessage message) { // TODO: handle push message }}Это расширение также используется для обработки событий прибытия и принятия уведомлений, тем самым заменяя весь громоздкий код, который использовался при ручной интеграции Activity.
PushFragment
Anchor link toPushFragment был облегченной альтернативой сложной интеграции, включающей жизненный цикл Activity. Но, с другой стороны, он требовал наследования FragmentActivity и неявно использовал более сложный жизненный цикл Fragment. PushFragment и PushEventListener теперь заменены на Pushwoosh#registerForPushNotifications(Callback) и NotificationServiceExtension.
Пользовательский широковещательный приемник Push (PW_NOTIFICATION_RECEIVER)
Anchor link toPW_NOTIFICATION_RECEIVER использовался для настройки поведения при нажатии пользователем на уведомление. Это позволяло обрабатывать уведомления вне контекста Activity и открывать различные Activity в зависимости от содержимого уведомления. Эта интеграция использовала внутренний API Pushwoosh SDK, который больше не существует. Этот ресивер теперь полностью заменен на NotificationServiceExtension:
public class YourNotificationServiceExtension extends NotificationServiceExtension { @Override protected void startActivityForPushMessage(PushMessage message) { // super.startActivityForPushMessage() starts default launcher activity // or activity marked with ${applicationId}.MESSAGE action. // Simply do not call it to override this behaviour. // super.startActivityForPushMessage(message);
// start your activity instead: Intent launchIntent = new Intent(getApplicationContext(), YourActivity.class); launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// (Optional) pass notification data to Activity launchIntent.putExtra(Pushwoosh.PUSH_RECEIVE_EVENT, message.toJson().toString());
context.startActivity(launchIntent); }}Фабрика уведомлений
Anchor link toТакже были некоторые критические изменения, касающиеся фабрики уведомлений:
1. AbsNotificationFactory был заменен на NotificationFactory 2. Методы AbsNotificationFactory#onPushReceived(PushData) и AbsNotificationFactory#onPushHandle(Activity) заменены классом NotificationServiceExtension (onMessageReceived, startActivityForPushMessage). 3. DefaultNotificationFactory был заменен на PushwooshNotificationFactory. 4. PushData был заменен на PushMessage.
Сообщения In-App
Anchor link to1. InAppFacade был заменен на PushwooshInApp.
2. Объект pushwoosh был представлен для нативного интерфейса JavaScript со следующим API:
getHwid(): string - возвращает hwid Pushwoosh для текущего устройства.
getVersion(): string - возвращает текущую версию Pushwoosh SDK.
postEvent(event: string, attributes?: object, successCallback?: function, errorCallback?: function) - отправляет запрос postEvent.
sendTags(tags: object) - отправляет теги, связанные с текущим устройством.
getTags(successCallback: function, errorCallback?: function) - возвращает теги, связанные с текущим устройством.
closeInApp() - закрывает HTML-страницу In-App.
Поделитесь с нами своим отзывом
Anchor link toВаш отзыв помогает нам создавать лучший опыт, поэтому мы будем рады услышать от вас, если у вас возникнут какие-либо проблемы в процессе интеграции SDK. Если вы столкнетесь с какими-либо трудностями, пожалуйста, не стесняйтесь поделиться своими мыслями с нами через эту форму.