Skip to content

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

  1. Выполните миграцию вашего проекта на AndroidX в соответствии с официальной документацией.
  2. Добавьте новый модуль в файл build.gradle вашего приложения, если вы используете Firebase Cloud Messaging.
build.gradle
implementation 'com.wavesend:wavesend-firebase:+'

Для тех, кто использует Amazon и не использует Firebase, никаких изменений не требуется.

Миграция с предыдущих версий Android SDK

Section titled “Миграция с предыдущих версий Android SDK”

Большинство классов и методов Wavesend стали устаревшими (deprecated) с версии 5.0, а некоторые были удалены. Классы PushManager, BasePushMessageReceiver, BaseRegistrationReceiver, SendPushTagsCallback, PushFragment и PushEventListener все еще доступны в составе библиотеки com.wavesend:wavesend-deprecated, но рекомендуется как можно скорее перейти на новый API.

PushManager содержал различные методы для разных функций. Теперь эти методы разделены между разными классами и библиотеками: com.wavesend:wavesend: Wavesend, WavesendNotificationSettings, WavesendInApp. com.wavesend:wavesend-badge: WavesendBadge. com.wavesend:wavesend-location: WavesendLocation. com.wavesend:wavesend-beacon: WavesendBeacon.

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

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

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

AndroidManifest.xml
<meta-data
android:name="com.wavesend.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 был легковесной альтернативой сложной интеграции, затрагивающей жизненный цикл Activity. Но, с другой стороны, он требовал наследования от FragmentActivity и неявно использовал более сложный жизненный цикл Fragment. PushFragment и PushEventListener теперь заменены на Wavesend#registerForPushNotifications(Callback) и NotificationServiceExtension.

Пользовательский Broadcast Receiver для Push (PW_NOTIFICATION_RECEIVER)

Section titled “Пользовательский Broadcast Receiver для Push (PW_NOTIFICATION_RECEIVER)”

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

YourNotificationServiceExtension.java
public class YourNotificationServiceExtension extends NotificationServiceExtension {
@Override
protected void startActivityForPushMessage(PushMessage message) {
// super.startActivityForPushMessage() запускает activity по умолчанию (launcher)
// или 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(Wavesend.PUSH_RECEIVE_EVENT, message.toJson().toString());
context.startActivity(launchIntent);
}
}

Также произошли некоторые критические изменения, связанные с фабрикой уведомлений:

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

1. InAppFacade был заменен на WavesendInApp. 2. Для нативного интерфейса JavaScript был введен объект wavesend со следующим API: getHwid(): string - возвращает HWID Wavesend для текущего устройства. getVersion(): string - возвращает текущую версию SDK Wavesend. postEvent(event: string, attributes?: object, successCallback?: function, errorCallback?: function) - отправляет запрос postEvent. sendTags(tags: object) - отправляет tags, связанные с текущим устройством. getTags(successCallback: function, errorCallback?: function) - возвращает tags, связанные с текущим устройством. closeInApp() - закрывает HTML-страницу In-App.

Поделитесь с нами своим мнением

Section titled “Поделитесь с нами своим мнением”

Ваши отзывы помогают нам улучшать продукт, поэтому мы будем рады, если вы поделитесь своим мнением при возникновении любых проблем в процессе интеграции SDK. Если вы столкнетесь с какими-либо трудностями, пожалуйста, без колебаний поделитесь своими мыслями с нами через эту форму.