El vínculo de cambio de app basado en OAuth (cambio de app) abre tu app para iOS desde una app de Google. para ayudar al usuario de la app de Google a vincular su cuenta con mayor facilidad. Debes hacer cambios menores en el código de tu app para iOS para implementar esta función.
En este documento, aprenderás a modificar tu app para iOS para que sea compatible con App Flip.
Prueba la muestra
La app de ejemplo Cambio de app demuestra una integración de vinculación de cuentas en iOS que es compatible con App Flip. Puedes usar esta app para verificar cómo responder a un cambio universal de app entrante de Google para dispositivos móviles.
La app de ejemplo está preconfigurada para integrarse con la herramienta de prueba de cambio de app para iOS, que puedes usar para verificar la integración de tu app de iOS con el cambio de app antes que configures la vinculación de cuentas con Google. Esta app simula el vínculo universal que las apps de Google para dispositivos móviles activan cuando se habilita el cambio de app.
Cómo funciona
A continuación, se muestran los pasos de flujo que siguen la app de Google y tu app cuando El cambio de app ocurre:
La app de Google intenta abrir el vínculo universal de tu app. Puede abre tu app si está instalada en el dispositivo del usuario y asociada con el vínculo universal. Para obtener más información, consulta Compatibilidad con vínculos universales.
Tu app verifica que los parámetros
client_id
yredirect_uri
estén codificados. en la URL entrante coincida con el vínculo universal de Google esperado.Tu app solicita un código de autorización de tu servidor OAuth2. Al final de este flujo, la aplicación devuelve un código de autorización o un error al la app de Google. Para ello, abre el vínculo universal de Google con los parámetros del código de autorización o el error.
La app de Google administra el vínculo universal de Google entrante y continúa con el resto del flujo. Si se proporciona un código de autorización, la vinculación completar de inmediato. El intercambio de tokens se realiza servidor a servidor, el mismo como lo hace en el flujo de vinculación de OAuth basado en el navegador. Si se muestra un código de error que se muestra, el flujo de vinculación continúa con las opciones alternativas.
Cómo modificar tu app para iOS para que admita el cambio de app
Para admitir el cambio de app, realiza los siguientes cambios de código en tu app para iOS:
- Controla
NSUserActivityTypeBrowsingWeb
en el delegado de la app. - Captura los parámetros
redirect_uri
ystate
de la URL para usarlos más adelante. - Verifica que
redirect_uri
coincida con este formato:https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
Verifica que el ID de cliente coincida con el valor esperado. Usa los siguientes muestra 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 } }
Cuando la autorización se haya realizado correctamente, llama al URI de redireccionamiento con la autorización código. Usa la siguiente muestra 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) } }
Si se produjo un error, adjunta el resultado del error al URI de redireccionamiento. Usa la siguiente muestra 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) } }
Parámetros de consulta para el vínculo universal de tu app
Cuando se abre con la app de Google, el vínculo universal de la app incluye lo siguiente parámetros de consulta:
client_id
(String
): Es elclient_id
de Google registrado en tu app.scope
(List of String
): Una lista de permisos separados por espacios solicitados.state
(String
): Un nonce que usa Google para verificar que la autorización resultado es en respuesta a una solicitud saliente de Google.redirect_uri
(String
): El vínculo universal de Google. El "volteo" URI para abrir la app de Google y pasar los resultados.
Parámetros de consulta para el vínculo universal de Google
Parámetros que se usan cuando el resultado de la autorización se muestra correctamente:
code
(String
): Es el valor del código de autorización, si está disponible.state
(String
): Es el valor exacto recibido del vínculo universal entrante.
Parámetros que se usan cuando el resultado de la autorización se muestra sin éxito:
error
(String
), con los siguientes valores:cancelled
: Es un error recuperable. La app de Google intentará acceder a la cuenta la vinculación con la URL de autorización. Algunos ejemplos son cuando el usuario para acceder, si un dispositivo se queda sin conexión o se agota el tiempo de espera de la conexión.unrecoverable
: Es un error irrecuperable. Por ejemplo, el usuario intenta vincularse con una cuenta inhabilitada.La app de Google anulará la vinculación de cuentas.invalid_request
: Los parámetros de la solicitud no son válidos o no se encuentran. Este es un error recuperable. La app de Google intentará vincular las cuentas con la URL de autorización.access_denied
: El usuario rechaza la solicitud de consentimiento. Este es un error irrecuperable. Google app anula la vinculación.
error_description
(String
, opcional): Es un mensaje de error fácil de usar.
Para todos los tipos de errores, debes devolver los datos de respuesta al valor especificado
REDIRECT_URI
para garantizar que se active el resguardo adecuado.
Modifica tu extremo de autorización para admitir el cambio de app
Configura tu plataforma para que acepte solicitudes usando las URLs de redireccionamiento de cambio de app de Google:
- App de 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
- App del Asistente de 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
Verifica que client_id
y la URL que especifica el parámetro redirect_uri
coinciden con los valores esperados
cuando se recibe una solicitud. si la verificación del cliente
falla, muestra el error invalid_request
a redirect_uri
.