如果通知在脱机时发送,Android是否可以检索FCM通知

时间:2018-03-01 19:10:11

标签: android firebase firebase-cloud-messaging

我正在使用firebase云消息,我想知道是否可以向离线设备发送通知并在之后上线后接收它。

客户端

我通过主题向虚拟设备发送通知(Nexus 5 API 27) 我使用以下依赖项:

compile 'com.google.firebase:firebase-auth:11.8.0'
compile 'com.google.firebase:firebase-core:11.8.0'
compile 'com.google.firebase:firebase-database:11.8.0'
compile 'com.google.firebase:firebase-messaging:11.8.0'

服务器端

我有一个发送POST请求的Java服务器:

网址:     https://fcm.googleapis.com/v1/projects/PROJECT_ID/messages:send

接头

Authorization : Bearer <token OAuth2>
Content-Type : application/json

{
    "message": {
        "topic":"topicName",
        "data": {
            "infoKey": "infoValue",
        }
    }
}

启动虚拟机后,我会快速收到通知。 但是,如果我的虚拟设备关闭且我的服务器发送通知,则即使等待超过10分钟,客户端也不会收到通知。 这是正常的吗? 我觉得我做错了,因为当我阅读文档时,通知应该存储,直到有人读到它:

https://firebase.google.com/docs/cloud-messaging/concept-options#ttl

有谁知道我犯了错误,或者我是否对FCM的功能过分重视?

谢谢。

2 个答案:

答案 0 :(得分:1)

这应该是正确的行为。当设备离线或打瞌睡时,它会在感觉需要或设备唤醒时立即发送。 https://firebase.google.com/docs/cloud-messaging/concept-options#lifetime

您可以尝试使用优先级,以便在设备开启后更快地发送通知,如果您需要尽快发送通知。

答案 1 :(得分:1)

你很好。

但是现在谷歌不会在用户的基础上提供任何历史记录功能。

我可以建议一个解决这个问题的简单方法。您可以记录您在服务器端发送给用户的通知。在用户端,每当收到通知时,都会保留另一条记录。

每当用户上线时,只记录两个记录并使用restful service获取丢失的记录。您可以使用各种参数来记录时间戳,令牌等记录。

希望这有帮助。