Virar aplicativo para iOS

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:

  1. 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.

  2. Seus cheques de aplicativos que o client_id e redirect_uri parâmetro codificado na URL de entrada corresponde a ligação esperado Google universal.

  3. 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.

  4. 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:

  1. Lidar com NSUserActivityTypeBrowsingWeb em sua App delegado.
  2. Captura redirect_uri e state parâmetros do URL para usar mais tarde.
  3. 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
  4. 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
        }
    }
    
  5. 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)
        }
    }
    
  6. 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)
        }
    }
    

Quando aberto pelo Google app, o link universal do seu aplicativo inclui os seguintes parâmetros de consulta:

  • client_id ( String ): Google client_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 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 .