Odwracanie aplikacji na iOS

Otwieranie aplikacji na iOS z poziomu aplikacji Google za pomocą protokołu OAuth , aby ułatwić użytkownikowi aplikacji Google połączenie konta. Musisz wprowadzić drobne zmiany w kodzie aplikacji na iOS, aby wdrożyć tę funkcję.

Z tego dokumentu dowiesz się, jak zmodyfikować aplikację na iOS, aby obsługiwała App Flip.

Zobacz fragment

Przykładowa aplikacja App Flip przedstawia integrację kont na iOS zgodną z funkcją App Flip. Możesz użyć tej aplikacji, by sprawdzić, jak zareagować na przychodzącą uniwersalną przemianę aplikacji w aplikacjach mobilnych Google.

Przykładowa aplikacja jest wstępnie skonfigurowana pod kątem integracji z narzędziem do testowania aplikacji na iOS, za pomocą którego możesz zweryfikować integrację aplikacji na iOS z App Flip, zanim skonfigurujesz łączenie kont z Google. Aplikacja symuluje uniwersalny link aktywowany przez aplikacje mobilne Google, gdy włączona jest funkcja App Flip.

Jak to działa

Poniżej znajdziesz opis czynności, które wykonuje aplikacja Google i Twoja aplikacja, gdy Odwracanie aplikacji:

  1. Aplikacja Google próbuje otworzyć uniwersalny link aplikacji. Jest w stanie otworzyć Twoją aplikację, jeśli jest zainstalowana na urządzeniu użytkownika i powiązana z czyli uniwersalnego linku. Szczegółowe informacje znajdziesz w artykule Obsługa linków uniwersalnych.

  2. Aplikacja sprawdza, czy parametry client_id i redirect_uri zakodowane w przychodzącym adresie URL są zgodne z oczekiwanym linkiem uniwersalnym Google.

  3. Aplikacja żąda kodu autoryzacji od serwera OAuth2. Na koniec aplikacji zwraca kod autoryzacji lub błąd, w aplikacji Google. W tym celu otwiera uniwersalny link Google z dołączonym dla kodu autoryzacji lub parametrów błędu.

  4. Aplikacja Google obsługuje przychodzący uniwersalny link Google i kontynuuje reszta procesu. Jeśli podasz kod autoryzacji, połączenie będzie możesz go przeprowadzić natychmiast. Wymiana tokenów odbywa się między serwerami w taki sam sposób jak w przypadku strumienia łączenia OAuth opartego na przeglądarce. Jeśli zwrócony zostanie kod błędu, proces łączenia kont będzie kontynuowany za pomocą opcji alternatywnych.

Zmodyfikuj aplikację na iOS, aby obsługiwała App Flip

Aby umożliwić obsługę App Flip, wprowadź te zmiany w kodzie aplikacji na iOS:

  1. Obsłuż NSUserActivityTypeBrowsingWeb w planie przedstawiciela aplikacji.
  2. Z adresu URL pobierz parametry redirect_uri i state, aby użyć ich później.
  3. Sprawdź, czy redirect_uri odpowiada temu formatowi:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. Sprawdź, czy identyfikator klienta jest zgodny z oczekiwaną wartością. Użyj następujących przykładowy kod:

    func application(_ application: UIApplication,
                     continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([Any]?) -> Void) -> Bool
    {
        guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
            let incomingURL = userActivity.webpageURL,
            let components = URLComponents(url: incomingURL, resolvingAgainstBaseURL: false),
            let params = components.queryItems else {
                return false
        }
    
        if let clientId = params.filter({$0.name == "client_id"}).first?.value,
            let state = params.filter({$0.name == "state"}).first?.value,
            let redirectUri = params.filter({$0.name == "redirect_uri"}).first?.value {
    
            // Save the redirect_uri and state for later...
    
            // Verify the client id
            return (clientId == GOOGLE_CLIENT_ID)
        } else {
            // Missing required parameters
            return false
        }
    }
    
  5. Po autoryzacji wywołaj identyfikator URI przekierowania z autoryzacją w kodzie. Użyj tego przykładowego kodu:

    func returnAuthCode(code: String, state: String, redirectUri: String) {
        var redirectURL = URL(string: redirectUri)
        var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false)
    
        // Return the authorization code and original state
        let paramAuthCode = URLQueryItem(name: "code", value: code)
        let paramState = URLQueryItem(name: "state", value: state)
        components?.queryItems = [paramAuthCode, paramState]
        if let resultURL = components?.url {
            UIApplication.shared.open(
                resultURL,
                options: [UIApplicationOpenURLOptionUniversalLinksOnly : true],
                completionHandler: nil)
        }
    }
    
  6. Jeśli wystąpił błąd, dołącz wynik błędu do identyfikatora URI przekierowania. Użyj tego przykładowego kodu:

    func returnError(redirectUri: String) {
        var redirectURL = URL(string: redirectUri)
        var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false)
    
        // Return the authorization code and original state
        let paramError = URLQueryItem(name: "error", value: "invalid_request")
        let paramDescription = URLQueryItem(name: "error_description", value: "Invalid Request")
        components?.queryItems = [paramError, paramDescription]
        if let resultURL = components?.url {
            UIApplication.shared.open(
                resultURL,
                options: [UIApplicationOpenURLOptionUniversalLinksOnly : true],
                completionHandler: nil)
        }
    }
    

