2016-12-29 1 views
2

Я пытаюсь внедрить аутентификацию в Google, используя firebase. Я читал this учебник.java.lang.IllegalArgumentException: Должен указать idToken или accessToken

журнал

Ошибка:

java.lang.RuntimeException: Сбой доставки результата ResultInfo {кто = NULL, запрос = 1002, результат = -1, данные = Intent {(имеет статистов)}} для 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) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1244) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper. java: 136) at 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 $ MethodAndArgsCaller.run (ZygoteInit.java : 779) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:595) at dalvik.system.NativeStart.main (родной метод) Вызвано: java.lang.IllegalArgumentException: Необходимо указать idToken или accessToken. на com.google.firebase.auth.GoogleAuthCredential. (Неизвестный источник) в com.google.firebase.auth.GoogleAuthProvider.getCredential (Неизвестный источник) на com.clabs.codefosterapp.SplashActivity.firebaseAuthWithGoogle (SplashActivity. Java: 102) на com.clabs.codefosterapp.SplashActivity.onActivityResult (SplashActivity.java:91) в android.app.Activity.dispatchActivityResult (Activity.java:5423) в android.app.ActivityThread.deliverResults (ActivityThread .java: 3385) по адресу android.app.Activit yThread.handleSendResult (ActivityThread.java:3432) в android.app.ActivityThread.access $ 1300 (ActivityThread.java:135) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1244) на андроиде. os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:136) на android.app.ActivityThread.main (ActivityThread.java:5045) на java.lang. отражает.Метод.invokeNative (собственный метод) по адресу java.lang.reflect.Method.invoke (Method.java:515) по адресу com.android.internal.os.ZygoteInit $ MethodAn dArgsCaller.run (ZygoteInit.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(); 
         } 
        } 
       }); 
    } 
+0

Вы добавили зависимости? вы лучше следуете официальным документам здесь: https://firebase.google.com/docs/auth/android/google-signin –

+0

Да, я добавил их. – Shubh

+0

, пожалуйста, убедитесь, что вы следовали каждому шагу, указанному в официальных документах ... и затем дайте мне знать. –

ответ

18

Я просматривал весь свой код, и я обнаружил, что я не сделал установите requestIdToken при создании GoogleSignInOptions. Правильный код:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
        .requestIdToken(getString(R.string.default_web_client_id)) 
        .requestEmail() 
        .build(); 
+0

Вот описание, где вы можете найти web_client_id https://stackoverflow.com/questions/34283355/firebase-serverclientid-when-building-googlesigninoptions –

3

Вы должны получить веб-идентификатор клиента из вашего приложения приборной панели в Firebase и вставить его здесь.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken("firebase_web_client_id_for_google") 
       .requestEmail() 
       .build();