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
onCreateaktywnoś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 obiektGoogleSignInOptionsz parametremDEFAULT_SIGN_IN. Aby poprosić też o adresy e-mail użytkowników, utwórz obiektGoogleSignInOptionsz 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
onCreateaktywności logowania utwórz obiektGoogleSignInClientz 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 SignInButtondo 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) zarejestrujOnClickListenerprzycisku, aby zalogować użytkownika po kliknięciu:findViewById(R.id.sign_in_button).setOnClickListener(this);
Rozpocznij proces logowania
W metodzie onClickaktywności obsługuj kliknięcia przycisku logowania, tworząc intencję logowania za pomocą metodygetSignInIntenti 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,emailiopenid, użytkownik zostanie również poproszony o przyznanie dostępu do żądanych zasobów.Po zalogowaniu się użytkownika możesz uzyskać obiekt
GoogleSignInAccountw metodzieonActivityResultdział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
GoogleSignInAccountzawiera 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ągetIdoraz 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.