Realizar a verificação por SMS em um servidor

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:

  1. 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.
  2. Enviar a mensagem de verificação ao dispositivo do usuário
  3. 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:

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: 123ABC78

FA+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:

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

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

  3. Se você criou um keystore temporário, exclua-o.

  4. Anexe a string hexadecimal ao nome do pacote do app, separada por um único espaço.

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

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

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

  1. Verifique se o código de uso único é válido e não expirou.
  2. Anote que o usuário vinculado ao código único concluiu a verificação do número de telefone.
  3. 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.