Вход в систему Google не возвращает никаких результатов, если для входа в систему используется «Другой аккаунт». - PullRequest
0 голосов
/ 01 мая 2018

Кажется, что это базовая функция, но после изучения учебного пособия по входу она будет работать только в том случае, если я выберу учетную запись, которая уже зарегистрирована на устройстве.

После выбора ' Использовать другую учетную запись ' и выполнения некоторых шагов для ее аутентификации теряется результат обратного вызова, (onActivityResult is не вызывается ).

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

Однако GoogleApiClient работает нормально, но есть некоторые устаревшие методы, поэтому я решил переключиться на GoogleSignInOptions, чтобы избежать проблем с устареванием.
Initizlization:

googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions);

при нажатии:

signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signIn();
            }
        });

private void signIn() {
        googleSignInClient.signOut();
        Intent signInIntent = googleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, 123);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 123 && data != null) {
            handleSignInResult(data);
        }
    }

    private void handleSignInResult(Intent data) {
        Task<GoogleSignInAccount> signInTask = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            GoogleSignInAccount googleSignInAccount = signInTask.getResult(ApiException.class);
            if (googleSignInAccount != null) {
                updateUI(googleSignInAccount);
            }
        } catch (ApiException e) {
            e.printStackTrace();
        }
    }

enter image description here


Кто-нибудь может помочь, пожалуйста?

1 Ответ

0 голосов
/ 28 июня 2018

ОБНОВЛЕНИЕ: эта ошибка теперь исправлена ​​в библиотеке Oauth2


Так что я столкнулся с той же проблемой. Я обнаружил, что это открытый выпуск , о котором сообщалось в марте. Так что это, вероятно, не проблема с вашим кодом.

Я обнаружил еще один вопрос о стеке потока о разнице между Oauth2 и googleAuthUtil . Используя другую упомянутую библиотеку, я обнаружил, что этой ошибки не существует.

Я импортировал этот пакет в мой gradle

implementation('com.google.api-client:google-api-client-android:1.23.0') {
    exclude group: 'org.apache.httpcomponents'
}

и выполнить аутентификацию на объекте GoogleAccountCredential.

    GoogleAccountCredential credential = new GoogleAccountCredential(context, scope);
    startActivityForResult(credential.newChooseAccountIntent(), resultCode);

Для этого метода вам необходимо разрешение GET_ACCOUNTS.

...