Skip to content

Переход на Android SDK v.5.x.x в Xamarin

PushManager состоял из различных методов для разных функций. Эти методы теперь разделены между разными классами:

  • PushNotificationsManager
  • WavesendNotificationSettings
  • WavesendInApp
  • WavesendBadge
  • WavesendLocation

BaseRegistrationReceiver использовался для обработки событий регистрации и отмены регистрации для Push-уведомлений. Этот получатель теперь заменен механизмом обратного вызова:

using Wavesend;
using Wavesend.Exception;
using Android.Runtime;
using Wavesend.Function;
class RegistrationListener : Java.Lang.Object, ICallback
{
public void Process(Result result)
{
if (result.IsSuccess) {
string token = (string)result.Data;
// handle successful registration
} else {
WavesendException exception = result.Exception.JavaCast<WavesendException>();
// handle registration error
}
}
}
PushNotificationsManager.Instance.RegisterForPushNotifications(new RegistrationListener());

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

Этот получатель был заменен на NotificationServiceExtension:

using Android.App;
using Android.OS;
using Android.Runtime;
using Android.Support.Annotation;
using Wavesend.Notification;
[assembly: MetaData("com.wavesend.notification_service_extension", Value = "com.your.package.YourNotificationServiceExtension")]
namespace YourNamespace
{
[Register("com/your/package/YourNotificationServiceExtension")]
public class YourNotificationServiceExtension : NotificationServiceExtension
{
protected override bool OnMessageReceived(PushMessage message)
{
if (IsAppOnForeground)
{
Handler mainHandler = new Handler(ApplicationContext.MainLooper);
mainHandler.Post(() =>
{
HandlePush(message);
});
return true;
}
return false;
}
protected override void StartActivityForPushMessage(PushMessage message)
{
base.StartActivityForPushMessage(message);
HandlePush(message);
}
[MainThread]
void HandlePush(PushMessage message)
{
//TODO: handle push message
}
}
}

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

PushFragment был легковесной альтернативой сложной интеграции с использованием жизненного цикла Activity. С другой стороны, он требовал наследования FragmentActivity и неявно использовал более сложный жизненный цикл Fragment.

PushFragment и PushEventListener теперь заменены на Wavesend#registerForPushNotifications(Callback) и NotificationServiceExtension.

Пользовательский широковещательный приемник для Push-уведомлений (PW_NOTIFICATION_RECEIVER)

Section titled “Пользовательский широковещательный приемник для Push-уведомлений (PW_NOTIFICATION_RECEIVER)”

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

Этот получатель теперь полностью заменен на NotificationServiceExtension:

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Wavesend.Notification;
[assembly: MetaData("com.wavesend.notification_service_extension",
Value = "com.your.package.YourNotificationServiceExtension")]
namespace YourNamespace
{
[Register("com/your/package/YourNotificationServiceExtension")]
public class YourNotificationServiceExtension : NotificationServiceExtension
{
protected override void StartActivityForPushMessage(PushMessage message)
{
// base.StartActivityForPushMessage(message) starts default launcher activity
// or activity marked with ${applicationId}.MESSAGE action.
// Simply do not call it to override this behaviour.
// start your activity instead:
Intent launchIntent = new Intent(ApplicationContext, typeof(YourActivity));
launchIntent.SetFlags(ActivityFlags.NewTask);
ApplicationContext.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. Объект wavesend был представлен для нативного интерфейса JavaScript со следующим API: getHwid(): string - возвращает Wavesend HWID устройства. getVersion(): string - возвращает текущую версию Wavesend SDK. postEvent(event: string, attributes?: object, successCallback?: function, errorCallback?: function) - отправляет запрос postEvent. sendTags(tags: object) - отправляет теги, связанные с устройством. getTags(successCallback: function, errorCallback?: function) - возвращает теги, связанные с устройством. closeInApp() - закрывает HTML-страницу In-App.

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

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

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