Para verificar números de telefone automaticamente, é necessário implementar as partes do cliente e do servidor do fluxo de verificação. Neste documento, descrevemos como implementar a parte do servidor.
O servidor de verificação por telefone é responsável por três tarefas:
- Criação de uma mensagem de verificação que inclua um código único e tenha o formato esperado pela API SMS Retriever do lado do cliente
- Enviando a mensagem de verificação para o dispositivo do usuário
- Verificar o código único quando ele for enviado de volta ao servidor e concluir qualquer tarefa pós-verificação exigida pelo back-end
Os detalhes de como o app interage com o servidor são você quem decide. Uma abordagem comum é expor uma API REST com dois endpoints: um que recebe solicitações para verificar um determinado número de telefone e envia as mensagens de verificação por SMS e um segundo endpoint que recebe códigos únicos do seu app.
1. Criar uma mensagem de verificação
Quando o servidor receber uma solicitação para verificar um número de telefone, primeiro crie a mensagem de verificação que será enviada ao dispositivo do usuário. Essa mensagem precisa:
- não podem ter mais de 140 bytes;
- Inclua um código único que o cliente envia de volta ao seu servidor para concluir o fluxo de verificação. Consulte Como gerar um código único
- Inclua uma string de hash de 11 caracteres que identifique seu app. Consulte Como calcular a string de hash do seu app.
Caso contrário, o conteúdo da mensagem de verificação pode ser qualquer um que você escolher. É útil criar uma mensagem que você poderá usar facilmente para extrair o código único mais tarde. Por exemplo, uma mensagem de verificação válida pode ser assim:
Your ExampleApp code is: 123ABC78FA+9qCX9VSu
Como gerar um código único
Você pode implementar códigos únicos de várias maneiras, desde que os códigos não sejam adivinháveis e você possa vinculá-los a um usuário ou número de telefone quando o aplicativo cliente os enviar de volta ao seu servidor. Os códigos precisam ser fáceis de digitar, acomodando todas as situações em que os usuários precisam digitar o código manualmente.
Uma maneira de implementar códigos únicos é gerar números aleatórios, que você usa como chaves em uma tabela de banco de dados. Por exemplo, é possível ter uma tabela PendingVerifications como a seguinte:
ID | Usuário | Validade |
---|---|---|
123456789... | 1234 | 14-3-2017 1:59 |
Você pode usar o ID codificado em base32 como um código único.
Calcular a string de hash do seu app
O Google Play Services usa a string de hash para determinar quais mensagens de verificação serão enviadas ao app. A string de hash é composta pelo nome do pacote do app e pelo certificado de chave pública do app. Para gerar a string de hash:
Se você usa a Assinatura de apps do Google Play, faça o download do certificado de assinatura de apps (
deployment_cert.der
) na seção Assinatura de apps do Google Play Console.Em seguida, importe o certificado de assinatura de apps para um armazenamento de chaves temporário:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
Se você assinou os APKs diretamente, pule esta etapa.
Faça o download do certificado de assinatura de apps, ou seja, o que você importou acima ou o que você usou para assinar diretamente os APKs, como uma string hexadecimal menor.
Por exemplo, para acessar a string hexadecimal do keystore temporário criado acima, digite o seguinte comando:
keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
Se você assina seus APKs diretamente, especifique seu repositório de chaves de produção e alias de certificado.
Se você criou um keystore temporário, exclua-o.
Anexe a string hexadecimal ao nome do pacote do seu app, separada por um único espaço.
Calcule a soma de SHA-256 da string combinada. Remova qualquer espaço em branco à esquerda ou à direita da string antes de calcular a soma de SHA-256.
Codifique em Base64 o valor binário da soma de SHA-256. Talvez seja necessário decodificar a soma SHA-256 do formato de saída primeiro.
A string de hash do app é os primeiros 11 caracteres do hash codificado em base64.
O comando a seguir calcula a string de hash no keystore de produção do seu app:
keytool -exportcert -alias PlayDeploymentCert -keystore MyProductionKeys.keystore | xxd -p | tr -d "[:space:]" | echo -n com.example.myapp `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
Como alternativa, você pode receber a string de hash do seu app com a classe AppSignatureHelper do app de amostra de recuperação de SMS. No entanto, se você usa a classe auxiliar, remova-a do seu app depois de receber a string de hash. Não use strings de hash calculadas dinamicamente no cliente nas mensagens de verificação.
2. Enviar a mensagem de verificação por SMS
Depois de criar a mensagem de verificação, envie a mensagem para o número de telefone do usuário usando qualquer sistema SMS.
Por exemplo, consulte Verificação de apps usando o Twilio SMS no site do desenvolvedor do Twilio.
Quando o dispositivo do usuário receber essa mensagem, ela será direcionada ao seu app. O app vai extrair o código único e enviá-lo de volta ao servidor para concluir o processo de verificação.
3. Verificar o código único quando ele for retornado
Um servidor de verificação de número de telefone normalmente tem um segundo endpoint usado para receber códigos de uso único de apps clientes. Quando seu servidor receber um código único do seu app neste endpoint, faça o seguinte:
- Verifique se o código único é válido e não expirou.
- Registre que o usuário vinculado ao código único concluiu a verificação do número de telefone.
- Remova o registro do banco de dados de código único ou, de alguma forma, garanta que o mesmo código não possa ser usado novamente.
Quando você registra o status de verificação do usuário e remove o código único do seu banco de dados, a verificação é concluída.