空闲时没有收到GCM

Vin*_*ay 1 android google-cloud-messaging

如果手机连接到网络,我的应用会立即收到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"
    }
}
Run Code Online (Sandbox Code Playgroud)

我错过了一些东西确实能让它在交货延迟时起作用吗?

请指出,这些链接可以帮助我解决这个问题.

提前致谢.

Ale*_*Bcn 6

您可以从GCM APi文档中获取delay_while_idle

如果设备已连接但空闲,则除非delay_while_idle标志设置为true,否则仍会立即传递消息.否则,它将存储在GCM服务器中,直到设备处于唤醒状态.而且这就是collapse_key标志起作用的地方:如果已经存在一条消息,其中存储了相同的折叠密钥(和注册ID)并等待传递,则旧消息将被丢弃,新消息将取代它(即,旧消息将被新消息折叠.

您正在使用可折叠密钥,因此在设备空闲时,只有一个密钥将保留在GCM服务器上.

在代码中:

Message message = new Message.Builder()
    .delayWhileIdle(true)
    //..
Run Code Online (Sandbox Code Playgroud)

  • 只需添加一条注释,即对于GCM和FCM,"delay_while_idle"参数现已正式弃用.请参阅[docs](https://developers.google.com/cloud-messaging/http-server-ref). (2认同)