Миграция на Android SDK v.5.x.x на Xamarin
PushManager
Anchor link toPushManager содержал различные методы для разных функций. Теперь эти методы разделены между разными классами:
- PushNotificationsManager
- PushwooshNotificationSettings
- PushwooshInApp
- PushwooshBadge
- PushwooshLocation
BaseRegistrationReceiver
Anchor link toBaseRegistrationReceiver использовался для обработки событий регистрации и отмены регистрации для получения push-уведомлений. Теперь этот ресивер заменен механизмом колбэков:
using Pushwoosh;using Pushwoosh.Exception;using Android.Runtime;using Pushwoosh.Function;
class RegistrationListener : Java.Lang.Object, ICallback{ public void Process(Result result) { if (result.IsSuccess) { string token = (string)result.Data; // обработка успешной регистрации } else { PushwooshException exception = result.Exception.JavaCast<PushwooshException>(); // обработка ошибки регистрации } }}
PushNotificationsManager.Instance.RegisterForPushNotifications(new RegistrationListener());
BasePushMessageReceiver
Anchor link toBasePushMessageReceiver использовался для имитации поведения уведомлений iOS при получении push-уведомления в активном приложении. Это достигалось путем отмены входящего уведомления и вызова колбэка OnMessageReceive. Такой обходной путь требовал ручной регистрации, когда приложение становилось активным, и отмены регистрации, когда приложение уходило в фоновый режим.
Этот ресивер был заменен на NotificationServiceExtension:
using Android.App;using Android.OS;using Android.Runtime;using Android.Support.Annotation;using Pushwoosh.Notification;
[assembly: MetaData("com.pushwoosh.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: обработайте push-уведомление } }}
Это расширение также используется для обработки событий получения уведомлений и нажатия на них, заменяя весь громоздкий код, который использовался при ручной интеграции с Activity.
PushFragment
Anchor link toPushFragment был легковесной альтернативой сложной интеграции, включающей жизненный цикл Activity. С другой стороны, он требовал наследования от FragmentActivity и неявно использовал более сложный жизненный цикл Fragment.
PushFragment и PushEventListener теперь заменены на Pushwoosh#registerForPushNotifications(Callback) и NotificationServiceExtension.
Custom Push Broadcast Receiver (PW_NOTIFICATION_RECEIVER)
Anchor link toPW_NOTIFICATION_RECEIVER использовался для настройки поведения приложения, когда пользователь нажимал на уведомление. Это позволяло обрабатывать уведомления вне контекста Activity и открывать разные Activity в зависимости от содержимого уведомления. Такая интеграция использовала внутренний API Pushwoosh SDK, которого больше не существует.
Теперь этот ресивер полностью заменен на NotificationServiceExtension:
using System;using Android.App;using Android.Content;using Android.Runtime;using Pushwoosh.Notification;
[assembly: MetaData("com.pushwoosh.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) запускает activity по умолчанию // или activity, помеченную действием ${applicationId}.MESSAGE. // Просто не вызывайте его, чтобы переопределить это поведение.
// вместо этого запустите свою activity: Intent launchIntent = new Intent(ApplicationContext, typeof(YourActivity)); launchIntent.SetFlags(ActivityFlags.NewTask);
ApplicationContext.StartActivity(launchIntent); } }}
Notification Factory
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. Если вы столкнетесь с какими-либо трудностями, пожалуйста, сообщите нам об этом через эту форму.