App Flip per iOS

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:

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

  2. I suoi controlli app che il client_id e redirect_uri parametri codificati nell'URL in arrivo corrisponde il link di Google universale previsto.

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

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

  1. Maneggiare NSUserActivityTypeBrowsingWeb nella vostra App Delegato.
  2. Cattura redirect_uri e state parametri dal URL da utilizzare in seguito.
  3. 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
  4. 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
        }
    }
    
  5. 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)
        }
    }
    
  6. 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)
        }
    }
    

Quando viene aperto dall'app Google, il collegamento universale della tua app include i seguenti parametri di query:

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