Как получать пуши из нескольких источников отправки
Результат выполнения шага:
Обработка мобильных пушей полученных не из Mindbox
Доработки нужно проводить в созданных вами раннее, при интеграции Mindbox сервисах, унаследованных от FirebaseMessagingService, HmsMessageService, HmsMessageService.
Далее инструкция на примере работы с Firebase. Для остальных провайдеров логика идентична
Необходимо провести следующие изменения:
Добавить метод отправки токена на ваш бекэнд
Определить поставщика пуша и выбрать способ отрисовки
Удалить методы инициализациии и получения токена Firebase. Они уже добавлены в Mindbox SDK
Добавление метода отправки токена на ваш бэкенд
В метод onNewToken добавьте вызов метода для отправки токена на ваш backend
Code
... override fun onNewToken(token: String) { Mindbox.updatePushToken( context = applicationContext, token = token, pushService = MindboxFirebase ) // Your method to send firebase token to your backend sendTokenToYourBackend(token) }...
Определите получен пуш из Mindbox или нет
Для определения источника пуша используется метод isMindboxPush
В метод передается сообщение, полученное в onMessageReceived:
Для Firebase вызовите его у объекта MindboxFirebase,
Реализуйте отображение пуша полученного не из Mindbox
Code
class MindboxFirebaseMessagingService : FirebaseMessagingService() { override fun onMessageReceived(message: RemoteMessage) { super.onMessageReceived(message) if (MindboxFirebase.isMindboxPush(remoteMessage = message)) { val messageWasHandled = Mindbox.handleRemoteMessage( context = applicationContext, message = message, activities = activities, channelId = channelId, channelName = channelName, pushSmallIcon = pushSmallIcon, defaultActivity = defaultActivity, channelDescription = channelDescription ) } else { // Your code for display notification showNotification(title = message.data["title"], body = message.data["body"]) } }...
Пример готового кода
Code
class MindboxFirebaseMessagingService : FirebaseMessagingService() { override fun onMessageReceived(message: RemoteMessage) { super.onMessageReceived(message) if (MindboxFirebase.isMindboxPush(remoteMessage = message)) { val messageWasHandled = Mindbox.handleRemoteMessage( context = applicationContext, message = message, activities = activities, channelId = channelId, channelName = channelName, pushSmallIcon = pushSmallIcon, defaultActivity = defaultActivity, channelDescription = channelDescription ) } else { // Your code for display notification showNotification(title = message.data["title"], body = message.data["body"]) } } override fun onNewToken(token: String) { Mindbox.updatePushToken( context = applicationContext, token = token, pushService = MindboxFirebase ) // Your method to send firebase token to your backend sendTokenToYourBackend(token) }}
Метод onMessageReceived() всегда срабатывает только для data пушей.
Для notification пушей в свернутом и выгруженном состоянии приложения метод вызван не будет. Уведомление в таком случае будет отрисовано системой.
Исключение составляет RuStore: метод onMessageReceived() будет вызван для любого типа пуша