ফোন নম্বর অটোমেটিক যাচাই করতে, আপনাকে যাচাইকরণ ফ্লোয়ের ক্লায়েন্ট ও সার্ভার, দুটি অংশই প্রয়োগ করতে হবে। এই ডকুমেন্টে Android অ্যাপে ক্লায়েন্ট পার্ট কীভাবে প্রয়োগ করতে হয় তা বর্ণনা করা হয়েছে।
Android অ্যাপে ফোন নম্বর যাচাইকরণ ফ্লো শুরু করতে, আপনার যাচাইকরণ সার্ভারে ফোন নম্বর পাঠান এবং আপনার অ্যাপের জন্য একবার ব্যবহার করার কোড থাকা এসএমএস মেসেজ শোনা শুরু করতে SMS Retriever API কল করুন। আপনি মেসেজ পাওয়ার পরে, যাচাইকরণ প্রসেস সম্পূর্ণ করতে একবার ব্যবহার করার কোডটি আপনার সার্ভারে ফেরত পাঠান।
আপনার অ্যাপ প্রস্তুত করতে, নিম্নলিখিত বিভাগে উল্লেখ করা ধাপগুলি সম্পূর্ণ করুন।
অ্যাপের পূর্বশর্ত
আপনার অ্যাপের বিল্ড ফাইলে নিম্নলিখিত ভ্যালু ব্যবহার করা হয়েছে কিনা তা নিশ্চিত করুন:
- minSdkVersion 19 বা তার পরের যেকোনও ভার্সন
- compileSdkVersion 28 বা তার পরের যেকোনও ভার্সন
আপনার অ্যাপ কনফিগার করা
আপনার প্রোজেক্ট-লেভেল build.gradle ফাইলে, আপনার
buildscript এবং allprojects, দুটি বিভাগেই
Google-এর Maven রিপোজিটরি এবং Maven সেন্ট্রাল রিপোজিটরি অন্তর্ভুক্ত করুন:
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
আপনার
মডিউলের Gradle বিল্ড ফাইলে এসএমএস রিট্রিভার API-এর জন্য Google Play পরিষেবা ডিপেন্ডেন্সি যোগ করুন, যা সাধারণত app/build.gradle:
dependencies {
implementation 'com.google.android.gms:play-services-auth:22.0.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:18.3.1'
}
ব্যবহারকারীর ফোন নম্বর পাওয়া
আপনার অ্যাপের জন্য উপযুক্ত যেকোনও উপায়ে ব্যবহারকারীর ফোন নম্বর পেতে পারেন। প্রায়শই, ব্যবহারকারীকে ডিভাইসে সেভ করা ফোন নম্বর থেকে বেছে নেওয়ার জন্য প্রম্পট করতে হিন্ট পিকার ব্যবহার করা হল সবচেয়ে ভালো ব্যবহারকারীর অভিজ্ঞতা এবং এর ফলে ম্যানুয়ালি ফোন নম্বর টাইপ করার প্রয়োজন হয় না। ইঙ্গিত বাছাইকারী ব্যবহার করতে:
// 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
}
}
}
এসএমএস রিট্রিভার শুরু করা
ব্যবহারকারীর ফোন নম্বর যাচাই করার জন্য প্রস্তুত হলে,
SmsRetrieverClient অবজেক্টের একটি ইনস্ট্যান্স পান, startSmsRetriever কল করুন এবং এসএমএস রিট্রিভাল টাস্কে সাকসেস ও
ফেলিয়র লিসনার অ্যাটাচ করুন:
// 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 using 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 মেসেজ শোনা শুরু করলে, যেকোনও পদ্ধতি (সাধারণত HTTPS POST অনুরোধের মাধ্যমে) ব্যবহার করে আপনার যাচাইকরণ সার্ভারে ব্যবহারকারীর ফোন নম্বর পাঠান।
আপনার সার্ভার একটি যাচাইকরণ মেসেজ তৈরি করে এবং আপনার উল্লেখ করা ফোন নম্বরে এসএমএস হিসেবে পাঠায়। সার্ভারে এসএমএস যাচাইকরণ করা দেখুন।
যাচাইকরণ মেসেজ পান
ব্যবহারকারীর ডিভাইসে যাচাইকরণ মেসেজ পেলে, Play Services
আপনার অ্যাপে একটি SmsRetriever.SMS_RETRIEVED_ACTION ইনটেন্ট
স্পষ্টভাবে ব্রডকাস্ট করে, যার মধ্যে মেসেজের টেক্সট থাকে। এই যাচাইকরণ মেসেজ পেতে BroadcastReceiver ব্যবহার করুন।
BroadcastReceiver-এর onReceive হ্যান্ডলার থেকে, যাচাইকরণ মেসেজের
টেক্সট (এবং ঐচ্ছিকভাবে প্রেরকের ঠিকানা) Intent-এর
এক্সট্রা থেকে পান:
/**
* BroadcastReceiver to wait for SMS messages. This can be registered either
* in the AndroidManifest or at runtime. Filters 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;
}
}
}
}
এই BroadcastReceiver রেজিস্টার করতে, এগুলি ব্যবহার করুন:
- ইনটেন্ট ফিল্টার:
com.google.android.gms.auth.api.phone.SMS_RETRIEVED(SmsRetriever.SMS_RETRIEVED_ACTIONকনস্ট্যান্টের ভ্যালু) - অনুমতি:
com.google.android.gms.auth.api.phone.permission.SEND(SmsRetriever.SEND_PERMISSIONকনস্ট্যান্টের ভ্যালু)
আপনি নিজের অ্যাপের AndroidManifest.xml ফাইলে রিসিভার রেজিস্টার করতে পারেন, যেমন
নিম্নলিখিত উদাহরণে দেখানো হয়েছে অথবা 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>
যাচাইকরণ মেসেজ থেকে একবার ব্যবহারের কোডটি আপনার সার্ভারে পাঠান
যাচাইকরণ মেসেজের টেক্সট যেহেতু আপনার কাছে আছে, তাই মেসেজ থেকে এককালীন কোড পেতে রেগুলার এক্সপ্রেশন বা অন্য কোনও লজিক ব্যবহার করুন। আপনি কীভাবে নিজের সার্ভারে এককালীন কোড প্রয়োগ করেছেন তার উপর নির্ভর করে সেটির ফর্ম্যাট নির্ধারিত হয়।
সবশেষে, সুরক্ষিত কানেকশনের মাধ্যমে আপনার সার্ভারে একবার ব্যবহারের কোড পাঠান। আপনার সার্ভার একবার ব্যবহার করার মতো কোডটি পেলে, সেটি রেকর্ড করে যে ফোন নম্বরটি যাচাই করা হয়েছে।