尝试使用带有TTL的谷歌FCM发送数据

mor*_*a13 8 javascript android json firebase firebase-cloud-messaging

我一直试图通过谷歌的FCM发送数据,该数据将在10秒后过期.我的意思是,如果用户在这10秒内未连接到互联网,他将不会收到它.

这是我Javascript将请求发送到FCM的代码:

var http = new XMLHttpRequest();
http.open("POST", "https://fcm.googleapis.com/fcm/send", true);
http.onreadystatechange = function() {};
http.setRequestHeader("Content-type", "application/json");
http.setRequestHeader("Authorization", "key=*****");
http.send(JSON.stringify({
    "to": "/topics/all",
    "data": {
        "Title": "Test",
        "areas": "Dan, Ayalon",
    },
    "android": {
      "ttl": "10s" //I've tried also removing the s, and changing the ttl to TTL and time_to_leave
    }
}));
Run Code Online (Sandbox Code Playgroud)

问题是我的Android应用程序仍然在2分钟之后收到数据,在那10秒过去之后.(我在这里做的是关闭我的手机网络并在2分钟后将其关闭)

我尝试通过Firebase控制台发送请求,并且它有效...我一分钟后没有收到消息.我在这做错了什么?

谢谢!

更新:我想到了另一个解决方案.也许我会手动发送当前时间,然后我会让客户端检查已经过了多少时间?这听起来像是一个好的解决方案吗?

更新2:我尝试了Google在其文档中提供的每个示例,但没有一个能够正常运行.我还尝试了一百万种其他方式来编写请求但却没有任何效果.我开始觉得它可能是一个错误.我报告了Google,现在我正在等待他们的回复.我会在这里更新他们的回复.

mor*_*a13 17

所以这是我从Google的Firebase支持中得到的答案,他们发现我在这里做错了什么:

查看您的代码,您的请求格式似乎有些不一致.标头用于Legacy FCM API,而有效负载的格式用于HTTP v1 FCM API.

如果您想使用旧版API,则必须省略Android特定的有效负载并使用time_to_live而不是ttl.但是,如果您更喜欢使用HTTP v1 API,则必须按照此处的说明构建请求,并使用token参数而不是.

问题是我结合了两种请求方法.请求的标头与Legacy API的格式匹配,而请求本身则采用HTTP v1 FCM API格式.

这部分请求属于HTTP v1 API fomat:

"android": {
  "ttl": "10s" 
}
Run Code Online (Sandbox Code Playgroud)

虽然正确的方法是没有"android"标签,只使用time_to_live标签:

"time_to_live": 10 //The time in seconds
Run Code Online (Sandbox Code Playgroud)

这就是我的完整请求现在的样子:

var http = new XMLHttpRequest();
http.open("POST", "https://fcm.googleapis.com/fcm/send", true);
http.onreadystatechange = function() {};
http.setRequestHeader("Content-type", "application/json");
http.setRequestHeader("Authorization", "key=*****");
http.send(JSON.stringify({
    "to": "/topics/all",
    "data": {
        "Title": "Test",
        "areas": "Dan, Ayalon",
    },
    "time_to_live": 10
}));       
Run Code Online (Sandbox Code Playgroud)

如果您有任何疑问,请发表评论