iOS中的GCM(Google Cloud Messaging)(通知和数据负载。)

时间:2016-02-22 05:29:13

标签: ios objective-c google-cloud-messaging apple-push-notifications

我有一个问题。对于iOS,我们可以同时发送"数据"和"通知"在有效载荷中?我只收到"通知"被发送到GCM。当我添加两者时,我没有收到任何通知。我的问题是,如果我想在iOS和Android设备上获得更新,那么有效载荷应该是什么?

当前有效载荷:

    {
    "to":"/topics/testTopic",
    "content_available":true,
    "priority":"high",
    "notification": {
                    "body":"Test Message",
                   "title":"test"
                    }, 
    "data": { 
                   "title": "Title.D Mixed JSON", 
                    "body": "Content.D Mixed JSON", 
              "productId" : "1" 
            } 
    }

2 个答案:

答案 0 :(得分:1)

你的有效载荷很好,没有理由你不应该得到它。但这两者之间存在一些差异。 官方文档中记录了"notification""data"之间的差异:https://developers.google.com/cloud-messaging/concept-options

  

当您希望GCM代表客户端应用程序显示通知时,请使用通知。当您希望应用程序处理显示或处理Android客户端应用程序上的消息时,或者如果您希望在有直接GCM连接时向iOS设备发送消息,请使用数据消息

因此,对于您要发送的混合消息,了解您的应用是在后台还是在前台非常重要:

  

在后台,应用程序在通知托盘中接收通知有效负载,并仅在用户点击通知时处理数据有效负载。   在前台时,您的应用会收到一个包含两个有效负载的捆绑包。

未接收推送通知的另一个原因是您尚未分配传送优先级。有两个选项normalhigh

  

高优先级。 GCM尝试立即提供高优先级消息,允许GCM服务在可能的情况下唤醒休眠设备并打开与应用服务器的网络连接

<强>正常

  

正常优先。这是邮件传递的默认优先级。普通优先级消息不会在睡眠设备上打开网络连接,并且可能会延迟它们的传送以节省电池

尝试在有效负载中"priority" : "high"之前设置"notification"

答案 1 :(得分:1)

不允许复制“通知”和“数据”的内容,当用户点击通知时,您可以读取“通知”中的数据,以下JSON应该与您合作。

 {
   "to":"/topics/testTopic",
   "content_available":true,
   "priority":"high",
   "notification": {
             "body":"Test Message",
             "title":"test"
           }, 
   "data": { 
             "productId" : "1" 
           } 
}