Il collegamento App Flip basato su OAuth (App Flip) apre la tua app per iOS da un'app Google per aiutare gli utenti dell'app Google a collegare più facilmente il proprio account. Devi rendere piccole modifiche al codice dell'app per iOS per implementare questa funzionalità.
In questo documento imparerai a modificare la tua app per iOS per supportare App Flip.
Prova l'esempio
L'app di esempio App Flip dimostra un'integrazione per il collegamento dell'account su iOS compatibile con App Flip. Puoi utilizzare questa app per verificare come rispondere a un'app Flip universale in arrivo dalle app mobile Google.
L'app di esempio è preconfigurata per l'integrazione con l'App Flip Test Tool per iOS, che puoi utilizzare per verificare l'integrazione della tua app per iOS con App Flip prima configuri il collegamento dell'account con Google. Questa app simula il link universale attivata dalle app mobile Google quando App Flip è attiva.
Come funziona
Di seguito sono riportati i passaggi del flusso che l'app Google e l'app eseguono quando L'app può capovolgere:
L'app Google tenta di aprire il link universale dell'app. È in grado di aprire l'app se è installata sul dispositivo dell'utente e associata a il link universale. Per informazioni dettagliate, consulta Supporto dei link universali.
La tua app controlla che i parametri
client_id
eredirect_uri
siano codificati nell'URL in arrivo corrisponda al link universale di Google previsto.L'app richiede un codice di autorizzazione al server OAuth2. Alla fine di questo flusso, l'app restituisce un codice di autorizzazione o un errore l'app Google. A questo scopo, apre il link universale di Google con per il codice di autorizzazione o l'errore.
L'app Google gestisce il link universale di Google in arrivo e continua con per il resto della procedura. Se viene fornito un codice di autorizzazione, il collegamento viene completata immediatamente. Lo scambio di token avviene tra server, lo stesso nel flusso di collegamento OAuth basato su browser. Se viene visualizzato un codice di errore , il flusso di collegamento continua con le opzioni alternative.
Modifica l'app per iOS in modo che supporti App Flip
Per supportare App Flip, apporta le seguenti modifiche al codice della tua app per iOS:
- Gestisci
NSUserActivityTypeBrowsingWeb
nel Delegato dell'app. - Acquisisci i parametri
redirect_uri
estate
dall'URL per utilizzarli in seguito. - Verifica che
redirect_uri
corrisponda a questo formato:https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
Verifica che l'ID client corrisponda al valore previsto. Utilizza quanto segue esempio di codice:
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 } }
Dopo l'autorizzazione, chiama l'URI di reindirizzamento con il modulo le API nel tuo codice. Utilizza il seguente esempio di codice:
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) } }
Se si è verificato un errore, allega un risultato all'URI di reindirizzamento. Utilizza il seguente esempio di codice:
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) } }
Parametri di ricerca per il link universale dell'app
Una volta aperto dall'app Google, il link universale dell'app include quanto segue: parametri di query:
client_id
(String
): Googleclient_id
registrato nella tua app.scope
(List of String
): un elenco di ambiti separati da spazi richiesti.state
(String
): un nonce utilizzato da Google per verificare che l'autorizzazione è una risposta a una richiesta in uscita di Google.redirect_uri
(String
): il link universale di Google. Il "capo" URI da aprire l'app Google e trasmettere i risultati.
Parametri di ricerca per il link universale di Google
Parametri utilizzati quando il risultato dell'autorizzazione viene restituito correttamente:
code
(String
): il valore del codice di autorizzazione, se disponibile.state
(String
): il valore esatto ricevuto dal link universale in arrivo.
Parametri utilizzati quando il risultato dell'autorizzazione viene restituito non correttamente:
error
(String
), con i seguenti valori:cancelled
: un errore recuperabile. L'app Google tenterà di eseguire l'accesso all'account utilizzando l'URL di autorizzazione. Alcuni esempi riguardano errori dell'utente per eseguire l'accesso, se un dispositivo è offline o si è verificato un timeout di connessione.unrecoverable
: si è verificato un errore irreversibile. Ad esempio, l'utente tenta di collegarsi a un account disattivato.L'app Google interromperà il collegamento dell'account.invalid_request
: i parametri della richiesta non sono validi o sono mancanti. Questo è un errore recuperabile. L'app Google proverà a collegare l'account utilizzando l'URL di autorizzazione.access_denied
: l'utente rifiuta la richiesta di consenso. Si tratta di un errore irreversibile; l'app Google interrompe il collegamento.
error_description
(String
, facoltativo): un messaggio di errore facile da usare.
Per tutti i tipi di errore, devi restituire i dati di risposta all'oggetto
REDIRECT_URI
per garantire che venga eseguito il fallback appropriato.
Modifica l'endpoint di autorizzazione in modo che supporti App Flip
Configura la tua piattaforma in modo da accettare le richieste utilizzando gli URL di reindirizzamento App Flip di Google:
- App 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
- App Assistente 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
Verifica che client_id
e l'URL specificato dal parametro redirect_uri
che corrispondano ai valori previsti quando viene ricevuta una richiesta. se la verifica del cliente
non riesce, restituisce l'errore invalid_request
a redirect_uri
.