对于DOZE模式测试,我正在Android 6.0上开发一个示例GCM应用程序。
如上所述,在DOZE模式下,设备不会为正常优先级GCM唤醒。我想检查一下。
根据文档(https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message)
正常优先。这是邮件传递的默认优先级。普通优先级消息不会打开睡眠设备上的网络连接,并且可能会延迟它们的传送以节省电池电量。对于时间敏感度较低的消息,例如新电子邮件或其他要同步的数据的通知,请选择正常的投放优先级。
我使用此链接中的一些服务器代码测试了我的应用。 https://stackoverflow.com/a/22169411/4242382
我从服务器发送的消息是这样的:
alpha[2][8]
如您所见,没有设置优先级,所以在DOZE模式下我不应该立即得到这个。但是设备仍然会立即收到GCM消息。
测试方法
$msg = array
(
'message' => 'here is a message. message',
'title' => 'This is a title. title',
'subtitle' => 'This is a subtitle. subtitle',
'tickerText' => 'Ticker text here...Ticker text here...Ticker text here',
'vibrate' => 1,
'sound' => 1
);
预期行为:普通优先级GCM没有立即交付 观察到的行为:立即传递消息
DOZE模式是否按照文档工作?我没有看到它发生,任何人都面临同样的情况?
答案 0 :(得分:2)
我使用运行API 23的模拟器测试了非优先级GCM消息传递,并观察了记录的行为:当模拟设备处于打盹模式时,消息未传递。退出打盹模式几秒钟后,收到了消息。
我的测试应用是使用Goggle Play Services 8.3.0构建的。 API 23的模拟器映像包含较旧版本的Play服务,当应用程序初始化为更新为8.3.0时会发出警告。我不知道如何在模拟器上执行此操作。该应用程序已成功注册并收到消息,因此我继续进行测试。
我将模拟设备置于打盹模式:
$ adb shell dumpsys deviceidle enable
并重复:
$ adb shell dumpsys deviceidle step
我按照provided here的说明使用curl
发送了邮件。通过观察logcat
输出确认了邮件收据。
deviceidle step
命令生成状态:IDLE_PENDING,SENSING,IDLE_MAINTENANCE和IDLE。对于IDLE以外的所有人,都会立即收到消息。未收到IDLE时发送的消息。等待大约一分钟后,deviceidle step
用于进入IDLE_MAINTENACE状态。在几秒钟内,保留的信息已经发送。
两个建议:
curl
和上面链接的说明发送测试消息,看看是否会产生与服务器代码不同的行为。