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 plikuAndroidManifest.xml
za 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_id
Google 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.