限制 android GCM 中的 collapse_key 计数。第2部分

Posted

技术标签:

【中文标题】限制 android GCM 中的 collapse_key 计数。第2部分【英文标题】:Limit collapse_key count in android GCM. Part 2 【发布时间】:2014-11-07 15:37:09 【问题描述】:

我已经询问过折叠键限制并从@ianhanniballake 获得正确答案here。现在,我想精确一些。 GCM collapse_keys 的限制是针对每个应用程序级别的。 应用级别是什么意思?例如,在两个对应的设备上安装了两个应用程序,即

    Device1->AppInstance1->Reg1 Device2->AppInstance2->Reg2

每个应用的实例是否最多可以有 4 个折叠键或所有应用实例上都有 4 个折叠键? gcm 注册 ID 和 4 个折叠键、4 个折叠键每个注册 ID 或 4 个折叠键每个注册 ID(每个应用程序的所有用户)之间有什么联系?在我们的应用程序中,我们有用户会话实体,它可以活两次,我们可以使用会话 ID 作为折叠键还是折叠键必须只是常量字符串?请有人帮助我!

【问题讨论】:

【参考方案1】:

每个设备最多 4 个折叠键,这意味着每个应用实例 4 个(由于每个应用实例具有不同的注册 ID,这也意味着每个注册 ID 4 个)。

GCM 允许 GCM 服务器每台设备在任何给定时间最多使用 4 个不同的折叠键。换句话说,GCM 服务器可以同时存储 4 条不同的 send-to-sync 消息,每条消息都有不同的折叠键。

(Source)

至于使用 session id 作为折叠键,没有什么能阻止你这样做,但实际上没有必要。由于仅针对相同的折叠键和相同的注册 ID 折叠消息,因此您可以在所有应用程序实例中使用相同的折叠键。我假设这会使您的服务器代码更简单。

【讨论】:

感谢您的回答!我希望你是对的。对所有应用程序实例使用相同的折叠键存在一些问题。例如,当应用程序具有多帐户功能时,需要一个帐户中的消息不会折叠(清除)另一个帐户中的消息。当然,这可以通过改变服务器业务逻辑来解决,但是服务器的这种变化给我们带来了麻烦:) 也许你可以给我建议,我们如何在应用程序中通过同步加载机制和多用户功能来达到一个好的结果? @Eran @Samik 如果向两个应用实例发送具有相同折叠键的消息,则发送到一个应用实例(由一个注册 ID 标识)的消息不会折叠发送到另一个应用实例的消息(由另一个注册 ID 标识)。还是您的意思是同一应用程序实例的多个帐户(在同一设备上)?在这种情况下,为每个帐户使用不同的折叠键会很快耗尽每台设备的 4 个折叠键限制。 是的,我的意思是同一个应用程序实例的多个帐户,我也认为在这种情况下会超过 collapse_key 限制。可能这个问题应该在我们的服务器端解决。 @Eran 我可以问你另一个问题吗!我们的应用程序中有 voip 功能,并且 gcm 推送延迟对我们来说是不可接受的。如果您可以将我引导到有关此问题的正确主题,我将非常感谢您。像this one 这样的工作区看起来不太好(((@Eran @Samik 我帮不了你。我只从事服务器端 GCM 实现。除了演示应用程序之外,我不必处理客户端。

以上是关于限制 android GCM 中的 collapse_key 计数。第2部分的主要内容,如果未能解决你的问题,请参考以下文章

GCM - 当达到 100 条消息的限制时,来自 GCM 的特殊消息是啥样的?

Android 推送通知 (GCM) 的内容或数据限制

限制发送推送通知(防止垃圾邮件) - GCM

跨设备同步数据时避免GCM限制

处理大量用户的gcm xmpp限制:是Limited还是Unlimited?

在不使用 GCM 的情况下在 android 中推送通知