App Flip pour iOS

L'association de retour d'application basée sur OAuth permet d'ouvrir votre application iOS à partir d'une application Google pour aider l'utilisateur de l'appli Google à associer plus facilement son compte. Vous devez faire en sorte modifications mineures du code de votre application iOS afin d'implémenter cette fonctionnalité.

Dans ce document, vous découvrirez comment modifier votre application iOS pour qu'elle prenne en charge App Flip.

Essayer l'exemple

Application exemple App Flip illustre une intégration d'association de compte compatible avec App Flip sur iOS. Vous pouvez utiliser cette appli pour vérifier comment répondre à un App Flip universel entrant des applis mobiles Google.

L'application exemple est préconfigurée pour s'intégrer à l'outil de test de retournement d'application pour iOS que vous pouvez utiliser pour vérifier l'intégration de votre application iOS avec App Flip avant vous configurez l'association de comptes avec Google. Cette application simule le lien universel. déclenché par les applis mobiles Google lorsque App Flip est activé.

Fonctionnement

Voici la procédure à suivre par l'appli Google et votre application lorsque Une rotation d'application se produit:

  1. L'appli Google tente d'ouvrir le lien universel de votre application. Il est capable de ouvrir votre application si elle est installée sur l'appareil de l'utilisateur et associée à le lien universel. Pour en savoir plus, consultez la section Compatibilité avec les liens universels.

  2. Votre application vérifie que les paramètres client_id et redirect_uri sont encodés de l'URL entrante correspond au lien universel Google attendu.

  3. Votre application demande un code d'autorisation à votre serveur OAuth2. À la fin de ce flux, votre application renvoie un code d'autorisation ou une erreur l'appli Google. Pour cela, elle ouvre le lien universel de Google avec pour le code d'autorisation ou l'erreur.

  4. L'appli Google gère le lien universel Google entrant et poursuit : le reste du flux. Si un code d'autorisation est fourni, l'association est terminée immédiatement. L'échange de jetons se fait de serveur à serveur, dans le flux d'association OAuth basé sur un navigateur. Si un code d'erreur est le flux d'association continue avec les autres options.

Modifier votre application iOS pour qu'elle prenne en charge App Flip

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

  1. Gérez NSUserActivityTypeBrowsingWeb dans votre délégué d'application.
  2. Capturez les paramètres redirect_uri et state à partir de l'URL pour les utiliser ultérieurement.
  3. Vérifiez que redirect_uri correspond au format suivant:
    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 les éléments suivants : exemple de code:

    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 obtenue, appelez l'URI de redirection avec l'autorisation du code source. 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, joignez 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)
        }
    }
    

Lorsque l'appli Google l'ouvre, le lien universel de votre application inclut les éléments suivants : paramètres de requête:

  • client_id (String): client_id Google enregistré sous votre appli.
  • scope (List of String): liste des champs d'application demandés, séparés par un espace.
  • state (String): nonce utilisé par Google pour vérifier que l'autorisation en réponse à la requête sortante de Google.
  • redirect_uri (String): lien universel de Google. La partie "flip" URI à ouvrir l'appli Google et de transmettre les résultats.

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

  • code (String): valeur du code d'autorisation, si disponible.
  • state (String): valeur exacte reçue du lien universel entrant.

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

  • error (String), avec les valeurs suivantes:

    • cancelled: erreur récupérable. L'appli Google va tenter de créer à l'aide de l'URL d'autorisation. Par exemple, si l'utilisateur n'arrive pas pour se connecter, un appareil est hors connexion ou une connexion a expiré.
    • unrecoverable: erreur irrécupérable. Par exemple, l'utilisateur tente de s'associer à un compte désactivé.L'appli Google annulera l'association du compte.
    • invalid_request: les paramètres de requête sont incorrects 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 refuse la demande de consentement. Il s'agit d'une erreur non récupérable. l'appli Google annule l'association.
  • error_description (String, facultatif): message d'erreur convivial.

Pour tous les types d'erreurs, vous devez renvoyer les données de réponse à la REDIRECT_URI pour que la création de remplacement appropriée soit déclenchée.

Modifiez votre point de terminaison d'autorisation pour qu'il soit compatible avec App Flip

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

  • Application 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
    
  • Application Assistant 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
    

Vérifiez que client_id et l'URL spécifiée par le paramètre redirect_uri correspondre aux valeurs attendues lorsqu'une requête est reçue. si la validation du client échoue, renvoyez l'erreur invalid_request à redirect_uri.