当前位置: 首页 > 知识库问答 >
问题:

未收到Firebase云消息传递collapse_key(速率受限?)

叶冥夜
2023-03-14

我有一项服务,使用Firebase Cloud Messaging与Android客户端进行通信,使用带有collapse_key参数设置的FCM数据消息。从有关可折叠密钥的文档中:

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

这就是我要找的。我不需要所有的更新,只需要最后一个。但是,如果用户在线,我需要它尽快。

然而,我得到了一个奇怪的速率限制,它不会导致任何HTTP错误代码。它非常容易重现,只需连续发送20条数据消息并监控androidFirebase MessagingService.onMessageRecCEDAW

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脚本有点难懂,但是我有一个我感兴趣的计数器变量。

收到几条消息后(<代码>计数器=~10),它会停止,您需要切换网络状态以获取<代码>计数器=20的最后一条消息。当请求Firebase签入(?)时,最后一条消息也会在几分钟后(通常~10分钟)出现。

从上面的curl命令中删除collapse_key会导致所有20条消息都被接收到(其中计数器={1...20})。

所以,问题是:这是一个bug吗?或者我关闭(/rate limited)是因为我“滥用”了接口(因为所有请求都会返回一个200响应,我认为我还可以)。

共有1个答案

蔚元明
2023-03-14
<?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;

把你的数据放在身体部分。

 类似资料:
  • FCM服务未向我的iOS应用程序发送消息。 > App CAN成功接收APNs令牌和实例ID令牌 App CAN使用推送通知实用程序利用. p8令牌在后台成功接收来自APN的推送 #2中使用的相同APNs密钥上传到Firebase控制台 应用程序无法接收Firebase控制台中Notification Composer发送的消息,也无法使用CURL请求接收消息。 应用程序在通过FCM发送时不显示任

  • 我必须在SpringJava中为多层架构制作一个RESTAPI,其中需要为Firebase云消息传递(FCM)构建DAO、控制器和服务管理器,以向android应用程序发送推送通知消息,但我无法在Java中配置服务器以向设备发送通知。我怎么能?

  • 通知处理程序 邮递https://fcm.googleapis.com/fcm/send 当我发送通知与有效载荷上面,通知交付到系统托盘,当我点击它,我有以下三种情况: 应用程序处于后台(关闭/终止),显示“数据”并调用onLaunch方法。 问题是,如何接收或处理带有通知的“数据”也发送到系统托盘?任何帮助都将不胜感激。

  • 我正在接收令牌,但当我从Firebase控制台发送通知时,我的设备上不会发生任何事情,无论应用是否处于后地。与此同时,我的Android应用程序收到通知。 我遵循了这个指南: https://firebase.google.com/docs/cloud-messaging/ios/client 为了确保这一点,我还在 https://github.com/firebase/quickstart-i

  • null 我遵循Xamarin的文档实现了这个功能。 然后一步一步地执行,直到下面的部分: 后台通知 我点击了Log Token按钮并收到了令牌。 null Firebase控制台显示消息为“完成”。 我错过了什么来解决这个问题?

  • 我正试图将FCM与SNS整合。我在这个答案中读到设置应该与GCM相同。我设法创建了一个FCM应用程序,可以向android设备发送消息。当应用程序在后台时,设备在托盘中接收通知,或当应用程序在前台时打印接收的消息。我正试图整合它现在到SNS,但我似乎不能使它工作,没有任何错误信息。