我有一项服务使用Firebase Cloud Messaging使用FCM Data messages与collapse_key
参数集与其Android客户端进行通信。从有关可折叠键的文档:
当有较新的消息呈现较旧的线程时,相关消息与客户端应用程序无关,FCM将替换旧消息。例如,发送到同步或过时的通知消息。
这就是我要找的东西。我不需要所有更新,只需要最后一个。但是,如果用户在线,我需要 ASAP 。
然而,我得到一个奇怪的速率限制,不会导致任何HTTP错误代码。它可以很容易地重现,只需要连续20条数据消息并监控android FirebaseMessagingService.onMessageReceived
:
for i in {1..20}; do
curl -v -X POST --header "Authorization: key=$SERVER_KEY" \
--Header "Content-Type: application/json" \
https://fcm.googleapis.com/fcm/send \
-d "{\"to\":\"$CLIENT_TOKEN\", \
\"data\":{\"counter\":\"$i\"}, \
\"priority\":\"high\", \
\"collapse_key\": \"test\" \
}"
done
上面的bash脚本有点难以阅读,但我有一个我感兴趣的 counter
变量。
收到一些消息(counter=~10
)后,它会停止,您需要切换网络状态以获取带有counter=20
的最后一条消息。最后一条消息也会在几分钟(通常是~10分钟)后出现,此时请求火力登记入住(?)。
从上面的curl命令中删除collapse_key
会导致收到所有20条消息(counter={1..20}
)。
所以,问题:这是一个错误吗?或者我关闭(/速率有限),因为我“滥用”界面(因为所有请求都发回200
响应,我认为我没事。)
答案 0 :(得分:0)
<?php
#API access key from Google API's Console
define( 'API_ACCESS_KEY', 'YOUR-SERVER-API-ACCESS-KEY-GOES-HERE' );
$registrationIds = $_GET['id'];
#prep the bundle
$msg = array
(
'body' => 'Body Of Notification',
'title' => 'Title Of Notification',
'icon' => 'myicon',/*Default Icon*/
'sound' => 'mySound'/*Default sound*/
);
$fields = array
(
'to' => $registrationIds,
'notification' => $msg
);
$headers = array
(
'Authorization: key=' . API_ACCESS_KEY,
'Content-Type: application/json'
);
#Send Reponse To FireBase Server
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch );
curl_close( $ch );
#Echo Result Of FireBase Server
echo $result;
将您的数据放入正文部分。