- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个关于 GCM 的特殊问题:它似乎不会向运行 Android 4.2.2 的手机发送推送。我测试了八部手机,从 2.2 到 4.2.2,其中一部运行 4.2.2 的手机没有收到推送。我们将 apk 发送给一些拥有 4.2.2 手机的联系人,他们能够确认仅在 4.2.2 手机上推送失败。总而言之,我们在超过 15 台设备上测试了我们的应用程序,其中 5 台在 4.2.2 上,只有这 5 台设备无法接收推送。
无法接收推送的设备是:
调查日志后,手机在 GCM 服务器上正常注册,并带有注册 ID。但是,onMessage 永远不会被触发。同样,它适用于我们所有其他未运行 4.2.2 的手机。我不确定什么会导致这种特定于 API 的行为;我的目标 API 设置为 17,我认为是 4.2。
我的另一个怀疑是,因为所有这些运行 4.2.2 的手机要么尚未上市,要么出厂时未锁定,这可能与问题有关。我还不能调查这个怀疑,因为 4.2.2 还没有被 AT&T 和 T-Mobile 推出,而 Verizon 刚刚从昨天(5 月 21 日)开始逐步推出。但是,我真的不明白 4.2.2 库存 ROM 是如何导致 GCM 无法工作的。
我尝试对这个问题进行一些研究,但似乎没有人遇到任何问题。当我搜索 GCM 和 android 4.2.2 时,我在 SO 和谷歌上得到的所有信息都是新蓝牙堆栈的问题以及更新后缩短的电池生命周期。我非常确信我一定做错了什么,因为其他应用程序似乎发送推送没有问题,但我不确定从哪里开始调查。如果有人能指出正确的方向,我将不胜感激。
编辑:所以发现我不小心关闭了服务器端的日志记录,所以 GCM 实际上确实在发送时返回错误。我在 4.2.2 设备上返回了“NotRegistered”错误,即使客户端上的注册过程没有抛出任何错误,甚至返回了一个注册 ID。同样,推送到非 Android 4.2.2 的设备也能正常工作。
最佳答案
我通过将“delay_while_idle”标志设置为 false 解决了这个问题,多亏了这个线程中的提示:https://groups.google.com/forum/#!topic/android-gcm/CimKwgaf2ws
在 4.2.2 中,google 将 GCM 更改为默认将 delay_while_idle 标志设置为 true,这显然导致屏幕关闭时推送不发出通知声音,或者在我的情况下,导致推送根本不起作用!
我希望这对遇到类似问题的任何人有所帮助。
关于android - GCM 不适用于 Android 4.2.2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698781/
我是一名优秀的程序员,十分优秀!