当用户在我的 android 应用程序中使用 firebase 注册时,会生成一个 FirebaseUser 对象,我会从中检索用户 token ,以将其保存为我的 google 云端点后端中每个用户的唯一标识符。
我使用了一个在用户注册时调用的身份验证状态监听器:
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);
在不同的 Activity 中,我还希望使用当前用户 token 来调用我的端点 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();
}
当我在 2 个 Activity 中记录两个 mUserId 字段时,我发现它们是不同的。
为什么 mUserId 会发生变化?如何从我的应用中的任何位置检索当前用户的相同 token ?
最佳答案
Token其实就是一个标识用户连接的唯一id。因此,每次重新启动连接时,都会生成另一个 token 。如果你想为每个用户使用一个唯一的标识符,你应该得到它的 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();
}
}
};
您的其他 Activity 也会发生同样的情况:
//Different activity to the above.
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// Using getUid() which stays constant
mUserId = user.getUid();
}
关于java - 为什么 firebase 用户 token 会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38333192/