Łą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:
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.
Twoje czeki app że
client_id
iredirect_uri
parametr zakodowane w przychodzącym URL pasuje oczekiwany związek Google uniwersalne.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.
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:
- Uchwyt
NSUserActivityTypeBrowsingWeb
w App Delegata. - Przechwytywanie
redirect_uri
istate
parametry z adresu URL do wykorzystania później. - 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
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 } }
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) } }
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) } }
Parametry zapytania dla uniwersalnego linku Twojej aplikacji
Po otwarciu w aplikacji Google uniwersalny link Twojej aplikacji zawiera następujące parametry zapytania:
-
client_id
(String
): Googleclient_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 zapytania dla uniwersalnego linku Google
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
.