【问题标题】:GCM Topics or Downstream MessagingGCM 主题或下游消息传递
【发布时间】:2015-10-30 12:24:09
【问题描述】:

我正在尝试将 GCM 添加到我的应用程序中,该应用程序是具有提要、帖子、cmets 的通用社交应用程序之一。想想脸书。

我阅读了向主题发送消息的帖子:https://developers.google.com/cloud-messaging/topic-messaging,其中说:

基于发布/订阅模型,主题消息最多支持 每个应用有 100 万订阅。

一个主题的 100 万订阅实际上很少。

如果一个人订阅了不同的帖子,这可能会很快用完。例如,使用 facebook,每次您对朋友的帖子发表评论时,它都是一次订阅。当下一个人点赞或点赞该帖子时,您会收到来自该帖子的通知。

我现在正在考虑使用 GCM 主题是否真的是一个好主意。为了绕过这个限制,我宁愿使用正常的下游消息传递会更好,因为它似乎没有配额:https://developers.google.com/cloud-messaging/downstream

我对下游消息传递中的一件事感到困惑 - 每次发送下游消息时,都会发出 POST 请求:

HTTP POST 请求

https://gcm-http.googleapis.com/gcm/send Content-Type:application/json 授权:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{ “数据”:{ “分数”:“5x1”, “时间”:“15:10”},“到”:“bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...”}

在这篇文章中,我们被告知这些是向客户端应用发送下游消息时可用的消息选项:https://developers.google.com/cloud-messaging/http-server-ref#downstream

to”部分是 google 要求的。

要多播下游消息,您还需要为“registration_ids”指定一个字符串数组。

此参数指定接收多播消息的设备列表(注册令牌或 ID)。它必须包含至少 1 个且最多 1000 个注册令牌。

如果我要向 A、B 和 C 人多播一条消息,我会将 A、B 和 C 的注册令牌放入“registration_ids”数组,但我会将什么放入“to”请求的一部分?

【问题讨论】:

    标签: android google-cloud-messaging


    【解决方案1】:

    主题与下游

    “100 万订阅”的限制确实使主题消息传递或多或少毫无意义。我只在一个目标群体相当小的应用程序中使用它,在那里我用它来发送发送给所有客户端的一般通知。在那个特定的用例中,它非常好,因为这样我就不必关心保存注册 ID。

    在您的情况下,我认为目标群体会更大,因此您将需要大多数通知的下游消息,以将订阅数量保持在限制范围内。

    而且,如果你也有一个网络应用程序(比如 Facebook),那么你也必须在你的网络应用程序中订阅主题,据我所知这是不可能的,但是将帖子与你的用户链接起来s 正常的 id 不会有问题,通过它,当其他人以某种方式更改帖子时,您会自动知道所有喜欢/评论帖子的用户的 reg-id。

    最后一个提示:想想一个已经评论过帖子并因此成为该帖子的“订阅者”的用户。当您使用主题并且该用户第二次访问该帖子时,他/她会收到有人对该帖子发表评论的通知(这毫无意义)并且您将无法将他/她排除在由他触发的通知之外- /她自己。因此,您需要每个用户和每个帖子都有一个主题,而这又与使用用户的注册 ID 完全相同。

    我的结论:主题消息仅在您有一个小型应用程序/目标群体时才有用,并且在使用时,您需要确保用户无法检索包含信息的通知他显然不会感兴趣。

    下游参数

    如文档中所述,to 用于单个收件人的通知或主题通知。只要您有多个 reg-id,您就需要 registration_ids。尝试触发设置了两个参数的通知时,您将从 GCM 检索服务器错误:

    必须使用“registration_ids”字段或“to”,不能同时使用

    (在文档中找不到,只是试了一下)

    【讨论】:

    • 感谢您的详细回答。我想我会坚持向下传递消息。
    • “想想已经评论过帖子的用户......”。在这种情况下,您的应用程序可以检查是否例如。评论来自您自己(例如,相同的用户名)。如果是这种情况,请丢弃该消息。
    • @Tom 是的,但这需要有效负载数据(或者在发送到同步消息的情况下是一个相当无用的服务器请求)、唯一且不可更改的用户名等,并且最终会导致不必要的数据流量和我认为不做某事比做某事然后在某些特殊情况下取消它更不容易出错
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    相关资源
    最近更新 更多