谷歌云消息推送显示成功消息但无法发送到iOS设备。

10

我在使用Google Cloud Messaging时遇到了一个非常奇怪的问题。我的问题是GCM已经成功地注册了设备,当发送一条消息时,我会收到来自Google的成功消息。但是这些设备从未收到任何消息。

我从GCM获得的消息是:

"result": "Push notification sent successfully: {\"multicast_id\":6008387530769664000,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1442824842607522%73fc535e73fc535e\"}]}"

让事情变得更加混乱的是,我的实现大约两周前还能工作,但至今没有做任何更改。应用程序的 Android 版本可以正常接收消息,只有 iOS 实现无法工作。

非常感谢任何帮助!

谢谢!


1
你能贴出完整的HTTP请求头和主体吗?你也可以尝试为你的消息设置更高的优先级,或更改你的消息寿命。higher prioritylifespan - ztan
2个回答

13

在我把最后一根头发都拔光之后,终于解决了这个问题。

事实证明设备是可以接收到消息的,但是 GCM 默认将其优先级设置为最低。这意味着设备接收到通知,但永远不会显示出来。这个优先级用于静默通知,在后台唤醒应用程序。我发现这是因为我一直在控制台收到以下消息:

低优先级推送:[com.test.app] - 不支持后台刷新

优先级是1到10之间的值,所以我将优先级设置为10,然后立即在设备上收到了消息。我的 GCM POST 请求正文现在看起来像这样:

{
  "to": "GCM token here",
  "notification": {
    "sound": "default",
    "badge": "2",
    "title": "default",
    "body": "Test Push!",
  },
   "priority" : 10,
} 

我真的希望这篇文章能帮助到其他人,因为我花了一周的时间为此苦恼。(ノಠ益ಠ)ノ

编辑:

你可以将“优先级”设置为“高”,这与将其设置为“10”完全相同(优先级是0到10之间的值。Google会将文本转换为iOS的数字)。


1
我还必须手动创建一个供应配置文件(而不是使用Xcode的“自动”设置)来使我的应用程序能够使用GCM。我遇到了你报告的相同问题(GCM显示发送成功,但设备从未收到),除此之外,在那之后所有尝试发送推送通知的尝试都会失败并显示“NotRegistered”。我认为没有供应配置文件导致GCM认为注册令牌不再有效(在第一次尝试之后)。无论如何,感谢你帮我省去了大部分头发! - T Blank
你说得对。你救了我一命,否则我就要抓狂了;-)。不过我刚开始就已经这么做了。 - Arash
如果有人正在使用 FCM,您可以使用 "priority":"high"。 - Tim

2

不要添加"priority": 10, 您应添加以下行: "content_available": true,

在APNS服务器(iOS)中,“content_avaialble”更改为1,这会导致后台推送通知。而添加“priority”:10将耗尽更多的iPhone电池电量。在我的情况下,我甚至没有与优先级有关的任何内容,但它仍然有效。


1
这对我有用,经过几天的挫败感。谢谢! - BThompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接