onMessageReceived не вызывается с сообщением данных, когда приложение убито - PullRequest
0 голосов
/ 09 июля 2020

Я разрабатываю чат-приложение в реальном времени, используя 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. Проблема может быть связана с устройством.

...