Firebase云消息传递(FCM)令牌是否唯一?
我在firebase文档中找不到任何地方表明收到的令牌是唯一的。如果有人能给我指出这样的地方,我将不胜感激。主要问题-我应该在数据库中为这些令牌设置唯一约束吗。谢谢 当我搜索时,第一个结果是: 要验证它们是否可以发送和接收消息,客户端应用程序必须向GCM注册。在此过程中,客户端将获得唯一的注册令牌 Firebase云消息传递实例ID令牌唯一标识应用程序的实例。它们是全球独一无二的Firebase云消息传递(FCM)令牌是否唯一?,firebase,firebase-cloud-messaging,Firebase,Firebase Cloud Messaging,我在firebase文档中找不到任何地方表明收到的令牌是唯一的。如果有人能给我指出这样的地方,我将不胜感激。主要问题-我应该在数据库中为这些令牌设置唯一约束吗。谢谢 当我搜索时,第一个结果是: 要验证它们是否可以发送和接收消息,客户端应用程序必须向GCM注册。在此过程中,客户端将获得唯一的注册令牌 Firebase云消息传递实例ID令牌唯一标识应用程序的实例。它们是全球独一无二的 是否应将数据库中的列标记为唯一列取决于您对该列的使用情况。正如你自己所问的那样:如果一个代币在这个表中出现两次,会发
是否应将数据库中的列标记为唯一列取决于您对该列的使用情况。正如你自己所问的那样:如果一个代币在这个表中出现两次,会发生什么坏事?将列标记为唯一会防止坏事情发生吗?根据文档,它们是唯一的,但您不能将它们绑定到特定设备,因为它们可能会发生变化 : 在以下情况下,注册令牌可能会更改:
- 应用程序已在新设备上还原
- 用户卸载/重新安装应用程序
- 用户清除应用程序数据
- 应用程序删除实例ID
- 应用程序已在新设备上还原
- 用户卸载/重新安装应用程序
- 用户清除应用程序数据
根据我的经验,我注意到FCM令牌在以下三种情况下发生了更改:-
注意:-没有办法保持FCM令牌不变。感谢您的反馈,但您能否提供一些文档链接?当我搜索时,第一个结果是,“要验证它们是否可以发送和接收消息,客户端应用程序必须向GCM注册。在此过程中,客户端获得唯一的注册令牌…”谢谢,我搜索了大约半个小时,但没有找到那个链接。我想这是因为我的问题是“firebase推送通知令牌是否唯一?”而不是“google cloud messaging”。诀窍可能是我搜索了“google cloud messaging”(firebase cloud messaging的前身)。如果我的答案有用,请单击其左侧的向上投票按钮。如果它回答了您的问题,请单击复选标记接受它。这样别人就知道你得到了(足够的)帮助。他们可能会改变并不意味着他们不是独一无二的。@mcelicalderon你完全正确。我以为PO询问了他们的独特性。(我将编辑答案)卸载后应用程序更新后应在旧令牌上收到应用程序通知吗?@RoshanS是的,它们不同。如果从第一个设备还原第二个设备上的应用程序,则它可能具有相同的令牌(但可能性很小)。。。它们都依赖于
vendorIdentifier
,vendorIdentifier是根据这么多规则重置的(在其他规则下也可能保持不变)。这就是为什么文件说可能会改变。如果您想进一步了解为什么生成可绑定到设备的绝对唯一id是困难的(或不可能的),请阅读@RoshanS我意识到我只回答iOS。简而言之,手机制作人不想侵犯他们的用户隐私以便于追踪,因此他们不会提供足够的信息。这对于第三方来说是独一无二的,足以区分其客户并跟踪一些短期活动。这就是为什么苹果从他们的SDK中删除了对获取设备标识符(绝对唯一)的支持,我相信Android在最新(或之前)的Android SDK中也做了同样的事情