A vinculação do App Flip com base em OAuth (App Flip) abre seu aplicativo iOS a partir de um aplicativo do Google para ajudar o usuário do aplicativo do Google a vincular sua conta com mais facilidade. Você precisa fazer pequenas alterações no código do seu aplicativo iOS para implementar este recurso.
Neste documento, você aprende como modificar seu aplicativo iOS para suportar o App Flip.
Experimente a amostra
A Flip App aplicativo de exemplo demonstra uma conta ligando integração no iOS que é App flip-compatível. Você pode usar este aplicativo para verificar como responder a um link universal do App Flip recebido de aplicativos móveis do Google.
O aplicativo de amostra é pré-configurado para se integrar com a App Virar ferramenta de teste para iOS , que você pode usar para verificar a integração do seu aplicativo iOS com App Virar antes de conta do ligando com o Google. Este aplicativo simula o link universal acionado por aplicativos móveis do Google quando o App Flip está ativado.
Como funciona
A seguir estão as etapas do fluxo que o Google app e seu aplicativo realizam quando ocorre o App Flip:
O Google app tenta abrir o link universal do seu app. É capaz de abrir seu aplicativo se estiver instalado no dispositivo do usuário e associado ao link universal. Veja Apoio Universal links para mais detalhes.
Seus cheques de aplicativos que o
client_id
eredirect_uri
parâmetro codificado na URL de entrada corresponde a ligação esperado Google universal.Seu aplicativo solicita um código de autorização de seu servidor OAuth2. No final deste fluxo, seu aplicativo retorna um código de autorização ou um erro para o Google app. Para fazer isso, ele abre o link universal do Google com parâmetros anexados para o código de autorização ou erro.
O Google app lida com o link universal de entrada do Google e continua com o resto do fluxo. Se um código de autorização for fornecido, o link será concluído imediatamente. A troca de tokens ocorre de servidor para servidor, da mesma forma que acontece no fluxo de vinculação OAuth baseado em navegador. Se um código de erro for retornado, o fluxo de vinculação continua com as opções alternativas.
Modifique seu aplicativo iOS para suportar App Flip
Para oferecer suporte ao App Flip, faça as seguintes alterações de código em seu aplicativo iOS:
- Lidar com
NSUserActivityTypeBrowsingWeb
em sua App delegado. - Captura
redirect_uri
estate
parâmetros do URL para usar mais tarde. - Verifique se
redirect_uri
partidas neste formato:https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
Verifique se o ID do cliente corresponde ao valor esperado. Use o seguinte exemplo 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 } }
Após a autorização bem-sucedida, chame o URI de redirecionamento com o código de autorização. Use o seguinte exemplo 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) } }
Se ocorrer um erro, anexe um resultado de erro ao URI de redirecionamento. Use o seguinte exemplo 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 o link universal do seu aplicativo
Quando aberto pelo Google app, o link universal do seu aplicativo inclui os seguintes parâmetros de consulta:
-
client_id
(String
): Googleclient_id
que está registrado sob sua aplicação. -
scope
(List of String
): Uma lista de escopos separados por espaços solicitados. -
state
(String
): Um nonce usado pelo Google para verificar se o resultado autorização é em resposta ao pedido de saída do Google. -
redirect_uri
(String
): ligação universal do Google. O URI "flip" para abrir o Google app e passar os resultados.
Parâmetros de consulta para o link universal do Google
Parâmetros usados quando o resultado da autorização é retornado com sucesso:
-
code
(String
): O valor do código de autorização, se disponível. -
state
(String
): O valor exato recebido pela ligação universal de entrada.
Parâmetros usados quando o resultado da autorização é retornado sem sucesso:
error
(String
), com os seguintes valores:-
cancelled
: um erro recuperável. O Google app tentará vincular contas usando o URL de autorização. Alguns exemplos são falha do usuário ao fazer login, dispositivo off-line ou tempo limite de conexão esgotado. -
unrecoverable
: um erro irrecuperável. Por exemplo, o usuário tenta se vincular a uma conta desativada. O Google app abortará a vinculação de contas. -
invalid_request
: O pedido de parâmetros são inválidos ou em falta. Este é um erro recuperável. O Google app tentará vincular contas usando o URL de autorização. -
access_denied
: O usuário rejeita a solicitação de consentimento. Este é um erro irrecuperável; o Google app aborta a vinculação.
-
error_description
(String
, opcional): Uma mensagem de erro user-friendly.
Para todos os tipos de erro, você deve retornar os dados de resposta ao especificado REDIRECT_URI
para garantir o retorno adequado é trigerred.
Modifique o seu endpoint de autorização para oferecer suporte ao App Flip
Configure sua plataforma para aceitar solicitações usando URLs de redirecionamento do Google App Flip:
- Página inicial do Google App
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 Assistant aplicativo
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
Verifique se client_id
ea URL especificado pelo redirect_uri
parâmetro coincidir com os valores esperados quando um pedido é recebido. se a verificação do cliente falhar, retornar o erro invalid_request
ao redirect_uri
.