Почему в коде входа в Google необходимо использовать класс Task? - PullRequest
0 голосов
/ 11 января 2020

В коде , который реализует вход в Google в приложении android, используется класс Task .

  public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                // Google Sign In was successful, authenticate with Firebase
                GoogleSignInAccount account = task.getResult(ApiException.class);
                    firebaseAuthWithGoogle(account);
            } catch (ApiException e) {
                // Google Sign In failed, update UI appropriately
                Log.w(TAG, "Google sign in failed", e);
                // ...
            }
        }
    }

Здесь:

        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);

Объект GoogleSignInAccount содержит информацию о зарегистрированном пользователе, такую ​​как имя пользователя. data - полученное намерение, содержащее информацию для входа. Это результат выполнения этой функции startActivityForResult , которая побуждает пользователя выполнить вход в свою учетную запись Google. После входа пользователя намерение передается onActivityResult в третьем аргументе.

Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);

И после этого

            GoogleSignInAccount account = task.getResult(ApiException.class);

Хотя код довольно простой и понятный, я не мог понять необходимость использования класса Task даже после прочтения документации . Задача:

Представляет асинхронную операцию.

Функция getResult:

Получает результат задачи, если она уже выполнена завершено.

...