В коде , который реализует вход в 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:
Получает результат задачи, если она уже выполнена завершено.