Il collegamento App Flip basato su OAuth (App Flip) apre la tua app iOS da un'app Google per aiutare l'utente dell'app Google a collegare più facilmente il proprio account. Devi apportare piccole modifiche al codice alla tua app iOS per implementare questa funzione.
In questo documento imparerai come modificare la tua app iOS per supportare App Flip.
Prova il campione
Il Flip App campione app dimostra un account che collega l'integrazione su iOS che è App Flip-compatibili. Puoi utilizzare questa app per verificare come rispondere a un collegamento universale App Flip in arrivo dalle app per dispositivi mobili di Google.
L'applicazione di esempio è preconfigurato per integrarsi con il flip strumento Test App per iOS , che è possibile utilizzare per verificare l'integrazione della tua app iOS con App flip prima di configurare un account di collegamento con Google. Questa app simula il collegamento universale attivato dalle app mobili di Google quando App Flip è abilitato.
Come funziona
Di seguito sono riportati i passaggi del flusso che l'app Google e la tua app eseguono quando si verifica il capovolgimento dell'app:
L'app Google tenta di aprire il collegamento universale della tua app. È in grado di aprire la tua app se è installata sul dispositivo dell'utente e associata al collegamento universale. Vedere Supporto universale link per i dettagli.
I suoi controlli app che il
client_id
eredirect_uri
parametri codificati nell'URL in arrivo corrisponde il link di Google universale previsto.La tua app richiede un codice di autorizzazione dal tuo server OAuth2. Alla fine di questo flusso, la tua app restituisce un codice di autorizzazione o un errore all'app Google. Per fare ciò, apre il collegamento universale di Google con i parametri aggiunti per il codice di autorizzazione o l'errore.
L'app Google gestisce il collegamento universale di Google in entrata e continua con il resto del flusso. Se viene fornito un codice di autorizzazione, il collegamento viene completato immediatamente. Lo scambio di token avviene da server a server, allo stesso modo del flusso di collegamento OAuth basato su browser. Se viene restituito un codice di errore, il flusso di collegamento continua con le opzioni alternative.
Modifica la tua app iOS per supportare App Flip
Per supportare App Flip, apporta le seguenti modifiche al codice sulla tua app iOS:
- Maneggiare
NSUserActivityTypeBrowsingWeb
nella vostra App Delegato. - Cattura
redirect_uri
estate
parametri dal URL da utilizzare in seguito. - Controllare che
redirect_uri
partite questo formato:https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
Verificare che l'ID client corrisponda al valore previsto. Utilizzare il seguente 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, chiamare l'URI di reindirizzamento con il codice di autorizzazione. Utilizzare 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, allegare invece un risultato di errore all'URI di reindirizzamento. Utilizzare 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 query per il collegamento universale della tua app
Quando viene aperto dall'app Google, il collegamento universale della tua app include i seguenti parametri di query:
-
client_id
(String
): Googleclient_id
Ecco registrati sotto la vostra applicazione. -
scope
(List of String
): un elenco di ambiti separati da spazi richiesti. -
state
(String
): un nonce utilizzato da Google per verificare che il risultato di autorizzazione è in risposta alla richiesta in uscita di Google. -
redirect_uri
(String
): collegamento universale di Google. L'URI "capovolgi" per aprire l'app Google e passare i risultati.
Parametri di query per il collegamento 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 in entrata universale.
Parametri utilizzati quando il risultato dell'autorizzazione viene restituito senza successo:
error
(String
), con i seguenti valori:-
cancelled
: un errore recuperabile. L'app Google tenterà di collegare l'account utilizzando l'URL di autorizzazione. Alcuni esempi sono l'utente che non riesce ad accedere, un dispositivo offline o un timeout della connessione. -
unrecoverable
: un errore irreversibile. Ad esempio, l'utente tenta di collegarsi con un account disabilitato. L'app Google interromperà il collegamento dell'account. -
invalid_request
: La richiesta di parametri non sono validi o mancanti. Questo è un errore recuperabile. L'app Google tenterà di collegare l'account utilizzando l'URL di autorizzazione. -
access_denied
: l'utente rifiuta la richiesta di consenso. Questo è un errore irreversibile; l'app Google interrompe il collegamento.
-
error_description
(String
, opzionale): un messaggio di errore user-friendly.
Per tutti i tipi di errore, è necessario restituire i dati di risposta al specificato REDIRECT_URI
per garantire il fallback appropriato trigerred.
Modifica il tuo endpoint di autorizzazione per supportare App Flip
Configura la tua piattaforma per accettare le richieste utilizzando gli URL di reindirizzamento di Google App Flip:
- Home page di 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
- Google Assistant 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
Controllare che client_id
e l'URL specificato dal redirect_uri
parametri corrispondono ai valori previsti quando viene ricevuta una richiesta. Se la verifica client non riesce, restituire l'errore invalid_request
al redirect_uri
.