Firebase云消息传递(FCM)的令牌是唯一的吗?

8

我在Firebase文档中找不到标明接收到的令牌是唯一的地方。如果有人能指引我这样的地方,我将不胜感激。主要问题是:我是否应该为此类令牌在数据库中设置唯一约束条件。谢谢!

4个回答

10
根据文档,它们是唯一的,但由于可能会更改,因此无法将它们绑定到特定设备。

Ios文档:

当以下情况发生时,注册令牌可能会更改:

  • 在新设备上恢复应用程序
  • 用户卸载/重新安装应用程序
  • 用户清除应用数据。

Android文档:

当以下情况发生时,注册令牌可能会更改:

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

他们可能会改变,但这并不意味着他们不是独一无二的。 - mcelicalderon
@mcelicalderon 你说得完全正确。我以为 PO 是在问它们随时间的唯一性。(我会编辑回答) - farzadshbfn
应用程序更新后,旧令牌上是否应该接收卸载应用程序通知? - Vishal Patoliya ツ
1
@RoshanS 是的,它们是不同的。如果第二个设备上的应用程序从第一个设备恢复,它可能具有相同的令牌(但这是极不可能的)...它们都依赖于vendorIdentifier,而vendorIdentifier基于如此多的规则进行重置(并且也可能在其他规则下保持不变)。这就是为什么文档说可能会更改。如果您想了解一些关于生成绑定到设备的绝对唯一ID很难(或不可能)的原因,请阅读https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor?language=objc - farzadshbfn
1
@RoshanS 我意识到我只回答了iOS的问题。简而言之,移动设备制造商不想侵犯用户的隐私以便被跟踪,因此他们不会提供足够的信息。只提供足够独特的信息让第三方能够区分他们的客户并跟踪一些短期活动。这就是为什么苹果从其SDK中删除了获取设备标识符(绝对唯一)的支持,我相信Android在最新(或之前)的Android SDK中也做了同样的事情。 - farzadshbfn
显示剩余2条评论

8
当我搜索Google Cloud Messaging标记是否唯一时,第一个结果是文档中的此页面,其中写道:

为了验证他们能够发送和接收消息,客户端应用程序必须向GCM注册。在此过程中,客户端获取一个唯一的注册令牌...

Firebase Cloud Messaging实例ID令牌唯一地标识应用程序的实例。它们是全局唯一的。
是否将数据库中的列标记为唯一取决于您对该列的使用。自问:如果在此表中存在两个标记,会发生什么不好的事情?将该列标记为唯一是否可以防止不好的事情发生?

谢谢您的反馈,但您能提供一些文档链接吗? - Compadre
当我搜索Google Cloud Messaging令牌是否唯一时,第一个结果是文档中的此页面,其中写道:“为了验证它们可以发送和接收消息,客户端应用程序必须向GCM注册。在此过程中,客户端获取唯一的注册令牌...” - Frank van Puffelen
谢谢,我搜索了大约半个小时,但没有找到那个链接。我想这是因为我的问题是“Firebase推送通知令牌是否唯一?”,而不是“Google云消息传递”。 - Compadre

2

根据我的经验,我注意到FCM令牌在以下三种情况下会更改:

  1. 应用程序被卸载或重新安装。
  2. 应用程序的数据被清除。
  3. 应用程序安装在新设备上。

注意:没有办法保持FCM令牌不变。


1
是的,它们是独特的,但它们并不是恒定不变的。这意味着当我第一次安装一个应用程序时,FCM令牌是例如abcd,但是当我卸载该应用程序并重新安装相同的应用程序时,我的FCM令牌不是abcd,而是其他内容。
因此,FCM令牌是独特的,但它们不是恒定不变的,在我们卸载和安装应用程序时,它们会不断改变。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接