Aby umożliwić automatyczną weryfikację numerów telefonów, musisz wdrożyć w procesie weryfikacji zarówno klienta, jak i serwera. W tym dokumencie opisujemy, jak wdrożyć część serwera.
Serwer weryfikacji telefonicznej odpowiada za 3 zadania:
- utworzenie wiadomości weryfikacyjnej, która zawiera jednorazowy kod i ma oczekiwany format po stronie klienta dla programu do pobierania SMS-ów;
- Wysyłam wiadomość weryfikacyjną na urządzenie użytkownika.
- Weryfikowanie kodu jednorazowego po wysłaniu go z powrotem do serwera i wykonaniu wszystkich zadań po weryfikacji, których wymaga Twój backend
Sposób interakcji aplikacji z serwerem zależy tylko od Ciebie. Typowym podejściem jest udostępnianie interfejsu API REST z 2 punktami końcowymi: jeden, który otrzymuje żądania weryfikacji określonego numeru telefonu i wysyłające wiadomości SMS, oraz drugi punkt końcowy, który otrzymuje jednorazowe kody z aplikacji.
1. Tworzenie wiadomości weryfikacyjnej
Gdy serwer odbiera prośbę o weryfikację numeru telefonu, najpierw utwórz wiadomość weryfikacyjną, którą wyślesz na urządzenie użytkownika. Ta wiadomość musi:
- rozmiar pliku nie może przekraczać 140 bajtów.
- zawierać jednorazowy kod, który klient wysyła z powrotem na serwer, aby ukończyć proces weryfikacji (patrz Generowanie kodu jednorazowego);
- Dołącz 11-znakowy ciąg identyfikujący aplikację (zobacz Przetwarzanie ciągu znaków w aplikacji).
W przeciwnym razie treść wiadomości weryfikacyjnej może być dowolna. Warto utworzyć wiadomość, z której będzie można później łatwo wyodrębnić kod jednorazowy. Prawidłowa wiadomość weryfikacyjna może na przykład wyglądać tak:
Your ExampleApp code is: 123ABC78FA+9qCX9VSu
Generowanie kodu jednorazowego
Kody jednorazowe możesz zaimplementować na wiele sposobów, o ile są niezrozumiałe i możesz połączyć je z użytkownikiem lub numerem telefonu, gdy aplikacja kliencka wysyła je z powrotem do Twojego serwera. Kody powinny być łatwe do wpisania, aby uwzględnić sytuacje, w których użytkownik musi wpisać je ręcznie.
Jednym ze sposobów wdrożenia kodów jednorazowych jest wygenerowanie losowych liczb, które są używane jako klucze w tabeli bazy danych. Możesz na przykład mieć tabelę PendingWeryfikacjas, która wygląda tak:
Identyfikator | Użytkownik | Wygaśnięcie |
---|---|---|
123456789... | 1234 | 14.03.2017 1:59 |
Identyfikatora zakodowanego w standardzie base32 możesz używać jako kodu jednorazowego.
Obliczam ciąg skrótu aplikacji
Usługi Google Play używają ciągu skrótu, aby określić, które wiadomości weryfikacyjne mają być wysyłane do aplikacji. Ciąg tekstowy składa się z nazwy pakietu aplikacji i certyfikatu klucza publicznego aplikacji. Aby wygenerować ciąg skrótu:
Jeśli korzystasz z podpisywania aplikacji przez Google Play, pobierz certyfikat podpisywania aplikacji (
deployment_cert.der
) z sekcji Podpisywanie aplikacji w Konsoli Google Play.Następnie zaimportuj certyfikat podpisywania aplikacji do tymczasowego magazynu kluczy:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
Jeśli podpisujesz pliki APK bezpośrednio, pomiń ten krok.
Uzyskaj certyfikat podpisywania aplikacji (ten, który został zaimportowany powyżej, lub ten, którego używasz do bezpośredniego podpisywania plików APK) jako ciąg szesnastkowy zapisany małymi literami.
Aby na przykład pobrać ciąg szesnastkowy z tymczasowego magazynu kluczy utworzonego powyżej, wpisz to polecenie:
keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
Jeśli podpisujesz pliki APK bezpośrednio, określ produkcyjny magazyn kluczy i alias certyfikatu.
Jeśli masz utworzony tymczasowy magazyn kluczy, usuń go.
Dołącz ciąg szesnastkowy do nazwy pakietu aplikacji rozdzielonych jednym spacją.
Oblicz sumę SHA-256 połączonego ciągu. Pamiętaj, aby przed obliczeniem sumy SHA-256 usunąć z ciągu znaków odstęp na początku lub na końcu.
Zakoduj wartość binarną sumy SHA-256 w formacie Base64. Czasami konieczne jest odkodowanie sumy SHA-256 z formatu wyjściowego.
Ciąg szyfrujący Twojej aplikacji to 11 pierwszych znaków zakodowanych w formacie base64.
To polecenie oblicza ciąg skrótu z produkcyjnego magazynu kluczy Twojej aplikacji:
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
Możesz też pobrać ciąg skrótu aplikacji z klasy AppSignatureHelper z przykładowej aplikacji do pobierania SMS-ów. Jeśli jednak używasz klasy pomocniczej, pamiętaj, aby usunąć ją z aplikacji po otrzymaniu ciągu skrótu. Nie używaj ciągu znaków ciągu tekstowego dynamicznie obliczonego w kliencie w komunikatach weryfikacyjnych.
2. Wyślij SMS-a weryfikacyjnego
Po utworzeniu wiadomości weryfikacyjnej wyślij ją na numer telefonu użytkownika za pomocą dowolnego systemu SMS.
Zobacz na przykład Weryfikacja aplikacji przy użyciu Twilio SMS w witrynie Twilio.
Gdy urządzenie otrzyma taką wiadomość, zostanie ona przekierowana do Twojej aplikacji. Aplikacja wyodrębnia jednorazowy kod i wyśle go na serwer, aby dokończyć proces weryfikacji.
3. Weryfikowanie kodu jednorazowego po jego zwróceniu
Serwer weryfikacji numeru telefonu zwykle ma drugi punkt końcowy, którego używa do odbierania jednorazowych kodów z aplikacji klienckich. Gdy serwer w tym punkcie końcowym otrzyma z aplikacji jednorazowy kod, wykonaj te czynności:
- Sprawdź, czy jednorazowy kod jest prawidłowy i nie stracił ważności.
- Zapisz, że użytkownik połączony z kodem jednorazowym przeprowadził weryfikację numeru telefonu.
- Usuń jednorazowy rekord bazy danych lub w inny sposób upewnij się, że tego samego kodu nie można użyć ponownie.
Gdy rejestrujesz stan weryfikacji użytkownika i usuwasz jednorazowy kod z bazy danych, weryfikacja jest zakończona.