Достаточно ли простого вещательного приемника для обработки событий FCM? - PullRequest
0 голосов
/ 29 апреля 2020

У меня были проблемы с FCM, из-за которых я хочу отправить уведомление из уведомлений composer (сеть Firebase). и немного изменить, как это выглядит в центре уведомлений системы (системный трей). А также по щелчку открыть полное окно уведомлений.

Ничего особенного, просто добавив действие, чтобы открыть ссылку, которую я определил в пользовательских данных.

Используя FirebaseMessagingService я не могу ни получить ни кнопку действия, ни показать полную информацию об уведомлении.

Действие вы можете понять, почему не может быть получена информация, кроме полной информации об уведомлении? Не так очевидно.

Позвольте мне объяснить. Когда приложение находится в фоновом режиме, вы не запускаете FirebaseMessagingService.onMessageReceived, и, следовательно, вы не можете настроить внешний вид уведомления или его активность.

По умолчанию запускается начальное действие по умолчанию и добавляются пользовательские данные.

И вот в чем проблема

Он добавляет только пользовательские данные, которые я определил в части «Дополнительные параметры» уведомлений composer. Ни заголовок уведомления, ни тело не добавляются к намеренным дополнениям.

Попытка решить эту проблему путем добавления этих вещей в пользовательские данные, не работает, если вам нужно сказать что-то более 200 символов (максимальная длина ввода пользовательских данных).

Поэтому я переопределяю Приемник FCM транслирует, объявив следующие в манифесте android:

        <receiver
            android:name=".notifications.FCMOverlordBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
                <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
                <category android:name="${applicationId}"/>
            </intent-filter>
        </receiver>

, а также внедрив мой безупречно названный Приемник.

class FCMOverlordBroadcastReceiver: BroadcastReceiver(){

    override fun onReceive(context: Context?, intent: Intent) {
        NotificationHandler(context!!).onMessageReceived(RemoteMessage(intent.extras))
        abortBroadcast()
    }
}

Я знаю, что это, вероятно, вызовет cra sh, если полученное событие com.google.android.c2dm.intent.REGISTRATION получено.

И насколько я тестировал этот лог c работает Nokia 8 (android 9), эмулятор android 10 и эмулятор android 11 (приложение не работает).

Я использую Glide для асинхронной загрузки изображения уведомления для BigPictureStyle, и он все еще работает.

Мой главный вопрос

Может ли такой способ действий вызывать сбои или не работать в некоторых случаях, за исключением, конечно, события регистрации?

ps Я использую класс Firebase-сообщений RemoteMessage для анализа intent.extras.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...