Oparte na protokole OAuth linki App Flip (App Flip) dodają Twoją aplikację na Androida do sekcji Proces łączenia z kontem Google. Tradycyjny proces łączenia kont wymaga użytkownik musi wpisać swoje dane logowania w przeglądarce. Korzystanie z funkcji App Flip zmniejsza użytkownika do logowania się do aplikacji na Androida, która pozwala autoryzacje. Jeśli użytkownik jest zalogowany w aplikacji, nie musi tego robić. ponownie wpisać swoje dane logowania, aby połączyć swoje konto. Minimalna ilość kodu musisz wprowadzić zmiany w funkcji App Flip w Twojej aplikacji na Androida.
Z tego dokumentu dowiesz się, jak zmodyfikować aplikację na Androida, aby obsługiwała Odwracanie aplikacji.
Zobacz fragment
Przykładowa aplikacja do łączenia aplikacji w funkcji Flip przedstawia integrację kont na Androidzie zgodną z funkcją App Flip. Ty może używać tej aplikacji do sprawdzania, jak odpowiadać na intencję przychodzącą do aplikacji Aplikacje mobilne Google.
Przykładowa aplikacja jest wstępnie skonfigurowana do integracji z App Flip Test Tool Android Za pomocą tego narzędzia możesz sprawdzić integrację swojej aplikacji na Androida z aplikacją Odwróć go, zanim skonfigurujesz połączenie konta z Google. Ta aplikacja symuluje intencja wyzwalana przez aplikacje mobilne Google, gdy włączona jest funkcja odwracania aplikacji.
Jak to działa
Do przeprowadzenia integracji App Flip:
- Aplikacja Google sprawdza, czy aplikacja jest zainstalowana na urządzeniu za pomocą nazwa pakietu.
- Aplikacja Google używa sprawdzania podpisu pakietu, aby potwierdzić, że zainstalowany to właściwa aplikacja.
- Aplikacja Google tworzy intencję rozpoczęcia wyznaczonej aktywności w Twojej aplikacji. Ta intencja zawiera dodatkowe dane wymagane do połączenia. Sprawdza też by sprawdzić, czy Twoja aplikacja obsługuje funkcję App Flip. W tym celu rozwiąż platforma Androida.
- Aplikacja sprawdza, czy żądanie pochodzi z aplikacji Google. Aby to zrobić: aplikacja sprawdza podpis pakietu i podany identyfikator klienta.
- Aplikacja prosi o kod autoryzacji z serwera OAuth 2.0. Na na jego koniec, zwraca kod autoryzacji lub błąd W aplikacji Google.
- Aplikacja Google pobiera wynik i kontynuuje łączenie kont. Jeśli gdy poda się kod autoryzacji, wymiana tokenów między serwerami, tak samo jak w przypadku łączenia protokołu OAuth w przeglądarce. przepływu danych.
Modyfikowanie aplikacji na Androida pod kątem obsługi funkcji App Flip
Aby zapewnić obsługę funkcji App Flip, wprowadź te zmiany w kodzie aplikacji na Androida:
- Dodaj działanie ( - <intent-filter>) do pliku- AndroidManifest.xmlza pomocą działania ciąg znaków pasujący do wartości wpisanej w polu App Flip Intent.- <activity android:name="AuthActivity"> <!-- Handle the app flip intent --> <intent-filter> <action android:name="INTENT_ACTION_FROM_CONSOLE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
- sprawdzić podpis aplikacji do połączeń; - private fun verifyFingerprint( expectedPackage: String, expectedFingerprint: String, algorithm: String ): Boolean { callingActivity?.packageName?.let { if (expectedPackage == it) { val packageInfo = packageManager.getPackageInfo(it, PackageManager.GET_SIGNATURES) val signatures = packageInfo.signatures val input = ByteArrayInputStream(signatures[0].toByteArray()) val certificateFactory = CertificateFactory.getInstance("X509") val certificate = certificateFactory.generateCertificate(input) as X509Certificate val md = MessageDigest.getInstance(algorithm) val publicKey = md.digest(certificate.encoded) val fingerprint = publicKey.joinToString(":") { "%02X".format(it) } return (expectedFingerprint == fingerprint) } } return false }
- Wyodrębnij identyfikator klienta z parametrów intencji i sprawdź, czy klient Identyfikator jest zgodny z oczekiwaną wartością. - private const val EXPECTED_CLIENT = "<client-id-from-actions-console>" private const val EXPECTED_PACKAGE = "<google-app-package-name>" private const val EXPECTED_FINGERPRINT = "<google-app-signature>" private const val ALGORITHM = "SHA-256" ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val clientId = intent.getStringExtra("CLIENT_ID") if (clientId == EXPECTED_CLIENT && verifyFingerprint(EXPECTED_PACKAGE, EXPECTED_FINGERPRINT, ALGORITHM)) { // ...authorize the user... } }
- Po pomyślnej autoryzacji zwróć kod autoryzacji o korzystaniu. - // Successful result val data = Intent().apply { putExtra("AUTHORIZATION_CODE", authCode) } setResult(Activity.RESULT_OK, data) finish()
- Jeśli wystąpił błąd, zwróć wynik błędu. - // Error result val error = Intent().apply { putExtra("ERROR_TYPE", 1) putExtra("ERROR_CODE", 1) putExtra("ERROR_DESCRIPTION", "Invalid Request") } setResult(-2, error) finish()
Treść zamiaru uruchomienia
Intencja na Androida uruchamiająca Twoją aplikację zawiera te pola:
- CLIENT_ID(- String):- client_idGoogle zarejestrowane w Twojej aplikacji.
- SCOPE(- String[]): lista żądanych zakresów.
- REDIRECT_URI(- String): adres URL przekierowania.
Zawartość danych odpowiedzi
Dane zwracane do aplikacji Google są ustawiane w aplikacji przez wywołanie metody setResult().
Dane te obejmują:
- AUTHORIZATION_CODE(- String): wartość kodu autoryzacji.
- resultCode(- int): informuje o sukcesie lub niepowodzeniu procesu oraz przyjmuje jedną z następujących wartości:- Activity.RESULT_OK: oznacza sukces. kod autoryzacji.
- Activity.RESULT_CANCELLED: sygnał, że użytkownik anulował proces tworzenia konta. W takim przypadku aplikacja Google spróbuje połączyć konta za pomocą URL autoryzacji.
- -2: oznacza, że wystąpił błąd. Różne typy błędów opisane poniżej.
 
- ERROR_TYPE(- int): typ błędu, który ma jeden z tych elementów: wartości:- 1: błąd łatwy do naprawienia: aplikacja Google spróbuje połączyć konta za pomocą adres URL autoryzacji.
- 2: nieodwracalny błąd: aplikacja Google przerywa łączenie kont.
- 3: nieprawidłowe lub brakujące parametry żądania.
 
- ERROR_CODE(- int): liczba całkowita określająca charakter błędu. Aby zobaczyć co oznacza każdy z kodów błędu, zapoznaj się z tabeli kodów błędów.
- ERROR_DESCRIPTION(- String, opcjonalnie): komunikat o stanie zrozumiały dla człowieka i opisać błąd.
Wartość w polu AUTHORIZATION_CODE jest oczekiwana, gdy:
resultCode == Activity.RESULT_OK We wszystkich innych przypadkach wartość parametru
Pole AUTHORIZATION_CODE musi być puste. Jeśli parametr resultCode == -2,
Wartość ERROR_TYPE powinna zostać uzupełniona.
Tabela kodów błędów
W tabeli poniżej znajdziesz różne kody błędów wraz z informacją, czy można je odzyskać czy nie:
| Kod błędu | Znaczenie | Można odzyskać | Nie do odzyskania | 
|---|---|---|---|
| 1 | INVALID_REQUEST | ✔ | |
| 2 | NO_INTERNET_CONNECTION | ✔ | |
| 3 | OFFLINE_MODE_ACTIVE | ✔ | |
| 4 | CONNECTION_TIMEOUT | ✔ | |
| 5 | INTERNAL_ERROR | ✔ | |
| 6 | AUTHENTICATION_SERVICE_UNAVAILABLE | ✔ | |
| 8 | CLIENT_VERIFICATION_FAILED | ✔ | |
| 9 | INVALID_CLIENT | ✔ | |
| 10 | INVALID_APP_ID | ✔ | |
| 11 | INVALID_REQUEST | ✔ | |
| 12 | AUTHENTICATION_SERVICE_UNKNOWN_ERROR | ✔ | |
| 13 | AUTHENTICATION_DENIED_BY_USER | ✔ | |
| 14 | CANCELLED_BY_USER | ✔ | |
| 15 | FAILURE_OTHER | ✔ | |
| 16 | USER_AUTHENTICATION_FAILED | ✔ | 
W przypadku wszystkich kodów błędów musisz zwrócić wynik błędu za pomocą setResult w
aby zapewnić uruchomienie odpowiedniej kreacji zastępczej.