App Flip na iOS

Łączenie App Flip oparte na protokole OAuth (App Flip) otwiera Twoją aplikację na iOS z aplikacji Google, aby ułatwić użytkownikowi aplikacji Google połączenie konta. Aby zaimplementować tę funkcję, musisz wprowadzić drobne zmiany w kodzie aplikacji na iOS.

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

Wypróbuj próbkę

App Klapki próbka aplikacja pokazuje konto łączące integrację na iOS że App Flip-kompatybilne. Możesz użyć tej aplikacji, aby zweryfikować, jak odpowiedzieć na przychodzący uniwersalny link App Flip z aplikacji mobilnych Google.

Próbka aplikacja jest wstępnie skonfigurowany do integracji z App Przestawić przełączniki narzędziem testowym dla iOS , które można wykorzystać do sprawdzenia integrację iOS aplikacji z App Flipa Przed skonfigurowaniem konta powiązanie z Google. Ta aplikacja symuluje uniwersalny link wyzwalany przez aplikacje mobilne Google, gdy włączona jest funkcja App Flip.

Jak to działa

Poniżej przedstawiono kroki, które aplikacja Google i Twoja aplikacja wykonują, gdy nastąpi przerzucenie aplikacji:

  1. Aplikacja Google próbuje otworzyć uniwersalny link Twojej aplikacji. Może otworzyć Twoją aplikację, jeśli jest zainstalowana na urządzeniu użytkownika i powiązana z uniwersalnym linkiem. Zobacz Wspieranie Uniwersalny Links szczegóły.

  2. Twoje czeki app że client_id i redirect_uri parametr zakodowane w przychodzącym URL pasuje oczekiwany związek Google uniwersalne.

  3. Twoja aplikacja żąda kodu autoryzacyjnego z serwera OAuth2. Na końcu tego przepływu aplikacja zwraca kod autoryzacji lub błąd do aplikacji Google. W tym celu otwiera uniwersalny link Google z dołączonymi parametrami dla kodu autoryzacji lub błędu.

  4. Aplikacja Google obsługuje przychodzące uniwersalne łącze Google i kontynuuje resztę przepływu. Jeśli podany zostanie kod autoryzacyjny, powiązanie zostanie zakończone natychmiast. Wymiana tokenów odbywa się między serwerami, w taki sam sposób, jak w przepływie łączenia OAuth opartym na przeglądarce. Jeśli zostanie zwrócony kod błędu, przepływ łączenia będzie kontynuowany z alternatywnymi opcjami.

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

Aby obsługiwać funkcję App Flip, wprowadź następujące zmiany w kodzie aplikacji na iOS:

  1. Uchwyt NSUserActivityTypeBrowsingWeb w App Delegata.
  2. Przechwytywanie redirect_uri i state parametry z adresu URL do wykorzystania później.
  3. Sprawdź, czy redirect_uri mecze tego formatu:
    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 odpowiada oczekiwanej wartości. Użyj następującego przykładowego kodu:

    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 pomyślnej autoryzacji wywołaj przekierowanie URI z kodem autoryzacji. Użyj następującego 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, zamiast tego dołącz wynik błędu do identyfikatora URI przekierowania. Użyj następującego 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)
        }
    }
    

Po otwarciu w aplikacji Google uniwersalny link Twojej aplikacji zawiera następujące parametry zapytania:

  • client_id ( String ): Google client_id to zarejestrowane w ramach aplikacji.
  • scope ( List of String ): Lista zakresów oddzielonych spacjami wymagane.
  • state ( String ): a nonce stosowane przez Google w celu sprawdzenia, czy wynik jest autoryzacja w odpowiedzi na wniosek ustępującego Google.
  • redirect_uri ( String ): uniwersalne połączenie Google'a. Identyfikator URI „odwróć”, aby otworzyć aplikację Google i przekazać wyniki.

Parametry używane w przypadku pomyślnego zwrócenia wyniku autoryzacji:

  • code ( String ): Wartość kodu autoryzacji, jeśli są dostępne.
  • state ( String ): Dokładna wartość otrzymanych od przychodzącego uniwersalnego łącza.

Parametry używane w przypadku niepomyślnego zwrócenia wyniku autoryzacji:

  • error ( String ), z następującymi wartościami:

    • cancelled : odwracalnego błędu. Aplikacja Google podejmie próbę połączenia kont przy użyciu adresu URL autoryzacji. Niektóre przykłady to błąd logowania użytkownika, urządzenie w trybie offline lub przekroczenie limitu czasu połączenia.
    • unrecoverable : nieodwracalny błąd. Na przykład użytkownik próbuje połączyć się z wyłączonym kontem.Aplikacja Google przerwie łączenie kont.
    • invalid_request : wniosek parametry są nieprawidłowe lub niekompletne. To jest błąd, który można naprawić. Aplikacja Google podejmie próbę połączenia kont przy użyciu adresu URL autoryzacji.
    • access_denied : użytkownik odrzuca żądanie zgody. To jest nieodwracalny błąd; aplikacja Google przerywa łączenie.
  • error_description ( String , opcjonalnie): Komunikat o błędzie łatwy w obsłudze.

Dla wszystkich typów błędów, trzeba zwrócić dane odpowiedzią na określonym REDIRECT_URI aby zapewnić odpowiedni awaryjna jest trigerred.

Zmodyfikuj punkt końcowy autoryzacji, aby obsługiwał funkcję App Flip

Skonfiguruj swoją platformę do akceptowania żądań przy użyciu przekierowań Google App Flip:

  • Strona główna Google app
    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
    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
    
  • Asystent Google app
    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
    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
    

Sprawdź, client_id oraz adres URL podany przez redirect_uri parametru dopasować wartości oczekiwane po otrzymaniu żądania. Jeśli weryfikacja klienta nie powiedzie się, zwróci błąd invalid_request do redirect_uri .