App Flip pour iOS

La liaison App Flip basée sur OAuth (App Flip) ouvre votre application iOS à partir d'une application Google pour aider l'utilisateur de l'application Google à lier plus facilement son compte. Vous devez apporter des modifications mineures au code de votre application iOS pour implémenter cette fonctionnalité.

Dans ce document, vous apprenez à modifier votre application iOS pour prendre en charge App Flip.

Essayez l'échantillon

L'application flip exemple d' application montre un compte reliant l' intégration sur iOS App qui est flip compatible. Vous pouvez utiliser cette application pour vérifier comment répondre à un lien universel App Flip entrant à partir des applications mobiles Google.

L'application échantillon est préconfiguré pour intégrer à l' application Retournez outil de test pour iOS , que vous pouvez utiliser pour vérifier votre intégration iOS app avec Flip App avant votre compte configurer la liaison avec Google. Cette application simule le lien universel déclenché par les applications mobiles Google lorsque App Flip est activé.

Comment ça fonctionne

Les étapes suivantes sont suivies par l'appli Google et votre application lorsque l'App Flip se produit :

  1. L'appli Google tente d'ouvrir le lien universel de votre application. Il est capable d'ouvrir votre application si elle est installée sur l'appareil de l'utilisateur et associée au lien universel. Voir Soutien Liens Universal pour plus de détails.

  2. Votre application vérifie que le client_id et redirect_uri paramètre codé dans l'URL entrant correspond le lien Google universel prévu.

  3. Votre application demande un code d'autorisation à votre serveur OAuth2. À la fin de ce flux, votre application renvoie soit un code d'autorisation, soit une erreur à l'application Google. Pour ce faire, il ouvre le lien universel de Google avec des paramètres ajoutés pour le code d'autorisation ou l'erreur.

  4. L'application Google gère le lien universel Google entrant et continue avec le reste du flux. Si un code d'autorisation est fourni, la liaison est effectuée immédiatement. L'échange de jetons se produit de serveur à serveur, de la même manière que dans le flux de liaison OAuth basé sur un navigateur. Si un code d'erreur est renvoyé, le flux de liaison se poursuit avec les options alternatives.

Modifiez votre application iOS pour prendre en charge App Flip

Pour prendre en charge App Flip, apportez les modifications de code suivantes à votre application iOS :

  1. Poignée NSUserActivityTypeBrowsingWeb dans votre délégué App.
  2. Capture redirect_uri et state des paramètres de l'URL à utiliser plus tard.
  3. Vérifiez que redirect_uri matchs ce format:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. Vérifiez que l'ID client correspond à la valeur attendue. Utilisez l'exemple de code suivant :

    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. Une fois l'autorisation réussie, appelez l'URI de redirection avec le code d'autorisation. Utilisez l'exemple de code suivant :

    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. Si une erreur s'est produite, attachez plutôt un résultat d'erreur à l'URI de redirection. Utilisez l'exemple de code suivant :

    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)
        }
    }
    

Lorsqu'il est ouvert par l'appli Google, le lien universel de votre application inclut les paramètres de requête suivants :

  • client_id ( String ): Google client_id qui est enregistré dans votre application.
  • scope d' List of String scope ( List of String ): Une liste des champs séparés par des espaces demandés.
  • state ( String ): Un nonce utilisé par Google pour vérifier que le résultat d'autorisation est en réponse à la demande sortante de Google.
  • redirect_uri ( String ): lien universel de Google. L'URI "retourner" pour ouvrir l'appli Google et transmettre les résultats.

Paramètres utilisés lorsque le résultat de l'autorisation est renvoyé avec succès :

  • code ( String ): La valeur du code d'autorisation, le cas échéant.
  • state ( String ): La valeur exacte reçue du lien universel entrant.

Paramètres utilisés lorsque le résultat de l'autorisation est renvoyé sans succès :

  • error ( String ), avec les valeurs suivantes:

    • cancelled : une erreur récupérable. L'appli Google tentera d'associer le compte à l'aide de l'URL d'autorisation. Certains exemples sont l'échec de connexion de l'utilisateur, un appareil étant hors ligne ou une connexion expirée.
    • unrecoverable : Une erreur irrécupérable. Par exemple, l'utilisateur essaie de se connecter avec un compte désactivé. L'appli Google interrompra la connexion du compte.
    • invalid_request : Les paramètres demande ne sont pas valides ou manquants. Il s'agit d'une erreur récupérable. L'appli Google tentera d'associer le compte à l'aide de l'URL d'autorisation.
    • access_denied : L'utilisateur rejette la demande de consentement. Il s'agit d'une erreur non récupérable ; l'application Google interrompt la liaison.
  • error_description ( String , en option): Un message d'erreur convivial.

Pour tous les types d'erreur, vous devez retourner les données de réponse spécifié REDIRECT_URI pour assurer la fallback appropriée est trigerred.

Modifiez votre point de terminaison d'autorisation pour prendre en charge App Flip

Configurez votre plate-forme pour accepter les demandes à l'aide des URL de redirection App Flip de Google :

  • Google Accueil
    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 adjoint
    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
    

Vérifiez que client_id et l'URL spécifiée par le redirect_uri paramètre correspondent aux valeurs attendues lorsqu'une demande est reçue. si la vérification du client échoue, renvoie l'erreur invalid_request au redirect_uri .