前言
项目里进行谷歌推送的时候,希望能再加入一个功能,如果用户没有在一定的时间内收到推送,则取消这条推送,改为推送另一条消息(XX未收到)。
研究思路
第一步:提取要素
这个功能的期望特征是什么?
从测试反馈的情况来看,某设备本需要在若干时间后收到某个推送,但是没有收到,然后过一段时间才收到。而超时后,就可能导致推送失效,比如通话请求推送。
关键在于:通知的时效性
如果这个通知不能在某段时间内收到就使其无效改为推送其他消息
既然如此逻辑上就要考虑一个节点,怎么知道通知没能在某段时间内收到呢。
第二步:场景分析
在实际使用过程中有什么期望?
我期望,服务器知道通知超时,并且根据超时的时间进行处理
关键在于:可控的时效性参数
通过对于FCM官方sdk的研究我找到了合适的方案
官网链接:https://firebase.google.com/docs/cloud-messaging/concept-options
原文如下:
-
FCM 通常会在消息发出之后马上进行传递。 但是,也有一些例外情况。例如,如果在 Android 平台上,设备有可能处于关闭、离线或不可用状态。 FCM 可能会有意延迟消息传递,以防止应用消耗过多资源和对电池续航时间产生不良影响。
-
在这种情况下,FCM 会存储消息,等到可行时立即发送。尽管大多数情况下这样做都没什么问题,但有些应用可能永远不会传递延迟消息。举例来说,如果消息是来电或视频聊天通知,则它仅在通话终止之前的这段较短时间内有意义。或者,如果消息是活动邀请,那么如果在活动结束后才收到消息,它将毫无用处。
-
在 Android 和 Web/JavaScript 上,您可以指定消息的最长有效期。此值必须是介于 0 至 2419200 秒(28 天)之间的一段持续时间,其对应于 FCM 存储并尝试传递消息的最长时间期限。不含此字段的请求默认为最长期限(四周)。
官网案例:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
<