Перейти к содержанию

Руководство по миграции

Миграция с Android SDK 5 на 6

Anchor link to
  1. Перенесите ваш проект на AndroidX в соответствии с официальной документацией.
  2. Добавьте новый модуль в файл build.gradle вашего приложения, если вы используете Firebase Cloud Messaging.
build.gradle
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 to

PushManager содержал различные методы для разных функций. Теперь эти методы разделены между разными классами и библиотеками:
com.pushwoosh:pushwoosh: Pushwoosh, PushwooshNotificationSettings, PushwooshInApp.
com.pushwoosh:pushwoosh-badge: PushwooshBadge.
com.pushwoosh:pushwoosh-location: PushwooshLocation.
com.pushwoosh:pushwoosh-beacon: PushwooshBeacon.

BaseRegistrationReceiver

Anchor link to

BaseRegistrationReceiver использовался для обработки событий регистрации и отмены регистрации для получения push-уведомлений. Теперь этот ресивер заменен простым механизмом обратного вызова (callback):

Pushwoosh.getInstance().registerForPushNotifications(result -> {
if (result.isSuccess()) {
String token = result.getData();
// обработка успешной регистрации
}
else {
PushwooshException exception = result.getException();
// обработка ошибки регистрации
}
});

BasePushMessageReceiver

Anchor link to

BasePushMessageReceiver использовался для имитации поведения уведомлений в iOS при получении push-уведомления, когда приложение находится на переднем плане. Это достигалось путем отмены входящего уведомления и вызова колбэка onMessageReceive. Этот способ был громоздким и требовал ручной регистрации, когда приложение становилось активным, и отмены регистрации, когда оно уходило в фон.
Этот ресивер был заменен на NotificationServiceExtension:

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.notification_service_extension"
android:value="com.your.package.name.YourNotificationServiceExtension"/>
YourNotificationServiceExtension.java
public class YourNotificationServiceExtension extends NotificationServiceExtension {
@Override
public boolean onMessageReceived(final PushMessage message) {
if (isAppOnForeground()) {
Handler mainHandler = new Handler(getApplicationContext().getMainLooper());
mainHandler.post(() -> {
handlePush(message);
});
// это указывает, что уведомление не должно отображаться
return true;
}
return false;
}
@Override
protected void startActivityForPushMessage(PushMessage message) {
super.startActivityForPushMessage(message);
handlePush(message);
}
@MainThread
private void handlePush(PushMessage message) {
// TODO: обработайте push-сообщение
}
}

Это расширение также используется для обработки событий получения и принятия уведомлений, заменяя весь громоздкий код, который использовался при ручной интеграции с Activity.

PushFragment

Anchor link to

PushFragment был легковесной альтернативой сложной интеграции, затрагивающей жизненный цикл Activity. Но, с другой стороны, он требовал наследования от FragmentActivity и неявно использовал более сложный жизненный цикл Fragment.
PushFragment и PushEventListener теперь заменены на Pushwoosh#registerForPushNotifications(Callback) и NotificationServiceExtension.

Пользовательский Broadcast Receiver для push-уведомлений (PW_NOTIFICATION_RECEIVER)

Anchor link to

PW_NOTIFICATION_RECEIVER использовался для настройки поведения при клике пользователя на уведомление. Это позволяло обрабатывать уведомления вне контекста Activity и открывать разные Activity в зависимости от содержимого уведомления. Эта интеграция использовала внутренний API Pushwoosh SDK, которого больше не существует.
Этот ресивер теперь полностью заменен на NotificationServiceExtension:

YourNotificationServiceExtension.java
public class YourNotificationServiceExtension extends NotificationServiceExtension {
@Override
protected void startActivityForPushMessage(PushMessage message) {
// super.startActivityForPushMessage() запускает стандартную activity
// или activity, отмеченную действием ${applicationId}.MESSAGE.
// Чтобы переопределить это поведение, просто не вызывайте его.
// super.startActivityForPushMessage(message);
// запустите вместо этого вашу activity:
Intent launchIntent = new Intent(getApplicationContext(), YourActivity.class);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// (Необязательно) передайте данные уведомления в Activity
launchIntent.putExtra(Pushwoosh.PUSH_RECEIVE_EVENT, message.toJson().toString());
context.startActivity(launchIntent);
}
}

Notification Factory

Anchor link to

Также произошли некоторые критические изменения, связанные с notification factory:

1. AbsNotificationFactory заменен на NotificationFactory
2. Методы AbsNotificationFactory#onPushReceived(PushData) и AbsNotificationFactory#onPushHandle(Activity) заменены классом NotificationServiceExtension (onMessageReceived, startActivityForPushMessage).
3. DefaultNotificationFactory заменен на PushwooshNotificationFactory.
4. PushData заменен на PushMessage.

In-App Messages

Anchor link to

1. InAppFacade заменен на PushwooshInApp.
2. Для нативного интерфейса JavaScript был введен объект pushwoosh со следующим 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. Если вы столкнетесь с какими-либо трудностями, пожалуйста, не стесняйтесь сообщить нам об этом через эту форму.