Telefon numaralarını otomatik olarak doğrulamak için hem istemci hem de emin olmanız gerekir. Bu belgede, istemci bölümünü bir Android uygulamasında uygulamalısınız.
Bir Android uygulamasında telefon numarası doğrulama akışını başlatmak için doğrulama sunucunuza telefon numaranızı gönderin ve başlamak için SMS Retriever API'yi arayın uygulamanız için tek kullanımlık kod içeren bir SMS mesajı dinliyor. Siz mesajı aldıktan sonra, doğrulama işlemini tamamlaması için tek seferlik kodu sunucunuza geri adımları uygulayın.
Başlamadan önce
Uygulamanızı hazırlamak için aşağıdaki bölümlerde yer alan adımları tamamlayın.
Uygulama ön koşulları
Uygulamanızın derleme dosyasının aşağıdaki değerleri kullandığından emin olun:
- 19 veya daha yüksek bir minSdkVersion
- 28 veya daha yüksek bir çalışınSdkVersion
Uygulamanızı yapılandırma
Proje düzeyindeki build.gradle dosyanıza Google'ın Maven deposunu ekleyin.
ve Maven merkez deposu
hem buildscript
hem de allprojects
bölümlerinizde:
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
Google Play Hizmetleri bağımlılığını ekleyin
SMS Retriever API için modülünüzün Gradle derleme dosyasına:
ve genellikle 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. Kullanıcının telefon numarasını edinme
Kullanıcının telefon numarasını, size uygun olan herhangi bir yolla alabilirsiniz. uygulamasını indirin. Genellikle en iyi kullanıcı deneyimi, cihazda depolanan telefon numaraları arasından seçim yapmasını ve böylece bir telefon numarası girmeniz gerekiyor. İpucu seçiciyi kullanmak için:
// 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. SMS retriever'ı başlatma
Kullanıcının telefon numarasını doğrulamaya hazır olduğunuzda
SmsRetrieverClient
nesnesini, startSmsRetriever
çağrısını yapın ve başarı ve
hata dinleyicileri SMS alma görevi için:
// 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
// ...
}
});
SMS alma görevi, bir SMS mesajını beş dakikaya kadar dinler bir dize ekleyin.
3. Telefon numarasını sunucunuza gönderin
Kullanıcının telefon numarasını aldıktan ve SMS'i dinlemeye başladıktan sonra kullanıcının telefon numarasını, herhangi bir yöntemini (genellikle bir HTTPS POST isteği ile) kullanır.
Sunucunuz bir doğrulama mesajı oluşturur ve bu mesajı telefona SMS ile gönderir ekleyebilirsiniz. Sunucuda SMS Doğrulaması Gerçekleştirme başlıklı makaleye bakın.
4. Doğrulama mesajlarını alma
Kullanıcının cihazında bir doğrulama mesajı alındığında Play Hizmetleri,
uygulamanızda açıkça bir SmsRetriever.SMS_RETRIEVED_ACTION
Niyeti yayınlarsa,
girin. Almak için BroadcastReceiver
kullanın
bu doğrulama mesajını gönderin.
BroadcastReceiver
öğesinin onReceive
işleyicisinde
doğrulama iletisi (ve isteğe bağlı olarak gönderen adresini)
ekstralar:
/**
* 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;
}
}
}
}
Bu BroadcastReceiver
öğesini intent filtresiyle kaydedin
com.google.android.gms.auth.api.phone.SMS_RETRIEVED
(
SmsRetriever.SMS_RETRIEVED_ACTION
sabiti) ve izin
com.google.android.gms.auth.api.phone.permission.SEND
(
SmsRetriever.SEND_PERMISSION
sabit)AndroidManifest.xml
dosyasını kullanarak dinamik bir şekilde Context.registerReceiver
kullanabilirsiniz.
<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. Doğrulama mesajındaki tek seferlik kodu sunucunuza gönderin
Doğrulama iletisi metnini öğrendiğinize göre artık normal ifade veya başka bir mantık kullanarak mesajdan tek seferlik kod alabilirsiniz. Etiketin biçimi tek kullanımlık kodlar, onları sunucunuzda nasıl uyguladığınıza bağlıdır.
Son olarak, tek seferlik kodu sunucunuza güvenli bir bağlantı üzerinden gönderin. Zaman sunucu bir defalık kodu alırsa, telefon numarasında bulunan doğrulandı.