【问题标题】:GCM not received at after idle空闲后未收到 GCM
【发布时间】:2013-10-22 16:45:04
【问题描述】:

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

我是否遗漏了什么可以在交货延​​迟时使其正常工作?

请指出可以帮助我解决此问题的链接。

提前致谢。

【问题讨论】:

    标签: android google-cloud-messaging


    【解决方案1】:

    你的 delay_while_idle 应该是真的,来自GCM APi docs

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

    您使用的是可折叠密钥,因此当设备空闲时,GCM 服务器上只会保留一个。

    在代码中:

    Message message = new Message.Builder()
        .delayWhileIdle(true)
        //..
    

    【讨论】:

    • 只需添加一条评论,即 GCM 和 FCM 现已正式弃用 delay_while_idle 参数。请参阅docs
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多