App Flip na Androida

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:

  1. Aplikacja Google sprawdza, czy aplikacja jest zainstalowana na urządzeniu za pomocą nazwa pakietu.
  2. Aplikacja Google używa sprawdzania podpisu pakietu, aby potwierdzić, że zainstalowany to właściwa aplikacja.
  3. 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.
  4. Aplikacja sprawdza, czy żądanie pochodzi z aplikacji Google. Aby to zrobić: aplikacja sprawdza podpis pakietu i podany identyfikator klienta.
  5. Aplikacja prosi o kod autoryzacji z serwera OAuth 2.0. Na na jego koniec, zwraca kod autoryzacji lub błąd W aplikacji Google.
  6. 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:

  1. Dodaj działanie (<intent-filter>) do pliku AndroidManifest.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>
    
  2. 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
    }
    
  3. 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...
        }
    }
    
  4. 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()
    
  5. 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.