Тихий вход в Google: почему после выбора аккаунта отображается диалог - PullRequest
0 голосов
/ 07 ноября 2018

У меня проблема с реализацией "входа в Google" в приложении для Android. Код выглядит так:

            GoogleSignInClient signInClient = GoogleSignIn.getClient(MainActivity.this, gso);

            Task<GoogleSignInAccount> googleSignInAccountTask = signInClient.silentSignIn();

            if (googleSignInAccountTask.isSuccessful()) {
                // There's immediate result available.
                GoogleSignInAccount signInAccount = googleSignInAccountTask.getResult();
            } else {
                // There's no immediate result ready, displays some progress indicator and waits for the
                // async callback.
                googleSignInAccountTask.addOnCompleteListener((OnCompleteListener) task -> {
                    try {
                        GoogleSignInAccount signInAccount = (GoogleSignInAccount) task.getResult(ApiException.class);
                    } catch (Exception apiException) {
                        Intent signInIntent = signInClient.getSignInIntent();
                        startActivityForResult(signInIntent, 12123);
                    } catch (Throwable throwable) {
                        throwable.printStackTrace();
                    }
                });
            }

Ожидаемое поведение: 1. Пользователь открывает приложение в первый раз. 2. Откроется диалоговое окно «Вход в Google» с выбранными учетными записями. Пользователь выбирает аккаунт. 2. Пользователь закрывает приложение и открывает снова. Так как выбран аккаунт, тихий вход в систему работает, а аккаунт пользователя доступен без взаимодействия с пользователем.

Однако при каждом запуске приложения отображается диалоговое окно с выбранными учетными записями. После перезапуска приложения «googleSignInAccountTask.isSuccessful ()» всегда возвращает false. Этот «silentSignIn ()» не работает.

Я не хочу показывать это диалоговое окно при каждом запуске приложения. Любые намеки, как этого добиться? iOS SDK работает как положено. Он как-то помнит, что аккаунт был выбран.

1 Ответ

0 голосов
/ 18 ноября 2018

где вы обрабатываете результат активности при первом входе в систему? Добавьте следующий код может решить проблему. Также перепроверьте область видимости переменной signInAccount.

@Override
public void onActivityResult(int mRequestCode, int mResultCode, Intent mIntentData) {
    super.onActivityResult(mRequestCode, mResultCode, mIntentData);
    if (mRequestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(mIntentData);
        handleSignInResult(task);
    }
}

private void handleSignInResult(Task<GoogleSignInAccount> mCompletedTask) {
    try {
        signInAccount = mCompletedTask.getResult(ApiException.class);

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