如果还使用iOS,则Google Play Services 8.4.0会打破Google Cloud Messaging for Android

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

将Google Play服务更新为自己显示的8.4.0推送通知后

Android通知在应用程序未运行时未显示其内容

gcm.notification.e = 1代表Android中的推送通知载荷是什么意思?

问题的关键在于,如果您仅创build一个仅包含数据的GCM消息(即不使用通知字段,因此不打算生成通知),并且包含content_available = True(这是获取所需行为所必需的来自iOS客户端),那么从8.4.0开始,这会在Android中产生一个不需要的空白通知。 在8.4.0之前,一切正常。

问题的细节似乎是,如果Android客户端收到一个GCM字段,它不明白,而不是忽略它,它添加一个“e = 1”字段(大概是“e”意味着错误?)作为通知即使消息之前没有任何通知,也会导致触发出现通知的代码,而不是引导应用程序处理的代码。

可能的解决方法:我想可以跟踪哪些客户端是iOS的客户端,哪些客户端是Android的服务器,并且只包含iOS客户端的content_available标记,这个问题就可以解决了。 但是,过去并不需要这样做,而且我的系统是build立在这样一种观念之上的,即我可以像客户的意图那样对客户types不知情。

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

预先感谢Google团队对这个问题的任何官方回应。

在这里我的答案。 我find的解决scheme是发送这个e领域的zero值在我的服务器上。 对于Android的工作,还没有在iOS上进行testing。

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

我还被告知,事实上,在服务器端将GCM消息分配到iOS设备和去Android设备的GCM消息是最好的做法,因为在将来可能有不同的有效载荷可能需要不同的有效载荷平台。

升级版本9.2.1后,当应用程序在后台时自己显示的推送通知 (@dblank解决scheme不适用于我)

解决方法 :删除Android的notification节点

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