FirebaseInstanceId - 每个Firebase“App”或Android应用程序的唯一性?

时间:2017-01-12 17:34:42

标签: android firebase google-play-services firebase-cloud-messaging

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

我正在考虑使用FirebaseInstanceId.getId(),因为documentation says

  

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

app在这种情况下的含义是什么?

app是否意味着使用FirebaseInstanceId的“真正的”Android或iOS应用?或者它是指“Firebase App”还是更好的Firebase Project

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

2 个答案:

答案 0 :(得分:4)

您可以推断,在这种情况下,“app”表示设备上的特定应用安装。查看javadocs for FirebaseInstanceId,并记下实例ID何时可以更改的规则。安装/卸载和清除应用数据是用户对其设备上的应用进行操作的结果。请注意,此值可能会更改,因此可能不适合Firebase之外的用途。

Firebase使用此值来标识可以接收云消息的应用。它不代表特定用户。用户可以在多个设备上安装相同的APK,使用单个帐户登录其中的每个设备。如果您想向该用户发送云消息,应该将该应用程序的哪个实例发送到哪个设备上?您可能想要发送给所有人。这就是实例id发挥作用的地方。为了保持应用程序的一致行为,无论为用户安装了多少次,您都需要每个唯一安装的实例ID,以便将消息定向到所有这些。

要识别特定用户,您应该使用Firebase Authentication,并假设他们每次都要登录同一个帐户,因此您可以存储一个UID来引用该帐户人。将多个实例ID关联到单个用户通常是为了向该用户进行有针对性的消息传递。

答案 1 :(得分:1)

我在2个不同的应用上使用了2种不同的方法,

第一个: 使用设备IMEI(你需要请求READ_PHONE_STATE权限),

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

export class BoolModel { 
    public BooleanValue: Boolean;
}

FormToModel(f: FormGroup) {
    var model = new BoolModel();
    model.BooleanValue = f.controls['isBoolean'].value ? true : false;
    return model;
}

OR 更好的方法是使用Firebase Auth UID, 每个用户,一旦他使用Name& Pass / Google登录/ Facebook登录等连接到您的应用程序..获取一个名为UID的唯一ID,以实现您将使用的UID

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

然后,你的火力架结构 -

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

For more information about option 2, Click here.

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