Telefon numaralarını otomatik olarak doğrulamak için doğrulama akışının hem istemci hem de sunucu bölümlerini uygulamanız gerekir. Bu dokümanda, sunucu bölümünün nasıl uygulanacağı açıklanmaktadır.
Telefon doğrulama sunucusu üç görevden sorumludur:
- Tek kullanımlık kod içeren ve istemci taraflı SMS Retriever API'sinin beklediği biçime sahip bir doğrulama mesajı oluşturma
- Doğrulama mesajı kullanıcının cihazına gönderiliyor
- Sunucuya gönderildiğinde gönderilen tek seferlik kodu doğrulama ve arka ucunuzun gerektirdiği tüm doğrulama sonrası görevleri tamamlama
Uygulamanızın sunucuyla nasıl etkileşim kuracağına siz karar verirsiniz. Yaygın bir yaklaşım, iki uç noktaya sahip bir REST API'nin açığa çıkarılmasıdır: Belirli bir telefon numarasını doğrulamak için istek alan ve SMS doğrulama mesajları gönderen ikinci bir uç nokta ve uygulamanızdan tek seferlik kodlar alan ikinci bir uç nokta.
1. Doğrulama mesajı oluşturun
Sunucunuz bir telefon numarasını doğrulama isteği aldığında, önce kullanıcının cihazına göndereceğiniz doğrulama mesajını oluşturun. Bu mesaj:
- 140 bayttan uzun olmamalıdır
- İstemcinin doğrulama akışını tamamlamak için sunucunuza geri gönderdiği tek seferlik bir kod içerir (Tek seferlik kod oluşturma bölümüne bakın).
- Uygulamanızı tanımlayan 11 karakterlik karma dizeyi ekleyin (Uygulamanızın karma oluşturma dizesini oluşturma bölümüne bakın)
Aksi takdirde, doğrulama mesajının içeriği istediğiniz gibi olabilir. Daha sonra tek seferlik kodu çıkarabileceğiniz bir mesaj oluşturmak faydalıdır. Örneğin, geçerli bir doğrulama mesajı aşağıdaki gibi görünebilir:
Your ExampleApp code is: 123ABC78
FA+9qCX9VSu
Tek kullanımlık kod oluşturma
Kodlar öngörülemediği ve istemci uygulaması sunucuya geri gönderdiğinde kodları bir kullanıcı veya telefon numarasına bağlayabildiğiniz sürece tek kullanımlık kodları birçok şekilde uygulayabilirsiniz. Kullanıcıların kodu manuel olarak yazmasını gerektiren durumlara uyum sağlamak için kodları yazmayı kolaylaştırmalısınız.
Tek kullanımlık kodları uygulamanın bir yolu, veritabanı tablosunda anahtar olarak kullandığınız rastgele sayılar oluşturmaktır. Örneğin, aşağıdaki gibi bir PendingVerifications tablonuz olabilir:
|Kimlik||Kullanıcı||Son Geçerlilik Tarihi|
|123456789...||1234||14.3.2017 1:59|
base32 kodlu kimliği tek seferlik kod olarak kullanabilirsiniz.
Uygulamanızın karma dizesini oluşturma
Google Play Hizmetleri, uygulamanıza gönderilecek doğrulama mesajlarını belirlemek için karma dizesini kullanır. Karma dizesi, uygulamanızın paket adından ve uygulamanızın ortak anahtar sertifikasından oluşur. Karma dizesini oluşturmak için:
Google Play'den uygulama imzalama kullanıyorsanız Google Play Console'un Uygulama imzalama bölümünden uygulama imzalama sertifikanızı (
deployment_cert.der) indirin.
Ardından, uygulama imzalama sertifikasını geçici bir anahtar deposuna aktarın:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
APK'larınızı doğrudan imzalıyorsanız bu adımı atlayın.
Uygulama imzalama sertifikanızı (yukarıda içe aktardığınız veya APK'larınızı doğrudan imzalamak için kullandığınız sertifika) küçük harfli onaltılık dize olarak alın.
Örneğin, yukarıda oluşturulan geçici anahtar deposundan on altılık dizeyi almak için aşağıdaki komutu yazın:
keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
APK'larınızı doğrudan imzalarsanız üretim anahtar deponuzu ve sertifika takma adınızı belirtin.
Geçici bir anahtar deposu oluşturduysanız silin.
Onaltılık dizeyi uygulamanızın paket adına tek bir boşlukla ayırarak ekleyin.
Birleştirilen dizenin SHA-256 toplamını hesaplayın. SHA-256 toplamını hesaplamadan önce dizedeki baştaki veya sondaki beyaz boşluğu kaldırdığınızdan emin olun.
SHA-256 toplamının ikili değerini Base64 kodlaması. Önce SHA-256 toplamının kodunu, çıkış biçiminden çözmeniz gerekebilir.
Uygulamanızın karma dizesi, base64 kodlu karmanın ilk 11 karakteridir.
Aşağıdaki komut, uygulamanızın üretim anahtar deposundan karma dizesini hesaplar:
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
Alternatif olarak, SMS alıcı örnek uygulamasından AppSignatureHelper sınıfını kullanarak uygulamanızın karma dizesini alabilirsiniz. Ancak yardımcı sınıfı kullanıyorsanız karma dizesini aldıktan sonra uygulamanızdan kaldırmanız gerekir. Doğrulama mesajlarınızda istemcide dinamik olarak hesaplanan karma dizeleri kullanmayın.
2. Doğrulama mesajını SMS ile gönder
Doğrulama mesajını oluşturduktan sonra, herhangi bir SMS sistemi kullanarak mesajı kullanıcının telefon numarasına gönderin.
Örneğin, Twilio'nun geliştirici sitesindeki Twilio SMS kullanarak uygulama doğrulama sayfasına göz atın.
Kullanıcının cihazı bu mesajı aldığında mesaj uygulamanıza yönlendirilir. Uygulamanız tek seferlik kodu çıkarıp doğrulama işlemini tamamlamak için tekrar sunucunuza gönderir.
3. İade edildiğinde tek kullanımlık kodu doğrulayın
Telefon numarası doğrulama sunucusu genellikle istemci uygulamalarından tek seferlik kodlar geri almak için kullandığı ikinci bir uç noktaya sahiptir. Sunucunuz bu uç noktasından uygulamanızdan tek seferlik bir kod aldığında aşağıdakileri yapın:
- Tek kullanımlık kodun geçerli ve geçerlilik süresi dolmamış olduğunu doğrulayın.
- Tek kullanımlık koda bağlanmış kullanıcının telefon numarası doğrulamasını tamamladığını kaydedin.
- Tek seferlik kodun veritabanı kaydını kaldırın veya başka bir şekilde aynı kodun tekrar kullanılamayacağından emin olun.
Kullanıcının doğrulama durumunu kaydedip tek seferlik kodu veritabanınızdan kaldırdığınızda doğrulama tamamlandı.