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
.