我正在使用NodeJS作为后端开发实时聊天应用程序。每当用户A向用户B发送消息时,我都会使用以下格式向https://fcm.googleapis.com/fcm/send
发送请求:
{
"to":/* User B's FCM Token */",
"data": {
"body": /* Message body */,
}
}
通知我仅发送数据,不发送通知。这样就变成了data message。
我遇到的问题是,当应用程序处于前台状态或未被杀死时,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>
我的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")
}
}
有关此主题here的答案。这是正确的吗?
编辑: 我的测试设备是Huawei P Smart2019。问题可能与该设备有关。