【问题标题】:"Life-cycle" of device group in FCMFCM 中设备组的“生命周期”
【发布时间】:2017-05-31 17:03:37
【问题描述】:

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

我最初的想法是

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

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

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

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

另外,有时我需要删除注册 ID,否则我将达到 20 个限制。

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

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

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:

    我认为这里应该如何使用设备组有点混乱。

    首先,如果我正确理解您的流程,用户安装并注册您的应用后,您会立即创建相应的设备组并添加用户的注册令牌。这个,从某种意义上来说,是用的有点过头了。

    一般情况下(并按照建议),设备组消息用于单个用户拥有多个设备(这部分我相信你明白了),但立即创建一个不会不好。

    关于设备组消息应该如何使用的想法是这样的:

    1. 用户在应用程序中安装和注册。包含具有唯一 ID 的凭据。您将相应的注册令牌保存在同一用户下。
    2. 用户登录到不同的设备,你检测到该设备的注册令牌,如果不同,保存(如果你有一个registration_tokens节点或其他东西)然后生成一个notification_key(设备组),然后使用相应地。
    3. 如果用户注销,handle it accordingly。还要处理设备组映射(请参阅我的答案herehere)。

    然后,每次发送消息时,验证用户是否只有一个注册令牌,如果是,则直接使用那个特定的。

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

    1. 消息发送到 FCM 服务器。
    2. 然后消息排队到设备组中的相应设备。假设device1device2
    3. 用户登录到device3。它不会收到可能已经排队的消息。

    话虽如此,如果您愿意,可以进一步测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 2021-04-01
      • 1970-01-01
      相关资源
      最近更新 更多