我要开发一个使用设备组功能的应用。据我所知,我需要首先发送当前注册令牌,我将方法onTokenRefresh
上的Android客户端发送到服务器,然后将此注册令牌添加到正确的设备组(或者如果它不存在则创建它) HTTP请求。但是,我发现有可能泄露注册令牌,因为Android应用用户可能会多次擦除应用的数据。怎么预防呢?当超过20个成员的限制时会发生什么?是否可以检查某个组是否已经存在?
答案 0 :(得分:2)
然而,我发现注册令牌可能会泄漏,因为Android应用用户可能会多次轻擦应用的数据。如何预防?
如果通过阻止意味着在App Manager中禁用应用的清除数据,则应参考此post。 accepted answer表示不可能。
但是,Jakar's answer提供了一种解决方法,而不是清除数据,而是显示管理空间。 Haven尚未尝试过,所以我无法肯定地说。然而,赞成票不言自明。
但是,如果用户擦除/清除应用程序的数据,您应该参考FirebaseInstanceId文档中所述的内容:
除以下情况外,实例ID是稳定的:
应用删除实例ID
在新设备上恢复应用
用户卸载/重新安装应用
用户清除应用数据
在上述情况下,会生成一个新的
Instance ID
,并且应用程序需要重新创建以前生成的授权令牌onTokenRefresh()
。
当超过20个成员的限制时会发生什么?
不确定这里的问题是什么..但是如果您要将设备添加到设备组中超过最大值...
我们无法在FCM: Device Group Messaging文档中明确说明,但如果您参考添加到群组部分,则说明:
成功的操作会返回
notification_key
。
因此,我认为如果您尝试将其他设备添加到已经最大化的设备组,则操作将失败。
如果您认为自己超过20岁,我建议使用Topics。但我真的不知道您的用例是什么,所以......您的电话。
是否可以检查某个组是否已存在?
为此,您应该使用notification_key
和notification_key_name
。根据{{3}}:
notification_key_name
是给定组唯一的名称或标识符(例如,它可以是用户名)。notification_key_name
和notification_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访问权限,以帮助我们保持整洁。