Aby zintegrować logowanie przez Google z aplikacją na Androida, skonfiguruj logowanie przez Google i dodaj do układu aplikacji przycisk, który rozpoczyna proces logowania.
Zanim zaczniesz
Skonfiguruj projekt w Konsoli interfejsów API Google i skonfiguruj projekt w Android Studio.
Konfigurowanie logowania przez Google i obiektu GoogleSignInClient
W metodzie
onCreate
aktywności logowania skonfiguruj logowanie przez Google tak, aby prosiło o dane użytkownika wymagane przez Twoją aplikację. Aby na przykład skonfigurować logowanie przez Google tak, aby prosiło o identyfikator użytkownika i podstawowe informacje o profilu, utwórz obiektGoogleSignInOptions
z parametremDEFAULT_SIGN_IN
. Aby poprosić też o adresy e-mail użytkowników, utwórz obiektGoogleSignInOptions
z opcją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();
Jeśli chcesz poprosić o dodatkowe zakresy umożliwiające dostęp do interfejsów API Google, określ je za pomocą parametru
requestScopes
. Aby zapewnić użytkownikom jak najlepsze wrażenia, podczas logowania wysyłaj żądania tylko tych zakresów, które są niezbędne do minimalnego działania aplikacji. Proś o dodatkowe zakresy tylko wtedy, gdy są potrzebne. Dzięki temu użytkownicy zobaczą ekran zgody w kontekście wykonanej przez siebie czynności. Zobacz Prośba o dodatkowe zakresy.Następnie w metodzie
onCreate
aktywności logowania utwórz obiektGoogleSignInClient
z określonymi opcjami.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Sprawdzanie, czy użytkownik jest zalogowany
W metodzie onStart
aktywności sprawdź, czy użytkownik zalogował się już w aplikacji za pomocą 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);
Jeśli GoogleSignIn.getLastSignedInAccount
zwraca obiekt GoogleSignInAccount
(a nie null
), oznacza to, że użytkownik zalogował się już w Twojej aplikacji za pomocą Google.
Odpowiednio zaktualizuj interfejs – ukryj przycisk logowania, uruchom główną aktywność lub wykonaj inne działania odpowiednie dla Twojej aplikacji.
Jeśli funkcja GoogleSignIn.getLastSignedInAccount
zwróci wartość null
, oznacza to, że użytkownik nie zalogował się jeszcze w Twojej aplikacji za pomocą Google. Zaktualizuj interfejs, aby wyświetlać przycisk logowania się przez Google.
Dodawanie przycisku logowania przez Google do aplikacji
Dodaj element
SignInButton
do układu aplikacji:<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Opcjonalnie: jeśli używasz domyślnej grafiki przycisku logowania zamiast własnych komponentów przycisku logowania, możesz dostosować rozmiar przycisku za pomocą metody
setSize
.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
W aktywności Androida (np. w metodzie
onCreate
) zarejestrujOnClickListener
przycisku, aby zalogować użytkownika po kliknięciu:findViewById(R.id.sign_in_button).setOnClickListener(this);
Rozpocznij proces logowania
W metodzie
onClick
aktywności obsługuj kliknięcia przycisku logowania, tworząc intencję logowania za pomocą metodygetSignInIntent
i uruchamiając ją za pomocą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); }
Uruchomienie intencji powoduje wyświetlenie prośby o wybranie konta Google, na które użytkownik chce się zalogować. Jeśli zażądasz zakresów wykraczających poza
profile
,email
iopenid
, użytkownik zostanie również poproszony o przyznanie dostępu do żądanych zasobów.Po zalogowaniu się użytkownika możesz uzyskać obiekt
GoogleSignInAccount
w metodzieonActivityResult
działania.@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); } }
Obiekt
GoogleSignInAccount
zawiera informacje o zalogowanym użytkowniku, takie jak jego imię i nazwisko.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); } }
Możesz też uzyskać adres e-mail użytkownika za pomocą
getEmail
, identyfikator Google użytkownika (do użytku po stronie klienta) za pomocągetId
oraz token identyfikatora użytkownika za pomocągetIdToken
. Jeśli musisz przekazać aktualnie zalogowanego użytkownika do serwera backendu, wyślij token identyfikatora do serwera backendu i zweryfikuj go na serwerze.