Łą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.
Takie podejście poprawia skuteczność łączenia kont dzięki angażowaniu użytkowników w kontekście Twojej aplikacji, a nie rozmowy z Asystentem. Można je integrować z wprowadzaniem użytkowników, ustawieniami i innymi platformami aplikacji, co stwarza możliwości odkrywania działań Asystenta Google i zwiększania ich zaangażowania. Na przykład po połączeniu możesz zaproponować przekierowanie użytkownika bezpośrednio do działania.
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
Łączenie z poziomu Platformy należy wykonać w następujących krokach:
- Użytkownik kliknie lub przełączy regułę łączenia w Twojej aplikacji mobilnej.
- Użytkownik wybiera konto Google, które ma zostać połączone.
- użytkownik wybiera do połączenia konto Google istniejące na urządzeniu lub loguje się na nowe konto;
- Użytkownik widzi ekrany z prośbą o zgodę na serwerze Google i musi wyrazić zgodę na kontynuowanie lub anulowanie procesu łączenia.
- Użytkownik zobaczy Twój ekran zgody i będzie musiał zgodzić się na kontynuowanie lub anulowanie procesu łączenia.
- Połączenie jest tworzone między kontem użytkownika, jego usługą i jego kontem Google.
Rysunek 1. Łączenie z poziomu platformy Flow
Wymagania
Aby zaimplementować link z Twojej platformy, potrzebujesz tych elementów:
- Aplikacja na Androida.
- Musisz mieć serwer OAuth 2.0, który obsługuje przepływ kodu autoryzacji OAuth 2.0, zarządzać nim i obsługiwać.
Konfiguracja
Przed wykonaniem poniższych kroków musisz przejść proces rejestracji dotyczący łączenia kont.
Konfigurowanie środowiska programistycznego
Pobierz najnowsze Usługi Google Play na hosta dewelopera:
W sekcji Narzędzia SDK znajdź Usługi Google Play.
Jeśli pakiety mają stan inny niż Zainstalowane, wybierz je i kliknij Zainstaluj pakiety.
Konfiguracja aplikacji
W sekcji
buildscript
iallprojects
plikubuild.gradle
na poziomie projektu dodaj repozytorium Google Maven.buildscript { repositories { google() } } allprojects { repositories { google() } }
Dodaj zależności interfejsu API „Link with Google” do pliku Gradle na poziomie modułu. Zwykle ma on postać
app/build.gradle
:dependencies { implementation 'com.google.android.gms:play-services-auth:21.0.0' }
Dodaj obsługę linku z poziomu platformy
Połączenie z poziomu Platformy spowoduje zapisanie przez Google tokena dostępu udostępnionego przez usługę. Przed zwróceniem tokena użytkownikowi konieczne jest uzyskanie zgody.
Aby uzyskać zgodę użytkownika i zwrócić token kodu autoryzacji za pomocą pakietu SDK Usług Google Play, wykonaj podane niżej czynności.
Utwórz intencję PendingIntent, która będzie mogła uruchomić aktywność związaną z uzyskiwaniem zgody – uzyskiwanie zgody jest uruchamiane przez interfejs Play Services API. Gdy interfejs API zostanie wywołany, musisz podać
PendingIntent
(dla jasnoś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 w celu obsługi intencji związanych z prośbą o zgodę na wykorzystanie danych
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, jeśli użytkownik odpowiednio zaakceptuje lub odrzuci lub anuluje Twoją zgodę.Utwórz żądanie zapisania tokena i między innymi parametrów konfiguracji, a następnie prześlij żą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)); ```
Powyższe kroki wyświetlają użytkownikowi prośbę o zgodę na wykorzystanie danych i zwraca kod autoryzacji do Google.
Sprawdzone metody
Aplikacja powinna wskazywać stan połączenia użytkownikowi za pomocą przycisku, przełącznika lub podobnego elementu wizualnego.
Rysunek 1. Przykładowy obraz stanu linku
Należy powiadomić użytkownika po udanym linku, np. wyświetlić toast, wywołać zmianę stanu przełączania lub przekierować go na osobną stronę z linkiem.
Warto zachęcić użytkowników w aplikacji o połączenie kont, najlepiej w oparciu o silne sygnały, że takie połączenie przyniesie im korzyści.
Po połączeniu kont podaj użytkownikom przykład tego, co mogą zrobić z połączonym kontem. Jeśli na przykład dopiero co połączyłeś(-aś) usługę strumieniowania muzyki, poproś Asystenta Google o włączenie muzyki.
Zezwól użytkownikom na zarządzanie ich połączonymi kontami, w tym opcję ich rozłączania. Skieruj go na stronę zarządzania połączonymi kontami Google (https://myaccount.google.com/accountlinking).