У меня есть приложение 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)
Указывает, что устройство зарегистрировано и может отправлять кампанию, однако оно никогда не отображается на устройстве.
Как определить, почему сообщение не отображается на устройстве?