Ir para o conteúdo

Autenticação Google no Android

Visão geral

O backend continua sendo o dono do fluxo OAuth, mas o app Android usa o SDK nativo para gerar o id_token. Esse token é enviado ao servidor, que valida o audience contra os Client IDs confiáveis (web + Android) e cria os JWTs internos. O deep link que o app deseja usar é repassado na requisição e devolvido na resposta.

Configuração no Console do Google

  1. Acesse Credentials no Console do Google Cloud.
  2. Crie um OAuth Client ID do tipo Android associando o package e o digest SHA-256 da assinatura usada no app (debug ou release).
  3. Copie esse Client ID e defina a variável de ambiente GOOGLE_ANDROID_CLIENT_ID no backend (ou no .env de desenvolvimento).
  4. O backend aceita os auds configurados em GOOGLE_CLIENT_ID e GOOGLE_ANDROID_CLIENT_ID, liberando o id_token emitido pela SDK Android.

Fluxo dentro do app Android

  1. Use o Google Sign-In SDK para solicitar um ID Token (requestIdToken(yourWebClientId)), não apenas o code.
  2. Ao receber o id_token, monte uma requisição JSON que contenha:
    {
      "id_token": "<ID_TOKEN>",
      "redirect_url": "billings-ease://auth/oauth/callback/google"
    }
    
  3. O redirect_url é opcional, mas deve ser o deep link que o app quer abrir ao final do fluxo (e que também existe no handler mobile do backend).
  4. Faça um POST para https://{BACKEND_URL}/api/auth/oauth/mobile/google com o corpo acima.
  5. A resposta contém os tokens do sistema:
    {
      "token": "...",
      "refresh_token": "...",
      "redirect_url": "billings-ease://auth/oauth/callback/google"
    }
    
  6. Use os valores token e refresh_token como sessão no app e, se quiser, abra o redirect_url (deep link) para entregar o usuário ao fluxo normal.

Tratamento de erros

  • Se o token for inválido ou não for emitido para um client confiável, o backend retorna OAUTH_ERROR com status 500.
  • Dispare novas tentativas apenas se for um erro transitório; não repita casos de INVALID_CLIENT ou USER_INACTIVE.

Considerações adicionais

  • O Android nunca precisa do client_secret; o backend continua usando GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET para o fluxo web.
  • O deep link final pode ser diferente dependendo do ambiente (debug, release). Ajuste o redirect_url enviado para combinar com o que o app espera.