Para verificar os números de telefone automaticamente, implemente 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 de telefone é responsável por três tarefas:
- Criar uma mensagem de verificação que inclua um código único e tenha o formato esperado pela API SMS Retriever do lado do cliente.
- Enviar a mensagem de verificação ao dispositivo do usuário
- Verificar o código único quando ele for enviado de volta ao servidor e concluir as tarefas pós-verificação exigidas pelo back-end
Você decide como o aplicativo interage com o servidor. 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 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 você vai enviar ao dispositivo do usuário. Essa mensagem precisa:
- ter no máximo 140 bytes;
- Conter 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 o que você quiser. É útil criar uma mensagem da qual você possa extrair facilmente o código de uso único mais tarde. Por exemplo, uma mensagem de verificação válida pode ter a seguinte aparência:
Your ExampleApp code is: 123ABC78FA+9qCX9VSu
Como gerar um código único
Você pode implementar códigos únicos de várias maneiras, desde que não seja possível adivinhá-los e vinculá-los a um usuário ou número de telefone quando o app cliente os enviar de volta ao servidor. Facilite a digitação de códigos para acomodar quaisquer situações em que os usuários precisem digitar manualmente o código.
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, você pode ter uma tabela PendingVerifys como esta:
ID | Usuário | Validade |
---|---|---|
123456789... | 1234 | 14-3-2017 1:59 |
Você pode usar o ID codificado em base32 como um código único.
Como 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 seu app. Essa string é composta pelo nome do pacote e pelo certificado de chave pública do app. Para gerar a string de hash, faça o seguinte:
Se você usa a Assinatura de apps do Google Play, faça o download do seu 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 repositório de chaves temporário:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
Se você assinar seus APKs diretamente, pule esta etapa.
Consiga o certificado de assinatura do app, seja o importado acima ou o usado para assinar os APKs diretamente, como uma string hexadecimal em letras minúsculas.
Por exemplo, para conseguir 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ê assinar seus APKs diretamente, especifique o keystore de produção e o alias do certificado.
Se você criou um keystore temporário, exclua-o.
Anexe a string hexadecimal ao nome do pacote do app, separada por um único espaço.
Calcule a soma de SHA-256 da string combinada. Remova qualquer espaço em branco no início ou no fim da string antes de calcular a soma de SHA-256.
Codifique o valor binário da soma SHA-256 em Base64. Talvez seja necessário decodificar a soma de SHA-256 do formato de saída primeiro.
A string de hash do seu app são os primeiros 11 caracteres do hash codificado em base64.
O comando a seguir calcula a string de hash do 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 app com a classe AppSignatureHelper no app de exemplo de recuperação de SMS. No entanto, se você usar a classe auxiliar, remova-a do app depois de receber a string de hash. Não use strings de hash calculadas dinamicamente no cliente nas suas mensagens de verificação.
2. Enviar a mensagem de verificação por SMS
Depois de construir a mensagem de verificação, envie-a 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 para desenvolvedores do Twilio.
Quando o dispositivo do usuário recebe essa mensagem, ela é direcionada ao seu app. O app extrai o código único e o envia de volta ao seu 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 geralmente tem um segundo endpoint usado para receber códigos únicos de apps clientes. Quando o servidor receber um código único do app nesse endpoint, faça o seguinte:
- Verifique se o código de uso único é válido e não expirou.
- Anote 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 do código único ou, de alguma outra 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 de uso único do banco de dados, a verificação está concluída.