嘿,我正在使用Firebase auth,并启用了Google登录功能。谷歌登录运行良好,我得到了所有的信息。但是,当我想在Firebase用户列表中保存用户时,getIdToken()是空的:
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
//here the acct.getIdToken() is null
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Toast.makeText(SignIn.this, "Authentication failed.", Toast.LENGTH_SHORT).show();
}
// [START_EXCLUDE]
progressDialog.hide();
// [END_EXCLUDE]
}
});
}发布于 2017-10-01 18:22:42
也许您忘记了requestIdToken()对您的GoogleSignInOptions对象
试一试:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();发布于 2017-08-06 04:05:54
您的Google OAuth客户端凭据应该是用于网络应用程序,而不是Android。而且您的Google登录选项应该类似于下面的代码(它是C#,但非常接近Java源代码):
var gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn)
.RequestIdToken("OAuth Client Id goes here")
.Build(); 那就行了。
发布于 2017-04-03 09:35:50
您需要在活动中重写onActivityResult方法。添加以下代码:
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
}
}您的handleSignInResult方法应该是这样的:
private void handleSignInResult(GoogleSignInResult result) {
if (result.isSuccess()) {
GoogleSignInAccount googleSignInAccount = result.getSignInAccount();
if (googleSignInAccount != null) {
String userId = googleSignInAccount.getId();
}
updateUI(true);
} else {
updateUI(false);
}
}您还需要在您的Firebase帐户中启用Authentication -> SIGN-IN METHOD -> the provider。您需要启用正在使用的Email/Password、Google等。
您还需要将compile 'com.google.firebase:firebase-auth:10.2.0'放在build.gradle文件中。
在您的AndroidManifest中,必须设置以下两个权限:<uses-permission android:name="android.permission.INTERNET"/>' and '<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
您还需要设置您的SHA1。这里 --你可以看看怎么做。最后,不要忘记将你的google-services.json再次放在正确的位置。
firebaseAuthWithGoogle方法应该是这样的:
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
System.out.println("firebaseAuthWithGoogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
auth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
System.out.println("signInWithCredential:onComplete:" + task.isSuccessful());
if (!task.isSuccessful()) {
System.out.println("signInWithCredential" + task.getException());
Toast.makeText(MainActivity.this, "Authentication failed.",Toast.LENGTH_SHORT).show();
}
}
});
}非常重要的是,不要忘记在onStart方法中添加以下代码:
@Override
public void onStart() {
super.onStart();
OptionalPendingResult<GoogleSignInResult> optionalPendingResult = Auth.GoogleSignInApi.silentSignIn(googleApiClient);
if (optionalPendingResult.isDone()) {
GoogleSignInResult googleSignInResult = optionalPendingResult.get();
handleSignInResult(googleSignInResult);
} else {
optionalPendingResult.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(@NonNull GoogleSignInResult googleSignInResult) {
handleSignInResult(googleSignInResult);
}
});
}
auth.addAuthStateListener(authListener);
}希望能帮上忙!
https://stackoverflow.com/questions/43179362
复制相似问题