当用户在我的Android应用程序中使用firebase注册时,会生成一个FirebaseUser对象,并从中检索用户令牌以保存为我的Google云端点后端中每个用户的唯一标识符。
我使用auth状态监听器,在用户注册时调用:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
mUserId = user.getToken(true).toString();
SignUpAboutFragment signUpAboutFragment = new SignUpAboutFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.sign_up_fragment_container, signUpAboutFragment, SIGN_UP_ABOUT_FRAGMENT_TAG);
ft.addToBackStack(null);
ft.commit();
}
}
};
然后使用字段mUserId将配置文件保存到Google数据存储区中:
mPresenter.saveUserData(firstName, lastName, birthday, mUserId, this, MainActivity.class);
在另一项活动中,我还希望使用当前用户令牌来调用我的端点api:
//Different activity to the above.
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// Using getToken as recommended in the firebase docs.
mUserId = user.getToken(true).toString();
}
当我在两个活动中记录两个mUserId字段时,我发现它们是不同的。
为什么mUserId会发生变化,如何从我的应用中的任何位置检索当前用户的相同标记?
答案 0 :(得分:4)
令牌实际上是识别用户连接的唯一ID。因此,每次重新启动连接时,都会生成另一个令牌。如果要为每个用户使用唯一标识符,则应获取其uid。像这样:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
mUserId = user.getUid();
SignUpAboutFragment signUpAboutFragment = new SignUpAboutFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.sign_up_fragment_container, signUpAboutFragment, SIGN_UP_ABOUT_FRAGMENT_TAG);
ft.addToBackStack(null);
ft.commit();
}
}
};
您的其他活动也是如此:
//Different activity to the above.
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// Using getUid() which stays constant
mUserId = user.getUid();
}