android-Firebase Cloud Messaging上次未收到塌陷密钥(限速吗?)

我有一个使用Firebase Cloud Messaging与FCM数据消息及其2759542018157315315072参数集与其Android客户端进行通信的服务。 从有关可折叠密钥的文档中:

当有较新的消息呈现较旧的线程时,相关消息与客户端应用程序无关,FCM替换了较旧的消息。 例如,发送到同步或过时的通知消息。

这就是我要的东西。 我不需要所有更新,仅需要最后一个。 但是,如果用户在线,则需要尽快。


但是,我得到了一个奇怪的速率限制,它不会导致任何HTTP错误代码。 只需连续执行20条数据消息并监视android 200,就很容易重现:

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脚本有点难以阅读,但是我感兴趣的是200变量。

在收到一些消息(200)之后,它停止,您需要切换网络状态以获取counter={1..20}的最后一条消息。当请求Firebase签入时,最后一条消息也会在几分钟后(通常是10分钟左右)出现(? )。

从上面的curl命令中删除200,将导致接收到所有20条消息(其中counter={1..20})。


所以,问题是:这是一个错误吗? 还是因为我“滥用”该接口而关闭了(/速率受限)(因为所有请求都发送回200响应,我认为我还可以)。

dacwe asked 2020-02-23T00:54:19Z
1个解决方案
1 votes
<?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;

将您的数据放在正文部分。

PRATEEK BHARDWAJ answered 2020-02-23T00:54:34Z
translate from https://stackoverflow.com:/questions/41528270/firebase-cloud-messaging-last-collapse-key-not-received-rate-limited