Устранение неполадок, связанных с тем, что Android не отображает push-уведомления Firebase, несмотря на то, что устройство зарегистрировано и API работает успешно - PullRequest
0 голосов
/ 07 мая 2019

У меня есть приложение React Native, которое использует https://github.com/zo0r/react-native-push-notification для управления push-уведомлениями.Попытка перехода с GCM на сообщения FCM на Android не работает, и я не могу найти способ отладить проблему.

У меня есть:

  • Удалены все специфичные для GCM компоненты
  • Соблюдается https://firebase.google.com/docs/cloud-messaging/android/client
  • Выполняется инструкция по реакции-нативного push-уведомления
  • Успешно собран и запущен приложение
  • При отправке уведомления через Firebaseконсоль - он обнаруживает, что есть 1 пользователь для отправки, но он никогда не будет получен на устройстве
  • При отправке через API https://fcm.googleapis.com/fcm/send, ответ указывает на успех, несмотря на то, что уведомление не было получено наустройство
  • Подтвержденное устройство имеет разрешение на получение уведомлений
  • Протестировано с приложением в фоновом режиме

AndroidManifest.xml соответствующие части:

<manifest...>
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application...>
        <meta-data  android:name="com.dieam.reactnativepushnotification.notification_channel_name"
                android:value="CHANNEL NAME"/>
        <meta-data  android:name="com.dieam.reactnativepushnotification.notification_channel_description"
                    android:value="CHANNEL DESCRIPTION"/>
        <meta-data  android:name="com.dieam.reactnativepushnotification.notification_color"
                    android:resource="@android:color/white"/>
        <activity...>
        <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher" />
        <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <service android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationRegistrationService"/>

        <service
            android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
    </application>
</manifest>

app / build.gradle включает в себя:

dependencies {
...
    implementation "com.google.firebase:firebase-core:16.0.1"
    implementation "com.google.firebase:firebase-messaging:17.5.0"
}
apply plugin: 'com.google.gms.google-services'

build.gradle включает в себя:

buildscript {
...
    dependencies {
        classpath 'com.google.gms:google-services:4.0.1'
        classpath 'com.android.tools.build:gradle:3.0.0'
    }
...
}

google-services.json был правильно размещен с соответствующим именем пакета.

https://fcm.googleapis.com/fcm/send
POST-запрос (идентификаторы удалены)

Header "Authorization: key=AUTH_KEY"
{
  "to": "DEVICE_TOKEN",
  "notification":
    {
       "title": "Test",
       "body": "Test"
    },
  "priority": 10
}

Ответ (идентификаторы удалены)

{
  "multicast_id": MULTICAST_ID,
  "success": 1,
  "failure": 0,
  "canonical_ids": 0,
  "results":
  [
    {
      "message_id": "0:MESSAGE_ID"
    }
  ]
}

Консоль Firebase при отправке тестового сообщения в приложение показывает:

This campaign targets 1 app user(s) (100% of potential users)

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

Как определить, почему сообщение не отображается на устройстве?

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Версия реакции-нативного push-уведомления была не последней и не имела поддержки Firebase, которая, как я думал, была.

Обновление до последней версии и устранение различных зависимостей решило проблему.

Спасибо @Aparna за упоминание RNPushNotificationListenerService - это привело меня к поиску проблемы.

0 голосов
/ 07 мая 2019

В вашем почтовом запросе добавьте поле данных, например:

Header "Authorization: key=AUTH_KEY"
{
"to": "DEVICE_TOKEN",
"notification":
{
   "title": "Test",
   "body": "Test"
},
"data":{
   "body": "Test"
},
"priority": 10
}

И вам нужно переопределить onMessageReceived в вашем RNPushNotificationListenerService.

Таким образом вы сможете обрабатывать уведомления в onMessageReceived независимо от того, находится ли приложение в фоновом или переднем плане.

См .: Обработка сообщений в Firebase

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