"生命周期" FCM中的设备组

时间:2017-05-31 17:03:37

标签: android firebase firebase-cloud-messaging

我设法做了一个实现,允许我创建一个设备组,添加和删除它的注册ID并向其发送消息,但现在我已经意识到我不明白我什么时候应该称这种方法。

我最初的想法是

  • 当用户注册到应用时创建设备组
  • 在用户登录
  • 上向设备组添加注册ID
  • 删除我在用户注销时添加的注册ID

问题在于,如果用户仅在一个设备中登录到应用程序并且他注销,那么当我删除注册ID时,设备组将被删除。这意味着我无法在再次登录之前通知用户任何事情。但这不应该是它的工作方式,例如在Facebook中,即使你输入后没有记录,也会得到旧的通知。

但是,如果我在注销时删除注册ID,问题是两个设备组可以在内部进行相同的注册。当我的应用程序安装在手机中时(在Android的情况下)它会生成一个注册ID,到目前为止我可以调试它是唯一一次生成一个。这意味着如果用户登录,注销然后新用户登录,我可以将该注册ID添加到两个用户设备组。这是否意味着他们都会收到通知?

我可以通过执行解释here来强制在用户登录时生成新令牌,但我想必须有比这更好的解决方案。

另外,在某些时候我需要删除注册ID,否则我将达到20限制。

所以我的问题是设备组的正确(或正确)生命周期是什么,考虑到我所描述的问题以及我还没有发现的任何其他问题。 谢谢!

额外问题:如果我向设备组发送通知,然后在收到通知之前,用户登录新设备并将其注册ID添加到设备组,它收到通知?我想他不会。

1 个答案:

答案 0 :(得分:1)

我认为在这里应该如何使用设备组存在轻微的混淆。

首先,如果我正确理解您的流量,只要用户安装并注册您的应用,您就会立即创建相应的设备组并添加用户的注册令牌。从某种意义上说,这有点过于使用它了。

一般情况下(和建议的那样),设备组消息传递用于单个用户有多个设备(这部分我确定你有),但立即创建一个设备不错。

关于如何使用设备组消息传递的想法是:

  1. 用户在应用程序中安装和注册。包含具有唯一ID的凭证。您在相同的用户下保存相应的注册令牌。
  2. 用户登录到其他设备,您检测到该设备的注册令牌(如果不同),保存(如果您有registration_tokens个节点),然后生成notification_key(设备组) ),然后相应地使用它。
  3. 如果用户退出,handle it accordingly。还要处理设备组映射(请参阅我的答案herehere)。
  4. 然后,每次发送消息时,验证用户是否只有一个注册令牌,如果是,则直接使用该特定注册令牌。

    回答额外问题:不。 (但是没有测试过,所以我不能确定)我理解FCM消息流向设备组的方式是,在您发送消息之后:

    1. 发送给FCM服务器的消息。
    2. 然后将消息排队到设备组中的相应设备。我们说device1device2
    3. 用户登录device3。它不会收到它可能已经排好的消息。
    4. 如上所述,如果你愿意,可以进一步测试。