我正在尝试获取通过谷歌登录的用户的UID。
当我使用FirebaseAuth.getInstance().getCurrentUser().getUid()
时,它显然显示了错误。
当我使用GoogleSignIn.getLastSignedInAccount(getContext()).getId
时,它显示不正确的ID。
我怎么能得到他的UID?
有一个代码,我曾经通过谷歌登录。我是从https://firebase.google.com/docs/auth/android/google-signin
signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("R.string.default_client_id")
.requestEmail()
.build();
signInClient = GoogleSignIn.getClient(this, signInOptions);
signIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent sign = signInClient.getSignInIntent();
startActivityForResult(sign, GOOGLE_SIGN_IN_CODE);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == GOOGLE_SIGN_IN_CODE){
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
System.out.println("firebaseAuthWithGoogle:" + account.getId());
firebaseAuthWithGoogle( account.getIdToken());
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
}
}
}
private void firebaseAuthWithGoogle(String idToken) {
AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = mAuth.getCurrentUser();
startActivity(new Intent(MainActivity.this,NavActivity.class));
updateUI(user);
} else {
updateUI(null);
}
}
});
}
这就是我获取UID 的方式
String uid = "";
if(firebaseUser!=null ){
uid = firebaseUser.getUid();
}
您需要使用google登录令牌登录Firebase。
FirebaseAuth.getInstance().signInWithCredential(GoogleAuthProvider.getCredential(googleSignInAccount.getIdToken(), null))
因为您的FirebaseUser和Google帐户使用两种不同的授权,因此不能互换使用。
如果没有用户登录,.getCurrentUser()
方法将返回null。确保你的应用程序中有这样的逻辑来防止崩溃:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// User is signed in
Log.d("TAG", user.getUid())
} else {
// No user is signed in
}
无论使用哪种身份验证方法,获取UID的方法都保持不变。只要用户登录,就会有一个UID。
使用Flutter,在使用谷歌进行登录操作后。
String? uid = FirebaseAuth.instance.currentUser?.uid;
正如Frank van Puffelen在评论中所提到的,NPE之所以提出,是因为没有用户登录。为了能够使用来自身份验证过程的UID,您应该始终检查无效性。在Kotlin,它将简单地是:
FirebaseAuth.getInstance().currentUser?.apply {
Log.d("TAG", it)
}