【发布时间】:2016-06-17 15:57:07
【问题描述】:
我的问题与 stackoverflow 的“doze-mode-and-gcm-notifications”和“android-doze-mode-gcm-priority”问题有关,但由于两者的解决方案是使用 Google play Service 8.3.0对我的案子没有帮助。
上下文
我正在通过 GCM 向我的应用程序发送具有高优先级的静默(不直接向用户显示)推送通知。然后其中一些通知会触发各种 http 请求,以向/从我的 Web 服务发送或获取信息/文件。 由于我们需要能够随时进行这些动作,所以我们必须处理手机进入打盹模式的情况。
问题
GCM 通知正确唤醒应用程序,但在 Samsung S6 上的 http 请求失败(它们总是返回超时错误)。 cordova-plugin-network-information 没有给出插件离线的信息。
在 Nexus 5 设备上进行相同的测试非常有效。
奖金问题
具有正常优先级的 GCM 通知由我的三星 S6 设备在处于空闲状态时处理。 (根据android doze documentation,在空闲状态下,设备不会收到任何具有正常优先级的 GCM 通知,当设备切换到 IDLE_MAINTENANCE 状态时会处理这些通知。)
设备信息
- 三星 Galaxy S6
Nexus 5
两者都启用了开发者选项和 USB 调试
- 两个设备都使用 wifi 连接
- 两台设备安装应用程序的方式相同:使用 USB 电缆连接到我的计算机,然后从 Android Studio 运行应用程序
- 三星设备是全新的,只安装了基本应用程序。
申请信息
- 科尔多瓦 6.1.1
- Cordova phonegap-plugin-push 1.7.0
- Angular 1.5.5 / ngCordova 0.1.26-alpha
- Android Sdk Tools 最后更新(Android 支持库 32 除外,不要马上更新到 33,因为它昨天才发布)
测试
我使用这些命令来激活打瞌睡:
adb shell dumpsys battery unplug
adb shell dumpsys deviceidle force-idle
检查当前状态的命令:
adb shell dumpsys deviceidle | grep mState
状态切换指令:
adb shell dumpsys deviceidle step
从那里我只是使用 Postman 来请求 gcm API 并提供以下数据:
POST https://android.googleapis.com/gcm/send
标题:
Authorization : key=<MYAPIKEY>
Content-Type : application/json
正文(原始):
{
"data": {
"key": {"key":"value"},
"content-available": "1"
},
"registration_ids": ["<MYAPPTOKEN>"]
}
最后,如果我需要发送文件,我的应用会使用 angular $http 方法或 cordova-plugin-file-transfer 请求我的 Web 服务
问题
有没有人遇到过同样的问题,你找到解决办法了吗?
有人知道为什么在这种特殊情况下网络不可用(或处于任何状态)吗? (同样,documentation 说:“GCM 高优先级消息让您可靠地唤醒您的应用程序以访问网络”)
如果是这样,您是否在其他设备型号上也遇到了问题?
额外问题:有人知道为什么三星设备在 IDLE 状态下会处理正常的优先级通知吗? (我不知道我是否必须为这个问题创建一个单独的问题,因为这对我来说只是蛋糕上的樱桃,但它可能以某种方式与主要问题相关联)
【问题讨论】:
-
仅供参考,您的 GPS 版本落后了几个主要版本,您可能应该更新,因为有很多变化
-
有人能解决这个问题吗?我也面临同样的情况。谢谢
标签: android cordova google-cloud-messaging samsung-mobile phonegap-pushplugin