Android Firebase数据库保存FCM令牌以避免重复的更好方法

Android Firebase数据库保存FCM令牌以避免重复的更好方法,android,firebase,firebase-realtime-database,firebase-cloud-messaging,Android,Firebase,Firebase Realtime Database,Firebase Cloud Messaging,我需要将FCM令牌保存到Firebase数据库以发送通知。有更好的方法吗? 现在我这样做: FirebaseDatabase.getInstance().reference.child("users/${user.uid}/tokens").push().setValue(token) 这样,每次推送令牌时,它都具有新的唯一id,并且可以具有相同的令牌 你能给我一个建议吗?或者我可以使用firebase函数来删除重复项。我使用另一种保存令牌的方法解决了这个问题,现在令牌像记录的键一样保存 Fi

我需要将FCM令牌保存到Firebase数据库以发送通知。有更好的方法吗? 现在我这样做:

FirebaseDatabase.getInstance().reference.child("users/${user.uid}/tokens").push().setValue(token)
这样,每次推送令牌时,它都具有新的唯一id,并且可以具有相同的令牌


你能给我一个建议吗?或者我可以使用firebase函数来删除重复项。

我使用另一种保存令牌的方法解决了这个问题,现在令牌像记录的键一样保存

FirebaseDatabase.getInstance().reference.child("users/${user.uid}/tokens").child(token).setValue(true)

我建议不要将这些信息保存在数据库中

考虑到:

在以下情况下,注册令牌可能会更改:

  • 应用程序删除实例ID
  • 应用程序已在新设备上还原
  • 用户卸载/重新安装应用程序
  • 用户清除应用程序数据

FirebaseInstanceId可能被视为PID(个人身份数据),因此请相应地处理它-如果您在欧盟开展业务,还记得2018年3月生效的新GDPR法规吗


相反,我只需要使用令牌注册用户,以便在需要时发送推送通知,并将其发送到您的FCM/GCM服务器。

您能否进一步扩展您的解决方案?为什么这种方法有助于解决您最初的问题?@anthonymonori在使用这种方法的情况下,Firebase数据库不会在数据库中创建相同的新记录。我不应该做任何事情来删除重复项。这确实是正确的解决方案。具有“valueoftoken”:true形式的子节点是Firebase数据库的集合等价物。另请参阅我是否可以使用mongo db而不是firebase数据库来存储令牌和用户信息?@SumanthVarada是的,您可以创建rest api,只需从mongo db保存和获取令牌。谢谢您的建议。我的应用程序在主屏幕打开期间发送令牌,在FirebaseInstanceIdService的onTokenRefresh()方法中,也在发送通知后,所有无效令牌将被删除。您认为它怎么样?取决于您的FCM/GCM服务器设置(或者您可能使用Amazon SNS,但无论如何,您不应该关心无效令牌-Firebase将无法向这些令牌发送任何通知。您唯一关心的应该是始终重新注册用户,前提是:他们之前同意获得推送通知,并且令牌刷新时。始终确保您获得了用户的许可。)在发送任何内容之前发送/许可!我明白,在发送通知之前,我应该得到用户的同意。谢谢。