Google SignInIntent корректно ли работает resultCode?

123
22 сентября 2019, 09:30

В android приложении используется авторизация через Google(firebase). Я получая извещение, что у некоторых пользователей не проходит авторизация. Понятия не имею почему, ведь у большинства все ОК!

Код выглядит так:

private void startSignin(){
    mAuth = FirebaseAuth.getInstance();
    // Check auth.
    if (mAuth.getCurrentUser() == null) {
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken("my_web_auth_id")
                .requestEmail()
                .build();

        GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
        mGoogleSignInClient.signOut();// Что бы при повторной авторизации открывалось окно с выбором аккаунтов.
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, AUTH_REQUEST);
    }
    else {
        startMainActivity();
        finish();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == AUTH_REQUEST) {
        if (resultCode == RESULT_OK) { // результат не ок!
                Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
                try {
                    GoogleSignInAccount account = task.getResult(ApiException.class);
                    firebaseAuthWithGoogle(account);
                } catch (ApiException e) {
                    Toast.makeText(context, context.getString(R.string.auth_fail), Toast.LENGTH_LONG).show();
                    Crashlytics.getInstance().core.logException(e);
                    startSignin();
                }
        }
        else {
            Toast.makeText(context, context.getString(R.string.auth_fail), Toast.LENGTH_LONG).show();
            Crashlytics.getInstance().core.logException(
                    new Exception("onActivityResult/RESULT_CODE_FAIL/Unable Sing in with google")); // отправляю извещение.
            startSignin();// пробуем еще раз.
        }
    }
}

И я бы не стал задавать вопрос, но в официальном туториале никто не делает проверку resultCode. А у меня как раз тут и выходит неполадка.

Вопрос в следующем: возможно resultCode(конкретно в этом случае) не всегда соответствует действительности и его не нужно здесь использовать?

Ну или что еще можно сделать? Потому что судя потому что ошибка приходит единожды, то со второго раза авторизация проходит, ну или пользователи сразу удалили приложение.

Answer 1

После startActivityForResult(signInIntent, AUTH_REQUEST); - стартует активность с выбором аккаунта, затем - экран затемняется на (0,5-1сек) что бы подключится. Если в этот момент нажать по экрану, то

 resultCode  == RESULT_CANCELED

при этом, если убрать проверку, то выбросится исключение:

com.google.android.gms.common.api.ApiException: 16

READ ALSO
Метод для удаления (Spring + Postgresql)

Метод для удаления (Spring + Postgresql)

Весь код я разбит на разные слои:

131
Как я могу использовать массив из файлов ресурсов java [закрыт]

Как я могу использовать массив из файлов ресурсов java [закрыт]

У меня есть большой массив, больше 64кб, я хочу закинуть его в ресурсы и юзать оттуда, как мне это сделать? Спасибо!

126