App Flip per iOS

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:

  1. 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.

  2. La tua app controlla che i parametri client_id e redirect_uri siano codificati nell'URL in arrivo corrisponda al link universale di Google previsto.

  3. 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.

  4. 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:

  1. Gestisci NSUserActivityTypeBrowsingWeb nel Delegato dell'app.
  2. Acquisisci i parametri redirect_uri e state dall'URL per utilizzarli in seguito.
  3. 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
  4. 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
        }
    }
    
  5. 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)
        }
    }
    
  6. 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)
        }
    }
    

Una volta aperto dall'app Google, il link universale dell'app include quanto segue: parametri di query:

  • client_id (String): Google client_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 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.