FirebaseInstanceId - Firebase“应用程序”或Android应用程序唯一的标识符?

4

我创建了一个小型的Android应用程序,应该创建唯一的userIds

我考虑使用FirebaseInstanceId.getId(),因为文档中说

返回一个稳定的标识符,唯一地标识应用程序实例

但是在这个上下文中,app是什么意思呢?

app是指使用FirebaseInstanceId的“真正”的Android或iOS应用程序吗?还是指Firebase App或者更好的Firebase Project

我可以假设生成的id在我的Firebase项目中是唯一的,并且可以存储在FirebaseDatabase中作为userId,还是应该以其他方式创建唯一的userId

2个回答

6
你可以推断出这里的“应用程序”指的是设备上特定的应用程序安装。查看FirebaseInstanceId的javadocs,并注意实例ID何时会更改的规则。安装/卸载和清除应用程序数据是用户在其设备上针对应用程序的行为结果。请注意,此值可能会更改,因此可能不适合Firebase以外的用途。
Firebase使用此值来识别可以接收云消息的应用程序。它不代表特定的用户。用户可以在多个设备上安装相同的APK,并使用单个帐户登录到每个设备中的一个。如果要向该用户发送云消息,则应该将消息发送到哪个设备上的应用程序实例?您可能希望将其全部发送。这就是实例ID发挥作用的地方。为了保持您的应用程序的一致行为,无论它已经为用户安装了多少次,您需要每个唯一安装的实例ID,以便将消息定位到所有实例。
要识别特定的用户,您应该使用Firebase身份验证,并假定他们每次都会登录相同的帐户,因此将有一个单独的UID可供您存储以引用该人。通常将多个实例ID关联到单个用户,以便将消息定向到该用户。

1

我正在使用两种不同的方法在两个不同的应用程序上,

第一种方法: 使用设备 IMEI(您需要请求READ_PHONE_STATE权限才能这样做),

然后,您的Firebase结构将类似于 -

/uniqueImei1/Database1..(games/notes etc..)
/uniqueImei2/Database2..(games/notes etc..)

或者,更好的方法是使用Firebase Auth UID,每个用户一旦通过名称&密码/Google登录/Facebook登录等方式连接到您的应用程序,就会获得一个称为UID的唯一ID,为了实现该UID,您将使用

String UID = FirebaseAuth.getInstance().getCurrentUser().getUid();

然后,你的Firebase结构 -
/UID1/Database1..(games/notes etc..)
/UID2/Database2..(games/notes etc..)

了解更多关于选项2的信息,请点击这里。

你真的应该使用选项2,祝好运 :)


谢谢。也许那是一个更好的(最好的?)解决方案。但它并没有回答我的问题 :) - StefMa

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