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。我找到的解决方案是只在我的服务器上发送值 zero
的 e
字段。对于 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"
}
}
有几个帖子描述了这个问题的各个方面,但还没有一个令人满意的答案,所以我试图在这里整理它们,希望得到一个可以解决所有这些问题的权威答案问题。
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。我找到的解决方案是只在我的服务器上发送值 zero
的 e
字段。对于 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"
}
}