Implementasi verifikasi menggunakan OTP pada aplikasi sering digunakan. Sebelumnya android memiliki permission (SMS_RECEIVE and SMS_READ) untuk membaca SMS agar memudahkan si aplikasi membaca jika ada OTP yang masuk dan secara otomatis melakukan verifikasi. Namun sejak tahun 2019, android meningkatkan keamanannya dengan membatasi untuk mengakses permission SMS tersebut. Namun, android memberikan cara lain untuk dapat membaca OTP SMS berupa API dengan nama SMS Retriever API.
Untuk menggunakan SMS Retiever API ini kita bebas menggunakan provider mana saja, namun ada ketentuan pada isi SMS OTP tersebut seperti pada dokumentasi https://developers.google.com/identity/sms-retriever/verify
- Tidak lebih dariĀ 140 bytes
- Diawali prefix <#>
- Terdapat kode OTP
- Diakhiri dengan 11 karater hash yang mengidentifikasi bahwa itu adalah aplikasi kita
Untuk mendapatkan 11 karakter hash, kita memerlukan data keystore yang kita miliki, berupa :
- alias pada keystore
- path file keystore
- nama package
- password keystore
Untuk caranya, menurut dokumentasi dengan menjalankan :
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
namun script diatas tidak dapat berjalan dengan baik ketika saya mencoba, dan sejumlah user juga mengalaminya berdasarkan stackoverflow. Jadi salah satu cara yang berhasil dengan menggunakan script generate, yang ada di git yaitu sms retriever hash
Saya sendiri menggunakannya pada Mac, dan sebelum menjalankan untuk diubah dulu permission executenya :
chmod u+x sms_retriever_hash_v9.sh
Param atau perintah menjalankan seperti ini :
/sms_retriever_hash_v9.sh --package "nama.paket.saya" --keystore ~/Documents/release.keystore
maka selanjutnya menanyakan password keystore jika berhasil akan memberikan SMS retriever hash code yang akan kita masukkan ke dalam isi SMS OTP.