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:
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.
Aplikacja sprawdza, czy parametry
client_idiredirect_urizakodowane w przychodzącym adresie URL są zgodne z oczekiwanym linkiem uniwersalnym Google.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.
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:
- Obsłuż
NSUserActivityTypeBrowsingWebw planie przedstawiciela aplikacji. - Z adresu URL pobierz parametry
redirect_uriistate, aby użyć ich później. - Sprawdź, czy
redirect_uriodpowiada temu formatowi: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 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 } }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) } }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) } }
Parametry zapytania dotyczące uniwersalnego linku Twojej aplikacji
Gdy otworzysz aplikację Google, jej uniwersalny link będzie zawierał te elementy parametry zapytania:
client_id(String):client_idGoogle 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 Googleredirect_uri(String): uniwersalny link Google. URI „flip” służący do otwierania aplikacji Google i przekazywania wyników.
Parametry zapytania uniwersalnego linku Google
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.