Google Play Services 8.4.0 中断 Google 云消息 Android 如果 iOS 也被使用

Google Play Services 8.4.0 breaks Google Cloud Messaging for Android if iOS is also used

有几个帖子描述了这个问题的各个方面,但还没有一个令人满意的答案,所以我试图在这里整理它们,希望得到一个可以解决所有这些问题的权威答案问题。

After updating Google play services to 8.4.0 push notifications displayed by themselves

问题的要点是,如果您创建仅包含数据的 GCM 消息(即不使用通知字段,因此不打算让它生成通知)并且包含 content_available=True (这是从 iOS 客户端获得所需行为所必需的),然后从 8.4.0 开始,这会在 Android 中生成不需要的空白通知。 在 8.4.0 之前,一切正常。

问题的具体情况似乎是,如果 Android 客户端收到一个它不理解的 GCM 字段,它不会忽略它,而是添加一个 "e=1" 字段(大概是 "e"表示错误?)作为通知即使之前的消息中没有任何通知,导致它触发使通知出现的代码,而不是指示的代码它到要处理的应用程序。

可能的解决方法:我想可以在服务器上跟踪哪些客户端是 iOS 以及哪些客户端是 Android,并且只包含 content_available 标记 iOS客户,这个问题就解决了。但是,过去没有必要这样做,而且我的系统是基于这样的想法构建的,即我可以不了解客户端类型,这似乎是有意的。

content_available 标志突然导致 Android 上出现这些空白通知这一事实似乎是新引入的错误,但如果知道它是否真的是错误将非常有用这可能会在 8.5.0 中修复(在这种情况下,我现在可以只使用 8.3.0 构建,直到 8.5.0 出来),或者如果它打算成为一个永久的解决方案。如果这不会改变,正确的解决方案是跟踪哪些 GCM 注册 ID 属于 iOS 设备,哪些属于 Android 设备,然后每次发送两个单独的 GCM 请求?

提前感谢 Google 团队对这个问题的任何正式答复。

看我的回答here。我找到的解决方案是只在我的服务器上发送值 zeroe 字段。对于 Android 它有效,尚未在 iOS 上测试。

今天,我终于从 Google 那里得到了确认,这实际上是一个错误,并且已于本周推出修复程序。我还可以确认我在 8.3.0 中看到的行为现在在 8.4.0 中同样有效,所以显然修复完全在服务器端完成。

我还被告知,实际上最好的做法是在发送到 iOS 设备和发送到 Android 设备的服务器端划分 GCM 消息,因为可能存在未来不同平台可能需要不同有效负载的时间。

升级版本 9.2.1 后 push notifications displayed by themselves 当应用程序处于后台时(@dblank 解决方案对我不起作用)

解决方法:删除 Android

notification 节点
{
    "to": "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
    "notification": {},  //Remove this node when PUSH to Android devices
    "data": {
        "key": "value"
    }
}