Firebase云消息传递设备组泄漏

时间:2016-06-28 14:44:20

标签: android firebase firebase-cloud-messaging

我要开发一个使用设备组功能的应用。据我所知,我需要首先发送当前注册令牌,我将方法onTokenRefresh上的Android客户端发送到服务器,然后将此注册令牌添加到正确的设备组(或者如果它不存在则创建它) HTTP请求。但是,我发现有可能泄露注册令牌,因为Android应用用户可能会多次擦除应用的数据。怎么预防呢?当超过20个成员的限制时会发生什么?是否可以检查某个组是否已经存在?

2 个答案:

答案 0 :(得分:2)

  

然而,我发现注册令牌可能会泄漏,因为Android应用用户可能会多次轻擦应用的数据。如何预防?

如果通过阻止意味着在App Manager中禁用应用的清除数据,则应参考此postaccepted answer表示不可能。

但是,Jakar's answer提供了一种解决方法,而不是清除数据,而是显示管理空间。 Haven尚未尝试过,所以我无法肯定地说。然而,赞成票不言自明。

但是,如果用户擦除/清除应用程序的数据,您应该参考FirebaseInstanceId文档中所述的内容:

  

除以下情况外,实例ID是稳定的:

     
      
  • 应用删除实例ID

  •   
  • 在新设备上恢复应用

  •   
  • 用户卸载/重新安装应用

  •   
  • 用户清除应用数据

  •   
     

在上述情况下,会生成一个新的Instance ID,并且应用程序需要重新创建以前生成的授权令牌onTokenRefresh()

  

当超过20个成员的限制时会发生什么?

不确定这里的问题是什么..但是如果您要将设备添加到设备组中超过最大值...

我们无法在FCM: Device Group Messaging文档中明确说明,但如果您参考添加到群组部分,则说明:

  

成功的操作会返回notification_key

因此,我认为如果您尝试将其他设备添加到已经最大化的设备组,则操作将失败

如果您认为自己超过20岁,我建议使用Topics。但我真的不知道您的用例是什么,所以......您的电话。

  

是否可以检查某个组是否已存在?

为此,您应该使用notification_keynotification_key_name。根据{{​​3}}:

  

notification_key_name是给定组唯一的名称或标识符(例如,它可以是用户名)。 notification_key_namenotification_key对于一组注册令牌是唯一的。如果您有多个针对相同发件人ID的客户端应用,则每个客户端应用notification_key_name 唯一非常重要。这可确保消息仅发送到预期的目标应用程序。

并强调声明:

  

设备组的基本管理 - 创建和删除组,添加或删除设备 - 通常通过应用服务器执行。

密钥和名称应该在您的服务器上,以便您可以检查它是否已经存在。

答案 1 :(得分:2)

我目前正在取得一些成功,但尚未经过全面测试或扩展。

App使用firebase作为后端,我正在添加FCM以实现推送通知。

当用户可能在不同的设备或多个设备上时,我需要处理组。

我为每个设备存储了返回的notification_key值和registration_id(令牌),即

profiles
   -profile_id
     -FCM
       -notification_key:value
       -registration_ids
         -device_1_uuid:token_for_device_1
         -device_2_uuid:token_for_device_2

当用户首次登录时,FCM节点下没有数据,即没有notification_key且没有registration_ids

每次用户登录时,他们都会连接到他们的profile_id。

我获得FCM令牌然后

如果没有notification_key(即第一次在任何设备上),我使用profile_id作为notification_key_name创建组,并存储返回的notification_key。

如果有notification_key(在新设备上返回登录或首次登录),我会看到当前设备是否有registration_id,如果没有(首先在新设备上登录),请添加device_uuid :令牌对到registration_ids。

如果有(返回登录)我从FCM组中删除存储的令牌,并用我刚刚获得的令牌替换我存储的registration_ids中的旧令牌。

我现在可以通过发送到他们的profile_id来发送该用户(个人资料)使用的所有设备,并且我不应该泄漏令牌,因为我删除旧的。

但是,我无法知道,因为似乎没有API只能读取组和令牌,以便可以不时地清理这些组。

另外,我的早期代码出现了错误,我没有捕获notification_key所以现在我无法添加,删除或对我的某个组执行任何操作。我讨厌这样的想法,我将不得不永远留在火山云中的烧伤团体。

我认为FCM应该提供更多API访问权限,以帮助我们保持整洁。