Per verificare automaticamente i numeri di telefono, è necessario implementare sia la parte client che quella server del flusso di verifica. Questo documento descrive come implementare la parte server.
Il server di verifica del telefono è responsabile di tre attività:
- Creazione di un messaggio di verifica che includa un codice monouso e abbia il formato previsto dall'API SMS Retriever lato client
- Invio del messaggio di verifica a al dispositivo dell'utente
- Verifica del codice monouso quando viene rispedito al server e completamento di tutte le attività di post-verifica richieste dal tuo backend
Le specifiche di come la tua app interagisce con il server dipende da te. Un approccio comune consiste nell'esposizione di un'API REST con due endpoint: uno che riceve richieste per verificare un determinato numero di telefono e invia i messaggi di verifica SMS e un secondo endpoint che riceve codici monouso dalla tua app.
1. Crea un messaggio di verifica
Quando il tuo server riceve una richiesta per verificare un numero di telefono, crea prima il messaggio di verifica che invierai al dispositivo dell'utente. Questo messaggio deve:
- Non essere più lungo di 140 byte
- Contenere un codice monouso che il client invia al server per completare il flusso di verifica (vedere Generazione di un codice monouso )
- Includi una stringa hash di 11 caratteri che identifica la tua app (vedi Calcolo della stringa hash della tua app )
Altrimenti, il contenuto del messaggio di verifica può essere quello che scegli. È utile creare un messaggio da cui è possibile estrarre facilmente il codice monouso in un secondo momento. Ad esempio, un messaggio di verifica valido potrebbe essere simile al seguente:
Your ExampleApp code is: 123ABC78FA+9qCX9VSu
Generazione di un codice monouso
Puoi implementare codici monouso in molti modi, a condizione che i codici non siano indovinabili e puoi collegare i codici a un utente o numero di telefono quando l'app client li invia al tuo server. È necessario rendere i codici facili da digitare, per adattarsi a qualsiasi situazione che potrebbe richiedere agli utenti di digitare manualmente il codice.
Un modo per implementare i codici monouso è generare numeri casuali, da utilizzare come chiavi in una tabella di database. Ad esempio, potresti avere una tabella PendingVerifications come la seguente:
ID | Utente | Scadenza |
---|---|---|
123456789 ... | 1234 | 2017-3-14 1:59 |
È possibile utilizzare l'ID con codifica base32 come codice monouso.
Calcolo della stringa hash della tua app
Google Play Services utilizza la stringa hash per determinare quali messaggi di verifica inviare alla tua app. La stringa hash è composta dal nome del pacchetto della tua app e dal certificato della chiave pubblica della tua app. Per generare la stringa hash:
Se utilizzi la firma dell'app di Google Play , scarica il certificato di firma dell'app (
deployment_cert.der
) dalla sezione Firma dell'app della console di Google Play .Quindi, importa il certificato di firma dell'app in un archivio chiavi temporaneo:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
Se firmi direttamente i tuoi APK, salta questo passaggio.
Ottieni il certificato di firma dell'app, quello che hai importato sopra o quello che utilizzi per firmare direttamente i tuoi APK, come stringa esadecimale minuscola.
Ad esempio, per ottenere la stringa esadecimale dal keystore temporaneo creato sopra, digita il seguente comando:
keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
Se firmi direttamente i tuoi APK, specifica il keystore di produzione e l'alias del certificato.
Se hai creato un keystore temporaneo, eliminalo.
Aggiungi la stringa esadecimale al nome del pacchetto della tua app, separata da un singolo spazio.
Calcola la somma SHA-256 della stringa combinata. Assicurati di rimuovere qualsiasi spazio bianco iniziale o finale dalla stringa prima di calcolare la somma SHA-256.
Codifica in base64 il valore binario della somma SHA-256. Potrebbe essere necessario decodificare prima la somma SHA-256 dal formato di output.
La stringa hash della tua app è composta dai primi 11 caratteri dell'hash con codifica base64.
Il comando seguente calcola la stringa hash dal keystore di produzione della tua 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
In alternativa, puoi ottenere la stringa hash della tua app con la classe AppSignatureHelper dall'app di esempio del retriever SMS. Tuttavia, se usi la classe helper, assicurati di rimuoverla dalla tua app dopo aver ottenuto la stringa hash. Non utilizzare stringhe hash calcolate dinamicamente sul client nei messaggi di verifica.
2. Invia il messaggio di verifica tramite SMS
Dopo aver creato il messaggio di verifica, invia il messaggio al numero di telefono dell'utente utilizzando qualsiasi sistema SMS.
Ad esempio, vedere Verifica dell'app tramite Twilio SMS sul sito per sviluppatori di Twilio.
Quando il dispositivo dell'utente riceve questo messaggio, il messaggio viene indirizzato alla tua app. La tua app estrae il codice monouso e lo invia al tuo server per completare il processo di verifica.
3. Verificare il codice monouso quando viene restituito
Un server di verifica del numero di telefono in genere ha un secondo endpoint che utilizza per ricevere i codici monouso dalle app client. Quando il tuo server riceve un codice monouso dalla tua app a questo endpoint, procedi come segue:
- Verificare che il codice monouso sia valido e non sia scaduto.
- Registra che l'utente collegato al codice monouso ha completato la verifica del numero di telefono.
- Rimuovere il record del database del codice monouso o in qualche altro modo assicurarsi che lo stesso codice non possa essere riutilizzato.
Quando registri lo stato di verifica dell'utente e rimuovi il codice monouso dal database, la verifica è completa.