App Flip para iOS

La vinculación de App Flip basada en OAuth (App Flip) abre su aplicación de iOS desde una aplicación de Google para ayudar al usuario de la aplicación de Google a vincular su cuenta más fácilmente. Debe realizar cambios menores en el código de su aplicación iOS para implementar esta función.

En este documento, aprenderá a modificar su aplicación iOS para que sea compatible con App Flip.

Prueba la muestra

El tirón de la aplicación aplicación de ejemplo demuestra la vinculación de una cuenta de integración en iOS que es la aplicación Flip-compatibles. Puede utilizar esta aplicación para verificar cómo responder a un enlace universal App Flip entrante desde las aplicaciones móviles de Google.

La aplicación de ejemplo está preconfigurado para integrarse con la herramienta de prueba del tirón de aplicaciones para iOS , que se puede utilizar para verificar la integración de su aplicación iOS con App tirón antes Configurar Cuenta vinculación con Google. Esta aplicación simula el enlace universal activado por las aplicaciones móviles de Google cuando App Flip está habilitado.

Cómo funciona

Los siguientes son los pasos de flujo que toman la aplicación de Google y su aplicación cuando se produce el cambio de aplicación:

  1. La aplicación de Google intenta abrir el enlace universal de su aplicación. Puede abrir su aplicación si está instalada en el dispositivo del usuario y asociada con el enlace universal. Ver apoyo universal Enlaces para más detalles.

  2. Sus aplicaciones comprueba que el client_id y redirect_uri parámetro codificado en la URL entrante coincide con el enlace de Google universal de espera.

  3. Su aplicación solicita un código de autorización de su servidor OAuth2. Al final de este flujo, su aplicación devuelve un código de autorización o un error a la aplicación de Google. Para hacer esto, abre el enlace universal de Google con parámetros agregados para el código de autorización o error.

  4. La aplicación de Google maneja el enlace universal entrante de Google y continúa con el resto del flujo. Si se proporciona un código de autorización, la vinculación se completa de inmediato. El intercambio de tokens ocurre de servidor a servidor, de la misma manera que lo hace en el flujo de vinculación OAuth basado en navegador. Si se devuelve un código de error, el flujo de vinculación continúa con las opciones alternativas.

Modifica tu aplicación de iOS para que sea compatible con App Flip

Para admitir App Flip, realice los siguientes cambios de código en su aplicación iOS:

  1. Manejar NSUserActivityTypeBrowsingWeb en su aplicación Delegado.
  2. Captura redirect_uri y state parámetros de la URL para su uso posterior.
  3. Comprobar que redirect_uri partidos este formato:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. Verifique que la ID del cliente coincida con el valor esperado. Utilice el siguiente ejemplo de código:

    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. Tras la autorización exitosa, llame al URI de redireccionamiento con el código de autorización. Utilice el siguiente ejemplo de código:

    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 se produjo un error, adjunte un resultado de error al URI de redireccionamiento. Utilice el siguiente ejemplo de código:

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

Cuando la aplicación de Google lo abre, el enlace universal de su aplicación incluye los siguientes parámetros de consulta:

  • client_id ( String ): Google client_id que está registrada bajo su aplicación.
  • scope ( List of String ): la lista A de ámbitos separados por espacios solicitados.
  • state ( String ): Un nonce utilizado por Google para verificar que el resultado autorización es en respuesta a la petición de salida de Google.
  • redirect_uri ( String ): enlace universal de Google. El URI "voltear" para abrir la aplicación de Google y pasar los resultados.

Parámetros utilizados cuando el resultado de la autorización se devuelve correctamente:

  • code ( String ): El valor del código de autorización, si está disponible.
  • state ( String ): El valor exacto recibida desde el enlace universales entrante.

Parámetros utilizados cuando el resultado de la autorización se devuelve sin éxito:

  • error ( String ), con los siguientes valores:

    • cancelled : Un error recuperable. La aplicación de Google intentará vincular la cuenta utilizando la URL de autorización. Algunos ejemplos son que el usuario no puede iniciar sesión, un dispositivo que está fuera de línea o que se agota el tiempo de espera de la conexión.
    • unrecoverable : un error irrecuperable. Por ejemplo, el usuario intenta vincularse con una cuenta deshabilitada. La aplicación de Google abortará la vinculación de la cuenta.
    • invalid_request : La solicitud de parámetros no son válidos o no. Este es un error recuperable. La aplicación de Google intentará vincular la cuenta utilizando la URL de autorización.
    • access_denied : El usuario rechaza la solicitud de consentimiento. Este es un error no recuperable; la aplicación de Google cancela la vinculación.
  • error_description ( String , opcional): Un mensaje de error fácil de usar.

Para todos los tipos de error, debe devolver los datos de respuesta a la especificada REDIRECT_URI para asegurar el repliegue apropiado se trigerred.

Modifique su punto final de autorización para admitir App Flip

Configure su plataforma para aceptar solicitudes utilizando las URL de redireccionamiento de App Flip de Google:

  • Página principal de Google aplicación
    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 Asistente aplicación
    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
    

Compruebe que client_id y la dirección URL especificada por el redirect_uri parámetros coinciden con los valores esperados cuando se recibe una petición. si falla la verificación del cliente, devolver el error invalid_request a la redirect_uri .