Gdy otworzysz aplikację Google, jej uniwersalny link będzie zawierał te elementy parametry zapytania:

  • client_id (String): client_id Google zarejestrowane w Twojej aplikacji.
  • scope (List of String): lista żądanych zakresów oddzielonych spacjami.
  • state (String): liczba jednorazowa używana przez Google do zweryfikowania, czy autoryzacja jest w odpowiedzi na żądanie Google
  • redirect_uri (String): uniwersalny link Google. URI „flip” służący do otwierania aplikacji Google i przekazywania wyników.

Parametry używane po zwróceniu wyniku autoryzacji:

  • code (String): wartość kodu autoryzacji, jeśli jest dostępny.
  • state (String): dokładna wartość otrzymana z przychodzącego uniwersalnego linku.

Parametry używane, gdy zwrócony wynik autoryzacji jest nieprawidłowy:

  • error (String) z tymi wartościami:

    • cancelled: błąd, który można naprawić. Aplikacja Google podejmie próbę użycia konta przy użyciu adresu URL autoryzacji. Oto kilka przykładów: błąd użytkownika logowania, urządzenie jest offline lub przekroczono limit czasu połączenia.
    • unrecoverable: nieodwracalny błąd. Użytkownik próbuje na przykład połączyć konto z wyłączonym kontem. Aplikacja Google przerwie łączenie kont.
    • invalid_request: parametry żądania są nieprawidłowe lub ich brakuje. To jest błąd, który można naprawić. Aplikacja Google spróbuje połączyć konto przy użyciu adresu URL autoryzacji.
    • access_denied: użytkownik odrzuca prośbę o zgodę. Jest to błąd nieodwracalny. Aplikacja Google przerywa łączenie.
  • error_description (String, opcjonalnie): wyświetlany komunikat o błędzie, który wyświetla się łatwo dla użytkownika.

    .

W przypadku wszystkich typów błędów musisz zwrócić dane odpowiedzi do określonego typu REDIRECT_URI, aby zapewnić wywołanie odpowiedniej kreacji zastępczej.

Modyfikowanie punktu końcowego autoryzacji na potrzeby obsługi funkcji App Flip

Skonfiguruj platformę tak, aby akceptowała żądania za pomocą adresów URL przekierowania App Flip:

  • Aplikacja Google Home
    https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.dev
    https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.enterprise
    https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.rc
    https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.dev
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.enterprise
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.rc
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast
    
  • Aplikacja Asystent Google
    https://oauth-redirect.googleusercontent.com/a/com.google.OPA.dev
    https://oauth-redirect.googleusercontent.com/a/com.google.OPA.enterprise
    https://oauth-redirect.googleusercontent.com/a/com.google.OPA.rc
    https://oauth-redirect.googleusercontent.com/a/com.google.OPA
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.dev
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.enterprise
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.rc
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA
    

Sprawdź, czy client_id oraz adres URL określony przez parametr redirect_uri są zgodne z oczekiwanymi wartościami po otrzymaniu żądania. jeśli weryfikacja klienta nie powiedzie się, zwrócenie błędu invalid_request do funkcji redirect_uri.