Android &引用;生命周期“;FCM中设备组的定义

Android &引用;生命周期“;FCM中设备组的定义,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,我已经设法做了一个实现,允许我创建一个设备组,从中添加和删除注册ID,并向它发送消息,但现在我意识到我不知道什么时候应该调用这个方法 我最初的想法是 当用户注册到应用时创建设备组 在用户登录时向设备组添加注册id 删除用户注销时我在登录时添加的注册id 问题是,如果用户仅在一台设备上登录应用程序,并且他注销,那么当我删除注册id时,设备组将被删除。这意味着在用户再次登录之前,我无法通知用户任何事情。但这不应该是它的工作原理,例如在Facebook上,即使你输入后没有登录,你也会收到旧的通知

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

我最初的想法是

  • 当用户注册到应用时创建设备组
  • 在用户登录时向设备组添加注册id
  • 删除用户注销时我在登录时添加的注册id
问题是,如果用户仅在一台设备上登录应用程序,并且他注销,那么当我删除注册id时,设备组将被删除。这意味着在用户再次登录之前,我无法通知用户任何事情。但这不应该是它的工作原理,例如在Facebook上,即使你输入后没有登录,你也会收到旧的通知

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

当用户登录时,我可以按照上面解释的方法强制生成一个新的令牌,但我想一定有比这更好的方法

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

因此,我的问题是,考虑到我所描述的问题和我尚未发现的任何其他问题,设备组的正确(或正确)生命周期是什么。 谢谢


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

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

首先,如果我正确理解了您的流程,那么一旦用户安装并注册了您的应用程序,您就会立即创建相应的设备组并添加用户的注册令牌。从某种意义上说,这是有点太多的使用它

一般来说(正如建议的那样),设备组消息传递用于单个用户拥有多个设备的情况(我相信您已经了解了这一部分),但立即创建一个设备并不好

我心目中关于如何使用设备组消息传递的流程如下:

  • 用户在应用程序中安装和注册。包含具有唯一id的凭据。将相应的注册令牌保存在同一用户下
  • 用户登录到不同的设备,您可以检测该设备的注册令牌,如果不同,则保存(如果您有
    注册令牌
    节点或其他东西),然后生成
    通知密钥
    (设备组),然后相应地使用它
  • 如果用户注销。还要处理设备组映射(请参阅我的答案和)
  • 然后,每次发送消息时,验证用户是否只有一个注册令牌,如果是,则直接使用该特定令牌

    额外问题的回答:不。(但尚未测试,因此我不能确定)我理解FCM消息流向设备组的方式是,在发送消息后:

  • 发送到FCM服务器的消息
  • 然后将消息排队到设备组中的相应设备。比如说
    device1
    device2
  • 用户登录到
    设备3
    。它将不会收到可能已排队的消息

  • 综上所述,如果您愿意的话,还可以进一步测试。

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

    首先,如果我正确理解了您的流程,那么一旦用户安装并注册了您的应用程序,您就会立即创建相应的设备组并添加用户的注册令牌。从某种意义上说,这是有点太多的使用它

    一般来说(正如建议的那样),设备组消息传递用于单个用户拥有多个设备的情况(我相信您已经了解了这一部分),但立即创建一个设备并不好

    我心目中关于如何使用设备组消息传递的流程如下:

  • 用户在应用程序中安装和注册。包含具有唯一id的凭据。将相应的注册令牌保存在同一用户下
  • 用户登录到不同的设备,您可以检测该设备的注册令牌,如果不同,则保存(如果您有
    注册令牌
    节点或其他东西),然后生成
    通知密钥
    (设备组),然后相应地使用它
  • 如果用户注销。还要处理设备组映射(请参阅我的答案和)
  • 然后,每次发送消息时,验证用户是否只有一个注册令牌,如果是,则直接使用该特定令牌

    额外问题的回答:不。(但尚未测试,因此我不能确定)我理解FCM消息流向设备组的方式是,在发送消息后:

  • 发送到FCM服务器的消息
  • 然后将消息排队到设备组中的相应设备。比如说
    device1
    device2
  • 用户登录到
    设备3
    。它将不会收到可能已排队的消息
  • 综上所述,如果您愿意,可以进一步测试