Чтобы интегрировать вход Google в свое приложение Android, настройте вход Google и добавьте в макет вашего приложения кнопку, которая запускает процесс входа.
Прежде чем начать
Настройте проект консоли Google API и проект Android Studio .
Настройте вход в Google и объект GoogleSignInClient.
В методе
onCreate
действия входа настройте вход в Google для запроса пользовательских данных, необходимых вашему приложению. Например, чтобы настроить вход в Google для запроса идентификатора пользователя и базовой информации профиля, создайте объектGoogleSignInOptions
с параметромDEFAULT_SIGN_IN
. Чтобы также запросить адреса электронной почты пользователей, создайте объектGoogleSignInOptions
с параметромrequestEmail
.// Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build();
Если вам нужно запросить дополнительные области для доступа к API Google, укажите их с помощью
requestScopes
. Для обеспечения наилучшего взаимодействия с пользователем при входе в систему запрашивайте только те области, которые необходимы для минимальной работы вашего приложения. Запрашивайте любые дополнительные области только тогда, когда они вам нужны, чтобы ваши пользователи видели экран согласия в контексте выполненного ими действия. См. Запрос дополнительных областей .Затем также в методе
onCreate
действия входа создайте объектGoogleSignInClient
с указанными вами параметрами.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Проверьте наличие существующего вошедшего пользователя
В методе onStart
вашей активности проверьте, вошел ли пользователь уже в ваше приложение с помощью Google.
// Check for existing Google Sign In account, if the user is already signed in // the GoogleSignInAccount will be non-null. GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); updateUI(account);
Если GoogleSignIn.getLastSignedInAccount
возвращает объект GoogleSignInAccount
(а не null
), пользователь уже выполнил вход в ваше приложение через Google. Соответствующим образом обновите свой пользовательский интерфейс, то есть скройте кнопку входа, запустите основное действие или что-то еще, подходящее для вашего приложения.
Если GoogleSignIn.getLastSignedInAccount
возвращает null
, пользователь еще не вошел в ваше приложение через Google. Обновите свой пользовательский интерфейс, чтобы отобразить кнопку входа в Google.
Добавьте кнопку входа в Google в свое приложение.
Добавьте
SignInButton
в макет вашего приложения:<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Необязательно : если вы используете изображение кнопки входа по умолчанию вместо предоставления собственных ресурсов кнопки входа, вы можете настроить размер кнопки с помощью метода
setSize
.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
В активности Android (например, в методе
onCreate
) зарегистрируйтеOnClickListener
вашей кнопки для входа пользователя при нажатии:findViewById(R.id.sign_in_button).setOnClickListener(this);
Запустите процесс входа в систему
В методе
onClick
действия обрабатывайте нажатия кнопок входа, создавая намерение входа с помощью методаgetSignInIntent
и запуская это намерение с помощьюstartActivityForResult
.@Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; // ... } }
private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); }
При запуске намерения пользователю предлагается выбрать учетную запись Google для входа. Если вы запросили области, выходящие за рамки
profile
,email
иopenid
, пользователю также будет предложено предоставить доступ к запрошенным ресурсам.После того как пользователь войдет в систему, вы можете получить для него объект
GoogleSignInAccount
в методеonActivityResult
действия.@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { // The Task returned from this call is always completed, no need to attach // a listener. Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); } }
Объект
GoogleSignInAccount
содержит информацию о вошедшем в систему пользователе, например имя пользователя.private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); // Signed in successfully, show authenticated UI. updateUI(account); } catch (ApiException e) { // The ApiException status code indicates the detailed failure reason. // Please refer to the GoogleSignInStatusCodes class reference for more information. Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); updateUI(null); } }
Вы также можете получить адрес электронной почты пользователя с помощью
getEmail
, идентификатор Google пользователя (для использования на стороне клиента) с помощьюgetId
и токен идентификатора для пользователя с помощьюgetIdToken
. Если вам необходимо передать текущего вошедшего в систему пользователя на внутренний сервер, отправьте токен идентификатора на свой внутренний сервер и проверьте токен на сервере.