Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase云消息传递设备组泄漏_Android_Firebase_Firebase Cloud Messaging - Fatal编程技术网

Android Firebase云消息传递设备组泄漏

Android Firebase云消息传递设备组泄漏,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,我将开发一个使用设备组功能的应用程序。据我所知,我需要首先将我在Android客户端上通过方法onTokenRefresh获得的当前注册令牌发送到服务器,然后通过HTTP请求将该注册令牌添加到适当的设备组(或者创建它,如果它不存在)。然而,我发现有可能会泄漏注册令牌,因为Android应用程序用户可能会多次擦除应用程序的数据。如何预防?当超过20名成员的限制时会发生什么?是否可以检查某个组是否已经存在 然而,我发现有可能泄漏注册令牌,因为Android应用程序用户可能多次擦除应用程序的数据。如何

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

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

如果“阻止”是指在app Manager中禁用应用程序的清除数据,则应参考此项。政府声明这是不可能的

但是,它提供了一种变通方法,在这种方法中,将显示管理空间,而不是清除数据。我还没有试过,所以我不能肯定。不过,投票本身就说明了问题

但是,如果用户擦除/清除了应用程序的数据,您应该参考文档中的说明:

实例ID是稳定的,除非:

  • 应用程序删除实例ID

  • 应用程序已在新设备上还原

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

  • 用户清除应用程序数据

在上述情况下,将生成一个新的
实例ID
,应用程序需要重新创建以前通过实现
onTokenRefresh()
生成的授权令牌


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

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

无法在文档中找到明确的说明,但如果您参考添加到组的部分,则说明:

成功的操作将返回一个
通知\u键

因此,我认为,如果您试图将另一个设备添加到已用完的设备组中,操作将失败

如果你认为你要超过20岁,我建议改用。但是我真的不知道你的用例是什么,所以。。你的电话


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

为此,应使用
通知键
通知键
名称。根据:

notification\u key\u name
是给定组唯一的名称或标识符(例如,它可以是用户名)。
notification\u key\u name
notification\u key
对于一组注册令牌是唯一的。如果您有多个客户端应用程序具有相同的发件人ID,则每个客户端应用程序的
通知\u key\u name
必须是唯一的。这将确保消息只发送到预期的目标应用程序

并强调声明:

设备组的基本管理—创建和删除组,以及添加或删除设备—通常通过应用程序服务器执行


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

我目前正在成功地执行以下操作,但尚未完全测试或扩展

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

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

我将返回的通知密钥值和每个设备的注册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节点下没有数据,即没有通知密钥和注册ID

每次用户登录时,他们都会连接到他们的个人资料id

我拿到FCM代币,然后

如果没有通知密钥(即第一次在任何设备上),我将使用配置文件id作为通知密钥名称创建组,并存储返回的通知密钥

如果有通知密钥(返回登录或在新设备上首次登录),我会查看当前设备是否有注册id,如果没有(在新设备上首次登录),则将设备id:token对添加到注册id中

如果存在(返回登录),我将从FCM组中删除存储的令牌,并将存储的注册ID中的旧令牌替换为我刚获得的令牌

我现在可以通过发送到用户的profile_id来向该用户(profile)使用的所有设备发送消息,我不应该泄露令牌,因为我删除了旧令牌

然而,我没有办法知道,因为似乎没有API来读取组和令牌,以便不时地清理组

另外,我早期的代码被窃听了,我没有捕获通知密钥,所以现在我无法添加、删除或对我的组执行任何操作。我讨厌这样的想法,我将不得不让被烧毁的团体永远躺在火基云中


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

交叉张贴:4个月后,您有什么进展吗?我想知道您应该如何处理设备组中的过期令牌;您应该以某种方式唯一地标识设备…@Galya我决定不使用设备组,我只是使用带有用户id的主题。@Matis根据每个用户id创建topis不是一个好主意。所谓“防止”,我的意思是防止注册id泄漏。擦除应用程序数据只是一个如何快速泄漏这些数据的示例-如果分配了一个新令牌,而旧令牌没有被删除,那么我们就有泄漏。我明白了。-如果分配了一个新的令牌,而没有删除旧的令牌,那么我们就有一个漏洞——这不是简单地在服务器端处理的吗?使用规范ID?其他场景应在客户端应用程序中处理