Я разрабатываю чат-приложение в реальном времени, используя NodeJS в качестве бэкэнда. Каждый раз, когда пользователь A отправляет сообщение пользователю B, я делаю запрос на https://fcm.googleapis.com/fcm/send
в следующем формате:
{
"to":/* User B's FCM Token */",
"data": {
"body": /* Message body */,
}
}
Обратите внимание, я отправляю только данные, а не уведомление. Это делает его сообщение с данными .
Проблема, с которой я сталкиваюсь, заключается в том, что когда приложение находится на переднем плане или не убито, вызывается onMessageReceived, и я могу получить данные, но когда он был убит, onMessageReceived не вызывается. Я не могу просто использовать уведомление, потому что тело сообщения зашифровано с использованием ECDH . Мне нужно получить данные, расшифровать их и показать уведомление.
Манифест:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MyFirebase"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
My FirebaseMessagingService
class MyFirebase : FirebaseMessagingService() {
override fun onMessageReceived(p0: RemoteMessage) {
super.onMessageReceived(p0)
println("onMessageReceived called ${p0.data} ")
}
override fun onNewToken(p0: String) {
super.onNewToken(p0)
println("onNewToken called $p0")
}
}
Также есть ответ по этому поводу c здесь . Это правильно?
РЕДАКТИРОВАТЬ: Мое тестовое устройство - Huawei P Smart 2019. Проблема может быть связана с устройством.