Вход в Google не отвечает - PullRequest
       8

Вход в Google не отвечает

0 голосов
/ 05 сентября 2018

У меня есть два варианта входа: обычный вход и вход в Google. Нормальный вход работает нормально, но вход в Google - нет.

Я нажимаю кнопку входа в Google и вижу учетные записи. Так что я нажимаю на учетную запись, но ничего не происходит. Также я не могу видеть данные пользователя на firebase.

Я не получаю никаких ошибок на эмуляторе или в Android Studio. Я что-то пропустил, но что?

Я следую этому руководству для метода входа в Google.

ЖУРНАЛ ОБНОВЛЕНИЯ ОШИБКИ

Наконец-то я нашел журнал ошибок. Проблема в том, что я каждый раз собирал подписанный (релиз) apk, но я добавил отладочный код SHA1 на firebase. Просто я запускаю режим отладки на эмуляторе.

    EXCEPTION: main
        Process: com.app.surebettips, PID: 3806
        java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.app.surebettips/com.app.surebettips.Login}: java.lang.IllegalArgumentException: Must specify an idToken or an accessToken.
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3574)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
            at android.app.ActivityThread.access$1300(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
         Caused by: java.lang.IllegalArgumentException: Must specify an idToken or an accessToken.
            at com.google.firebase.auth.GoogleAuthCredential.<init>(Unknown Source)
            at com.google.firebase.auth.GoogleAuthProvider.getCredential(Unknown Source)
            at 

/****HERE***/
com.app.surebettips.Login.firebaseAuthWithGoogle(Login.java:467)
            at com.app.surebettips.Login.onActivityResult(Login.java:376)

/****HERE***/
            at android.app.Activity.dispatchActivityResult(Activity.java:6192)
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3570)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617) 
            at android.app.ActivityThread.access$1300(ActivityThread.java:151) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5254) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
    09-06 09:49:09.566 3806-3806/com.app.surebettips I/Process: Sending signal. PID: 3806 SIG: 9

Линия: 467

AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);

Линия: 376

firebaseAuthWithGoogle(account);

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Внутри обратного вызова onActivityResult выполните следующие действия:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) {
        try {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            GoogleSignInAccount account = task.getResult(ApiException.class);
            // User is logged in on google platform
            Log.v(TAG, "Account token:" + account.getIdToken()); //NON-NLS
            // Signed in successfully, show authenticated UI.
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            Log.w(TAG, "Google sign in failed", e); //NON-NLS

            String messageToDisplay = "Authentication failed.";
            switch (e.getStatusCode()) {
                case CommonStatusCodes.API_NOT_CONNECTED: //17
                    messageToDisplay += "The client attempted to clearPreferences a method from an API that failed to connect.";
                    break;

                case CommonStatusCodes.DEVELOPER_ERROR: //10
                    messageToDisplay += "The application is misconfigured.";
                    break;

                case CommonStatusCodes.ERROR: //13
                    messageToDisplay += "The operation failed with no more detailed information.";
                    break;

                case CommonStatusCodes.INTERNAL_ERROR: //8
                    messageToDisplay += "An internal error occurred.";
                    break;

                case CommonStatusCodes.INVALID_ACCOUNT: //8
                    messageToDisplay += "Invalid account name specified.";
                    break;

                case CommonStatusCodes.SIGN_IN_REQUIRED: //8
                    messageToDisplay += "Please Sign In to continue.";
                    break;
            }
        }
    }
}

Таким образом, вы сможете понять, почему ваш вход не работает

0 голосов
/ 05 сентября 2018

Пустой ответ от входа в Google обычно происходит из-за неправильного отпечатка SHA или вообще не определен в консоли API Google. В видео автор использует старый учебник. Вот текущая версия: https://firebase.google.com/docs/auth/android/google-signin и содержит ссылку на стандартный Google Sing в руководстве по интеграции: https://developers.google.com/identity/sign-in/android/sign-in

Это необходимо, потому что в этом руководстве есть еще одна ссылка для настройки консоли API Google: https://developers.google.com/identity/sign-in/android/start-integrating где вам необходимо настроить текущий проект API, обычно он называется Google Play Android Developer или каким-либо другим, если вы изменили его или создали какой-либо другой проект в консоли API.

Здесь необходимо настроить отпечаток SHA-1 и имя пакета. Если вы выбрали правильный проект (если у вас их несколько), вход в Google будет работать правильно.

Также вы используете клиент GoogleSignIn, поэтому вы должны использовать его и при создании Sing In Intent

private void signIn() {
    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

Поэтому, пожалуйста, проверьте это руководство от Google и реализуйте его, как написано в документации, и все будет работать нормально. https://developers.google.com/identity/sign-in/android/start-integrating

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...