Переход на Android SDK v.5.x.x в Xamarin
PushManager
Section titled “PushManager”PushManager состоял из различных методов для разных функций. Эти методы теперь разделены между разными классами:
- PushNotificationsManager
- WavesendNotificationSettings
- WavesendInApp
- WavesendBadge
- WavesendLocation
BaseRegistrationReceiver
Section titled “BaseRegistrationReceiver”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
Section titled “BasePushMessageReceiver”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
Section titled “PushFragment”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); } }}Notification Factory
Section titled “Notification Factory”Также произошли некоторые критические изменения, связанные с фабрикой уведомлений:
- AbsNotificationFactory был заменен на NotificationFactory
- Методы AbsNotificationFactory#onPushReceived(PushData) и AbsNotificationFactory#onPushHandle(Activity) заменены классом NotificationServiceExtension (onMessageReceived, startActivityForPushMessage).
- DefaultNotificationFactory был заменен на WavesendNotificationFactory.
- PushData был заменен на PushMessage.
In-App сообщения
Section titled “In-App сообщения”- InAppFacade был заменен на WavesendInApp.
- Объект
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. Если вы столкнетесь с какими-либо трудностями, пожалуйста, поделитесь своими мыслями с нами через эту форму.