Untuk memverifikasi nomor telepon secara otomatis, Anda harus menerapkan kedua bagian server dari alur verifikasi. Dokumen ini menjelaskan cara menerapkan bagian klien di aplikasi Android.
Untuk memulai alur verifikasi nomor telepon di aplikasi Android, Anda harus mengirimkan nomor telepon ke server verifikasi dan panggil SMS Retriever API untuk memulai mendengarkan pesan SMS yang berisi kode sekali pakai untuk aplikasi Anda. Setelah Anda menerima pesan, Anda mengirim kode sekali sekali kembali ke server untuk menyelesaikan proses verifikasi.
Sebelum memulai
Untuk mempersiapkan aplikasi Anda, selesaikan langkah-langkah di bagian berikut ini.
Prasyarat aplikasi
Pastikan bahwa file build aplikasi Anda menggunakan nilai berikut:
- minSdkVersion 19 atau yang lebih tinggi
- CompileSdkVersion 28 atau yang lebih tinggi
Mengonfigurasi aplikasi Anda
Di file build.gradle level project, sertakan repositori Maven Google
dan repositori pusat Maven
di bagian buildscript
dan allprojects
:
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
Menambahkan dependensi layanan Google Play
untuk SMS Retriever API ke file build Gradle modul,
yang biasanya adalah app/build.gradle
:
dependencies {
implementation 'com.google.android.gms:play-services-auth:21.2.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:18.1.0'
}
1. Mendapatkan nomor telepon pengguna
Anda bisa mendapatkan nomor telepon pengguna dengan cara apa pun yang sesuai dengan . Sering kali, pengalaman pengguna terbaik adalah menggunakan pemilih petunjuk untuk meminta pengguna untuk memilih dari nomor telepon yang disimpan di perangkat dan dengan demikian menghindari mengetik nomor telepon secara manual. Untuk menggunakan pemilih petunjuk:
// Construct a request for phone numbers and show the picker
private void requestHint() {
HintRequest hintRequest = new HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build();
PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
apiClient, hintRequest);
startIntentSenderForResult(intent.getIntentSender(),
RESOLVE_HINT, null, 0, 0, 0);
}
// Obtain the phone number from the result
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESOLVE_HINT) {
if (resultCode == RESULT_OK) {
Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
// credential.getId(); <-- will need to process phone number string
}
}
}
2. Memulai SMS retriever
Jika Anda sudah siap untuk memverifikasi nomor telepon pengguna, dapatkan instance
SmsRetrieverClient
, panggil startSmsRetriever
, dan tambahkan keberhasilan serta
pemroses kegagalan ke tugas pengambilan SMS:
// Get an instance of SmsRetrieverClient, used to start listening for a matching
// SMS message.
SmsRetrieverClient client = SmsRetriever.getClient(this /* context */);
// Starts SmsRetriever, which waits for ONE matching SMS message until timeout
// (5 minutes). The matching SMS message will be sent via a Broadcast Intent with
// action SmsRetriever#SMS_RETRIEVED_ACTION.
Task<Void> task = client.startSmsRetriever();
// Listen for success/failure of the start Task. If in a background thread, this
// can be made blocking using Tasks.await(task, [timeout]);
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Successfully started retriever, expect broadcast intent
// ...
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Failed to start retriever, inspect Exception for more details
// ...
}
});
Tugas pengambilan SMS akan mendengarkan pesan SMS hingga lima menit yang berisi string unik yang mengidentifikasi aplikasi Anda.
3. Kirim nomor telepon ke server Anda
Setelah Anda mendapatkan nomor telepon pengguna dan mulai mendengarkan SMS kirim nomor telepon pengguna ke server verifikasi menggunakan (biasanya dengan permintaan HTTPS POST).
Server Anda membuat pesan verifikasi dan mengirimkannya melalui SMS ke ponsel yang Anda tentukan. Lihat Melakukan Verifikasi SMS di Server.
4. Menerima pesan verifikasi
Saat pesan verifikasi diterima di perangkat pengguna, layanan Play
secara eksplisit menyiarkan Intent SmsRetriever.SMS_RETRIEVED_ACTION
ke aplikasi Anda,
yang berisi teks pesan. Gunakan BroadcastReceiver
untuk menerima
pesan verifikasi ini.
Dalam pengendali onReceive
BroadcastReceiver
, dapatkan teks
pesan verifikasi (dan jika perlu alamat pengirim) dari
tambahan:
/**
* BroadcastReceiver to wait for SMS messages. This can be registered either
* in the AndroidManifest or at runtime. Should filter Intents on
* SmsRetriever.SMS_RETRIEVED_ACTION.
*/
public class MySMSBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);
switch(status.getStatusCode()) {
case CommonStatusCodes.SUCCESS:
// (Optional) Get SMS Sender address - only available in
// GMS version 24.20 onwards, else it will return null
String senderAddress = extras.getString(SmsRetriever.EXTRA_SMS_ORIGINATING_ADDRESS);
// Get SMS message contents
String message = extras.getString(SmsRetriever.EXTRA_SMS_MESSAGE);
// Extract one-time code from the message and complete verification
// by sending the code back to your server.
break;
case CommonStatusCodes.TIMEOUT:
// Waiting for SMS timed out (5 minutes)
// Handle the error ...
break;
}
}
}
}
Daftarkan BroadcastReceiver
ini dengan filter intent
com.google.android.gms.auth.api.phone.SMS_RETRIEVED
(nilai
konstanta SmsRetriever.SMS_RETRIEVED_ACTION
) dan izin
com.google.android.gms.auth.api.phone.permission.SEND
(nilai
SmsRetriever.SEND_PERMISSION
) di AndroidManifest.xml
aplikasi Anda
seperti dalam contoh berikut, atau secara dinamis menggunakan Context.registerReceiver
.
<receiver android:name=".MySMSBroadcastReceiver" android:exported="true"
android:permission="com.google.android.gms.auth.api.phone.permission.SEND">
<intent-filter>
<action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
</intent-filter>
</receiver>
5. Kirim kode sekali pakai dari pesan verifikasi ke server Anda
Sekarang setelah Anda memiliki teks pesan verifikasi, gunakan ekspresi reguler atau logika lain untuk mendapatkan kode sekali pakai dari pesan. Format kode sekali pakai tergantung pada bagaimana Anda menerapkannya di server Anda.
Terakhir, kirim kode sekali pakai ke server Anda melalui koneksi aman. Kapan server Anda menerima kode sekali pakai, server mencatat bahwa nomor telepon telah telah diverifikasi.