如果向iOS中的GCM / FCM发送“数据”(但“通知”工作)有效负载,则不会收到推送通知didReceiveRemoteNotification

时间:2017-06-30 12:53:00

标签: ios notifications google-cloud-messaging firebase-cloud-messaging

我正在尝试为我们的iOS应用程序收到“数据”有效负载通知。

今天我们可以根据以下内容发送GCM notification推送通知。

https://developers.google.com/cloud-messaging/concept-options

(FCM的文字相同)

一个简单的测试是使用CURL:

curl -X POST \
  https://gcm-http.googleapis.com/gcm/send \
  -H 'authorization: key=##_GCM_SERVER_ID_##' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'postman-token: ##_POSTMAN_TOKEN_##' \
  -d '{
    "notification": {
        "body": "Test body"
    },
    "to" : "##_DEVICE_TOKEN_##"
}
'

这将成功触发iOS AppDelegate.didReceiveRemoteNotification:fetchCompletionHandler功能。

但是,如果将其更改为data通知:

curl -X POST \
  https://gcm-http.googleapis.com/gcm/send \
  -H 'authorization: key=##_GCM_SERVER_ID_##' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'postman-token: ##_POSTMAN_TOKEN_##' \
  -d '{
    "data": {
        "body": "Test body"
    },
    "to" : "##_DEVICE_TOKEN_##"
}
'

即使应用程序位于后台/前台,我也看不到任何内容从GCM(在didReceiveRemoteNotification函数中)发送到应用程序。

即使它在文档中说它应该:

https://developers.google.com/cloud-messaging/concept-options#notifications_and_data_messages

  

请注意这些特定于平台的详细信息:

     
      
  • 在Android上,可以在用于启动活动的Intent中检索数据有效负载。
  •   
  • 在iOS上,数据有效负载可在didReceiveRemoteNotification中找到:。
  •   

GCM可以处理到APN网络的纯data推送通知吗?

与iOS {1}}推送通知相比,我是否需要执行任何特殊操作以接收data

2 个答案:

答案 0 :(得分:2)

将带有FCM的数据类型消息发送到iOS设备时,只有在FCM请求正文中content_available设置为true时才会收到它们,例如:

{
    "to": "--fcm-token--",
    "content_available": true,
    "data": {
        "priority": "high",
        "hello": "world"
    }
}

答案 1 :(得分:0)

除了您分享的笔记外,请不要错过,

  

在iOS上,GCM会存储消息并仅在应用程序位于前台并建立GCM连接时才会传递消息。

有了这个,您可能想要检查Establishing a Connection。然后,当您建立XMPP连接时,CCS和您的服务器使用普通的XMPP <message>节来回发送JSON编码的消息。 <message>的正文必须是:

<gcm xmlns:google:mobile:data>
    JSON payload
</gcm>

另请注意,message_id是数据消息的必填字段。检查此样本请求格式,以获取带有效负载的消息 - Downstream Messages中显示的数据消息。你只需要用CURL转换它。

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to":"REGISTRATION_ID",  // "to" replaces "registration_ids"
      "message_id":"m-1366082849205" // new required field
      "data":
      {
          "hello":"world",
      }
      "time_to_live":"600",
      "delay_while_idle": true/false,
      "delivery_receipt_requested": true/false
  }
  </gcm>
</message>

有关详细信息,请参阅XMPP Connection Server Reference