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:
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_id
iredirect_uri
zostały zakodowane w przychodzącym adresie URL pasuje do oczekiwanego uniwersalnego linku Google.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.
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:
- Obsłuż
NSUserActivityTypeBrowsingWeb
w planie przedstawiciela aplikacji. - Przechwyć z adresu URL parametry
redirect_uri
istate
, aby użyć ich później. - 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
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 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 Googleredirect_uri
(String
): uniwersalny link Google. „Odwróć” Identyfikator URI do otwarcia aplikację Google i przekazywać wyniki.
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 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
.