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

Миграция на Android SDK v.5.x.x на Xamarin

PushManager

Anchor link to

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

  • PushNotificationsManager
  • PushwooshNotificationSettings
  • PushwooshInApp
  • PushwooshBadge
  • PushwooshLocation

BaseRegistrationReceiver

Anchor link to

BaseRegistrationReceiver использовался для обработки событий регистрации и отмены регистрации для получения 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 to

BasePushMessageReceiver использовался для имитации поведения уведомлений 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 to

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

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

Custom Push Broadcast Receiver (PW_NOTIFICATION_RECEIVER)

Anchor link to

PW_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 to

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