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:
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.
Votre application vérifie que les paramètres
client_id
etredirect_uri
sont encodés de l'URL entrante correspond au lien universel Google attendu.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.
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:
- Gérez
NSUserActivityTypeBrowsingWeb
dans votre délégué d'application. - Capturez les paramètres
redirect_uri
etstate
à partir de l'URL pour les utiliser ultérieurement. - 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
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 } }
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) } }
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) } }
Paramètres de requête pour le lien universel de votre application
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 de requête pour le lien universel de Google
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
.