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 do integracji z App Flip Test Tool iOS Możesz go użyć do sprawdzenia integracji aplikacji na iOS z App Flip. skonfigurować łączenie kont z Google. Ta aplikacja symuluje uniwersalny link uruchamianych przez aplikacje mobilne Google, gdy włączone jest przewracanie aplikacji.

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 zostały zakodowane w przychodzącym adresie URL pasuje do oczekiwanego uniwersalnego linku Google.

  3. Aplikacja żąda kodu autoryzacji od serwera OAuth2. Na koniec aplikacji zwraca kod autoryzacji lub błąd, w aplikacji Google. Aby to zrobić, otwiera uniwersalny link Google z dołączonym rozszerzeniem 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, tak samo jak tak samo jak w procesie łączenia z protokołem OAuth w przeglądarce. Jeśli kod błędu to , połączenie kont będzie kontynuowane z wykorzystaniem alternatywnych opcji.

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. Przechwyć z adresu URL parametry redirect_uri i state, aby użyć ich później.
  3. Sprawdź, czy pole redirect_uri pasuje do 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 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 aplikacja zostanie otwarta w aplikacji 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. „Odwróć” Identyfikator URI do otwarcia aplikację Google i przekazywać wyniki.

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 wynik autoryzacji nie zostanie zwrócony:

  • error (String) z tymi wartościami:

    • cancelled: błąd, który można naprawić. Aplikacja Google spróbuje zalogować się na konto 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: błąd nieodwracalny. Na przykład użytkownik spróbuje utworzyć połączenie z wyłączonym kontem.Aplikacja Google przerwie łączenie kont.
    • invalid_request: parametry żądania są nieprawidłowe lub ich brak. Ten błąd 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ę na wykorzystanie danych. Tego błędu nie można naprawić. aplikacja Google przerwie łą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ć uruchomienie 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
    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
    
  • 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
    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ź, 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.