使用 Firebase 向 Android 设备发送推送通知。
<service
android:name=".util.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
class MyFirebaseMessagingService: FirebaseMessagingService() {
private val TAG = "FirebaseMessaging"
override fun onNewToken(token: String) {
super.onNewToken(token)
Log.d(TAG, token)
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
super.onMessageReceived(remoteMessage)
if (remoteMessage.notification != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.notification!!.body)
}
}
}
我可以使用邮递员接收消息通知。
{
"registration_ids": ["KEY_HERE"],
"notification": {
"title": "HIMAN",
"body": "werwkejh"
}
}
这非常有效,我可以添加一个断点,通知就会通过。但是,我需要将其作为数据类型推送通知,因为当应用程序在后台运行时,它不会触发onMessageReceived回调 - 仅前台。它说它在邮递员中也很成功。
{
"multicast_id": 863107467701827657,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "MESSAGE_ID"
}
]
}
数据推送通知的请求正文如下:
{
"registration_ids": ["KEY_HERE"],
"data":{
"message": "hi!"
}
}
它只是没有触发我需要的消息接收。有人可以帮忙吗?
如果您的通知包含"notification":
它将显示通知,但是当应用程序未运行时,onMessageReceived
将不会调用。 在这种情况下,您可以在"data":
字段中传递数据并从响应中删除notification":
。
您的回复必须如下所示
{
"to": "your device token",
"data":{
"name": "John",
"message": "Hii! "
}
}
我遇到了同样的问题,这对我有用。
当应用程序关闭时,系统将处理通知,如果通知 有效负载具有自动显示通知的通知键 基于此。在有效负载下方显示通知标题和正文时 应用程序关闭,如果您处理数据 json,它不会显示,直到应用程序 开始。
{
"to":"some_device_token"
"notification": {
"title": "HIMAN",
"body": "werwkejh"
},"data": {
"extra":"juice"
}
}
此问题的解决方案是从有效负载中删除通知 将允许应用程序处理 JSON。
{
"to":"some_device_token"
"data": {
"extra":"juice"
}
}
**
如果有效负载包含通知密钥系统将在应用程序关闭时处理, 如果有效负载不包含通知密钥,应用程序将处理它。
**