我正在尝试使用firebase实现Google登录身份验证 . 我正在关注this教程 .
错误日志:
java.lang.RuntimeException:将结果ResultInfo {who = null,request = 1002,result = -1,data = Intent {(has extras)}}传递给activity {com.clabs.codefosterapp / com.clabs.codefosterapp . SplashActivity}:java.lang.IllegalArgumentException:必须指定idToken或accessToken . 在android.app.ActivityThread.deliverResults(ActivityThread.java:3389)的android.app.ActivityThread.handleSendResult(ActivityThread.java:3432)android.app.ActivityThread.access $ 1300(ActivityThread.java:135)android.app .ActivityThread $ H.handleMessage(ActivityThread.java:1244)在android.app.Loper.loop(Looper.java:136)的android.app.Handler.dispatchMessage(Handler.java:102)android.app.ActivityThread . main(ActivityThread.java:5045)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit $位于dalvik.system.NativeStart.main(本地方法)的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)中的MethodAndArgsCaller.run(ZygoteInit.java:779)引起:java.lang.IllegalArgumentException:必须指定idToken或accessToken . 来自com.google.firebase.auth.GoogleAuthCredential . (未知来源)位于com.clabs.codefosterapp.SplashActivity.firebaseAuthWithGoogle(SplashActivity.java:102)的com.google.firebase.auth.GoogleAuthProvider.getCredential(未知来源)位于android.app的Android.app.ActivityThread.deliverResults(ActivityThread.java:3385)的android.app.Activity.dispatchActivityResult(Activity.java:5423)上的.clabs.codefosterapp.SplashActivity.onActivityResult(SplashActivity.java:91) . ActivityThread.handleSendResult(ActivityThread.java:3432)在Android.app.Handler的android.app.ActivityThread.access $ 1300(ActivityThread.java:135)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1244) . 在android.app.Looper.loop(Looper.java:136)上的dispatchMessage(Handler.java:102)位于android.app.ActivityThread.main(ActivityThread.java:5045)的java.lang.reflect.Method.invokeNative(Native)方法)在java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(Zygo) teInit.java:779)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)at dalvik.system.NativeStart.main(Native Method)
崩溃在下面的行
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
我的代码:
private void googleSignIn() {
Intent intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(intent, SIGN_IN);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
} else {
Toast.makeText(SplashActivity.this, "Oops! Something Went Wrong", Toast.LENGTH_SHORT).show();
}
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount account) {
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Toast.makeText(SplashActivity.this, "Authentication Failed", Toast.LENGTH_SHORT).show();
}
}
});
}
2 回答
我正在审查我的整个代码,我发现在构建GoogleSignInOptions时我没有设置requestIdToken . 正确的代码是:
您需要从Firebase中的应用信息中心获取网络客户端ID并将其粘贴到此处 .