- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个使用 Firebase Cloud Messaging 的服务使用 FCM Data messages 与其 Android 客户端通信与 collapse_key
参数集。从有关可折叠键的文档中:
When there is a newer message that renders an older thread, related message becomes irrelevant to the client app and FCM replaces the older message. For example send-to-sync, or outdated notification messages.
这就是我要找的。我不需要所有更新,只需要最后一个。但是,如果用户在线,我需要它尽快。
但是,我得到了一个奇怪的速率限制,它不会导致任何 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
) 后,它会停止,您需要切换网络状态以获取最后一 strip 有 counter=20
的消息。最后一条消息也会在几分钟(通常约 10 分钟)后出现,此时请求 Firebase checkin (?)。
从上面的 curl 命令中删除 collapse_key
会导致收到所有 20 条消息(其中 counter={1..20}
)。
那么,问题:这是一个错误吗?还是因为我“滥用”接口(interface)而关闭(/rate limited)(因为所有请求都发回 200
响应,我认为我没问题)。
最佳答案
<?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;
将您的数据放在正文部分。
关于android - Firebase 云消息传递最后一个 collapse_key 未收到(速率受限?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528270/
我通过 Firebase 通知控制台向用户 Android 设备发送通知,我注意到即使我在用户设备离线时发送 10 个不同的通知,一旦用户上线,她/他将收到全部 10 个通知。 但是在 Firebas
我有一个 python/django 应用程序正在向 GCM 发送推送通知,但我无法使 collapse_key 参数起作用。它为每条新消息创建一个新通知,而不是折叠它们。 python 代码如下所示
我正在我的 android 推送应用程序上实现 C2DM,这就是谷歌对 collapse_key 的评价: "一个任意字符串,用于在设备离线时折叠一组类似的消息,以便仅将最后一条消息发送到客户端。这是
Android 和 iOS 推送通知是否需要 collapse_key?如果我在 payload 中指定 collapse_key,FCM 会使用它吗?或者它会添加另一个 collapse_key?
嗨我看不到对 collapse_key 实现的任何解释。我想我明白它的作用,但不明白它是如何做到的! Android Cloud to Device Messaging Framework 我设置了一
我有一个使用 Firebase Cloud Messaging 的服务使用 FCM Data messages 与其 Android 客户端通信与 collapse_key参数集。从有关可折叠键的文档
admin.messaging().sendToDevice(tokens, payload) 这是有效载荷: const payload = { collapse_key: "somethi
我已经问过折叠键限制并得到正确答案 here来自@ianhanniballake。现在,我想明确一些事情。 GCM collapse_keys 的限制在每个应用级别。 应用级别是什么意思?例如,在两个
我是一名优秀的程序员,十分优秀!