如果手机连接到网络,我的应用会立即收到GCM消息。但是当用户关闭网络并且在很长的间隙(大约2小时)之后重新连接时,设备不会收到消息。
我没有添加TTL,所以假设它将是4周。
正在发送示例消息:
{
"registration_ids":["APA9xxx........."],
"delay_while_idle":false,
"collapse_key":"New Message",
"restricted_package_name":"com.sample.gcm",
"data":{
"app":2,
"product":"message",
"notif":"03lm9h"
}
}
我错过了什么能让它在交货延迟时发挥作用?
请告诉我可以帮助我解决这个问题的链接。
先谢谢。
答案 0 :(得分:6)
你来自GCM APi docs
,你的delay_while_idle应该是真的如果设备已连接但空闲,除非delay_while_idle标志设置为true,否则仍会立即传递消息。否则,它将存储在GCM服务器中,直到设备处于唤醒状态。而且这就是collapse_key标志起作用的地方:如果已经存在一条消息,其中存储了相同的折叠密钥(和注册ID)并等待传递,则旧消息将被丢弃,新消息将取代它(即,旧消息将被新消息折叠。)
您正在使用可折叠密钥,因此在设备空闲时,只有一个密钥会保留在GCM服务器上。
在代码中:
Message message = new Message.Builder()
.delayWhileIdle(true)
//..