Łączenie kont możesz zrealizować bezpośrednio w aplikacji mobilnej, dzięki czemu użytkownicy będą mogli połączyć swoje konta w Twojej usłudze z kontami Google. Utworzony link zapewnia Google dostęp do danych, które użytkownik zgodzi na udostępnianie.
Korzyści dla użytkowników to:
- Użytkownicy mogą rozpocząć proces łączenia kont w aplikacji, który już znają.
- Użytkownicy nie wymagają danych logowania, ponieważ zostały już uwierzytelnieni na urządzeniu i w Twojej aplikacji mobilnej.
Zalety dla deweloperów:
- Określ, gdzie chcesz promować i rozpoczynać łączenie kont w aplikacji mobilnej, na przykład w ustawieniach użytkownika, w reklamach pełnoekranowych lub po zalogowaniu się użytkownika w aplikacji mobilnej. Dodanie wielu punktów wejścia w celu połączenia kont ułatwia odnalezienie konta. , co przekłada się na większe zaangażowanie i liczbę powiązanych kont.
- Wzrost współczynnika konwersji, ponieważ użytkownicy mogą ukończyć proces łączenia, wykonując mniej kroków niż standardowy przepływ OAuth w internecie.
- Zaimplementowanie linku z platformy (Androida) wymaga tylko niewielkiego nakładu pracy, ponieważ proces ten korzysta z dotychczasowej implementacji OAuth2.0. Zakładamy, że masz już taką implementację.
- Niższy współczynnik porzuceń, ponieważ użytkownicy nie muszą ponownie wpisywać swoich danych logowania i mogą ukończyć ten proces w mniejszej liczbie kroków. Współczynnik porzuceń może wynosić nawet 80% w przepływach, w których użytkownicy są zobowiązani do wycofania i podania danych logowania.
Jak to działa
Aby utworzyć połączenie z poziomu Platformy, wykonaj te czynności:
- Użytkownik może kliknąć lub przełączyć regułę połączenia w Twojej aplikacji mobilnej.
- Użytkownik wybiera konto Google, które ma zostać połączone.
- Użytkownik wybiera istniejące konto Google na urządzeniu, które chce połączyć, lub loguje się na nowe konto.
- Użytkownikowi wyświetla się ekran zgody hostowany przez Google i musi wyrazić zgodę na kontynuowanie albo anulować, aby zatrzymać proces łączenia.
- Użytkownik zobaczy Twój ekran zgody i będzie musiał wyrazić zgodę na kontynuowanie albo anulować, aby zatrzymać proces łączenia.
- Połączenie zostanie utworzone między kontem użytkownika w Twojej usłudze i jego kontem Google.
Rysunek 1. Link z poziomu platformy
Wymagania
Aby zaimplementować link ze swojej platformy, potrzebujesz tych elementów:
- Aplikacja na Androida.
- Posiadanie i utrzymywanie serwera OAuth 2.0 obsługującego przepływ kodu autoryzacji OAuth 2.0 oraz zarządzanie nim.
Konfiguracja
Zanim wykonasz opisane poniżej czynności, musisz ukończyć proces rejestracji połączenia kont.
Skonfiguruj środowisko programistyczne
Pobierz najnowsze Usługi Google Play na hoście programisty:
.W sekcji Narzędzia SDK znajdź Usługi Google Play.
Jeśli stan tych pakietów to nie Zainstalowane, wybierz je i kliknij Zainstaluj pakiety.
Konfiguracja aplikacji
W pliku
build.gradle
na poziomie projektu uwzględnij repozytorium Google Maven w sekcjachbuildscript
iallprojects
.buildscript { repositories { google() } } allprojects { repositories { google() } }
Dodaj zależności interfejsu API „Połącz z Google” do pliku Gradle na poziomie aplikacji modułu. Jest to zwykle
app/build.gradle
:dependencies { implementation 'com.google.android.gms:play-services-auth:21.2.0' }
Dodanie obsługi linku z Twojej platformy
Spowoduje to zapisanie przez Google tokena dostępu udostępnionego przez Twoją usługę. Przed zwróceniem tokena użytkownikowi należy uzyskać zgodę.
Wykonaj te czynności, aby uzyskać zgodę użytkownika i zwrócić token kodu uwierzytelniania za pomocą pakietu SDK Usług Google Play.
Utwórz intencję PendingIntent, która może uruchomić aktywność dotyczącą zgody użytkownika – zgoda jest uruchamiana przez interfejs Play Services API. Gdy interfejs API jest wywoływany, musisz podać parametr
PendingIntent
(nazywany w celu uniknięcia wątpliwości:consentPendingIntent
)Kotlin
// Build a PendingIntent that can launch the consent activity val consentPendingIntent = buildConsentPendingIntent()
Java
// Build a PendingIntent that can launch your consent activity PendingIntent consentPendingIntent = buildConsentPendingIntent();
Utwórz odpowiednie działanie do obsługi zamiaru uzyskiwania zgody użytkownika
Kotlin
class ConsentActivity : AppCompatActivity private fun onConsentAccepted() { // Obtain a token (for simplicity, we’ll ignore the async nature // of the following call) val token = getToken() val intent = Intent() .putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token) setResult(Activity.RESULT_OK, intent) finish() } private fun onConsentRejectedOrCanceled() { setResult(Activity.RESULT_CANCELED) finish() }
Java
public class ConsentActivity extends AppCompatActivity { ... private void onConsentAccepted() { // Obtain a token (for simplicity, we’ll ignore the async nature of // the following call String token = getToken(); Intent intent = new Intent(); intent.putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token); setResult(Activity.RESULT_OK, intent); finish(); } private void onConsentRejectedOrCanceled() { setResult(Activity.RESULT_CANCELED, null); finish(); } }
Zakładamy, że metody
onConsentAccpeted()
ionConsentRejectedOrCanceled()
są wywoływane odpowiednio wtedy, gdy użytkownik zaakceptuje albo odrzuci lub anuluje Twoją zgodę.Utwórz prośbę o zapisanie tokena, a między innymi za pomocą innych parametrów konfiguracji przekazuj żądanie
PendingIntent
utworzone w kroku 1 powyżej.Kotlin
// Create an ActivityResultLauncher which registers a callback for the // Activity result contract val activityResultLauncher = registerForActivityResult( ActivityResultContracts.StartIntentSenderForResult()) { result -> if (result.resultCode == RESULT_OK) { // Successfully finished the flow and saved the token } else { // Flow failed, for example the user may have canceled the flow } } // Build token save request val request = SaveAccountLinkingTokenRequest.builder() .setTokenType(SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE) .setConsentPendingIntent(consentPendingIntent) .setServiceId("service-id-of-and-defined-by-developer") //Set the scopes that the token is valid for on your platform .setScopes(scopes) .build() // Launch consent activity and retrieve token Identity.getCredentialSavingClient(this) .saveAccountLinkingToken(request) .addOnSuccessListener( saveAccountLinkingTokenResult -> { if (saveAccountLinkingTokenResult.hasResolution()) { val pendingIntent = saveAccountLinkingTokenResult .getPendingIntent() val intentSenderRequest = IntentSenderRequest .Builder(pendingIntent).build() activityResultLauncher.launch(intentSenderRequest) } else { // This should not happen, let’s log this Log.e(TAG, "Failed to save token"); } }) .addOnFailureListener(e -> Log.e(TAG, “Failed to save token”, e))
Java
// Create an ActivityResultLauncher which registers a callback for the // Activity result contract ActivityResultLauncher<IntentSenderRequest> activityResultLauncher = registerForActivityResult(new ActivityResultContracts .StartIntentSenderForResult(), result -> { if (result.getResultCode() == RESULT_OK) { // Successfully finished the flow and saved the token } else { // Flow failed, for example the user may have canceled the flow } }); // Build token save request SaveAccountLinkingTokenRequest request = SaveAccountLinkingTokenRequest.builder() .setTokenType( SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE) .setConsentPendingIntent(consentPendingIntent) .setServiceId("service-id-of-and-defined-by-developer") //Set the scopes that the token is valid for on your platform .setScopes(scopes) .build(); // Launch consent activity and retrieve token Identity.getCredentialSavingClient(this) .saveAccountLinkingToken(request) .addOnSuccessListener( saveAccountLinkingTokenResult -> { if (saveAccountLinkingTokenResult.hasResolution()) { // Launch the resolution intent PendingIntent pendingIntent = saveAccountLinkingTokenResult.getPendingIntent(); IntentSenderRequest intentSenderRequest = new IntentSenderRequest.Builder(pendingIntent).build(); activityResultLauncher.launch(intentSenderRequest); } else { // This should not happen, let’s log this Log.e(TAG, "Failed to save token"); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to save token", e)); ```
Po wykonaniu powyższych czynności użytkownik musi uzyskać zgodę i zwraca kod autoryzacji do Google.
Sprawdzone metody
Aplikacja powinna informować użytkownika o stanie linku za pomocą przycisku, przełącznika lub podobnego elementu wizualnego.
Rysunek 1. Przykładowy obraz stanu linku
Należy powiadomić użytkownika o udanym połączeniu, np. wyświetlać toast, wywoływać zmianę stanu lub przekierowywać użytkownika na osobną stronę z informacją o powodzeniu połączenia.
Rozważ zachęcenie użytkowników aplikacji do połączenia kont, najlepiej na podstawie wyraźnych sygnałów wskazujących, że takie połączenie przyniesie korzyści takim użytkownikom.
Po połączeniu kont musisz podać użytkownikom przykład tego, co mogą zrobić z połączonym kontem, np. jeśli przed chwilą połączyłeś usługę strumieniowania muzyki, poproś Asystenta Google o włączenie muzyki.
Aplikacje tego typu umożliwiają użytkownikom zarządzanie połączonymi kontami, w tym opcję ich rozłączania. Wskaż mu stronę zarządzania połączonymi kontami Google, czyli https://myaccount.google.com/accountlinking.