ফোন নম্বর স্বয়ংক্রিয়ভাবে যাচাই করার জন্য, আপনাকে যাচাইকরণ প্রক্রিয়ার ক্লায়েন্ট এবং সার্ভার উভয় অংশই বাস্তবায়ন করতে হবে। এই ডকুমেন্টটিতে একটি অ্যান্ড্রয়েড অ্যাপে ক্লায়েন্ট অংশটি কীভাবে বাস্তবায়ন করতে হয় তা বর্ণনা করা হয়েছে।
একটি অ্যান্ড্রয়েড অ্যাপে ফোন নম্বর যাচাইকরণ প্রক্রিয়া শুরু করতে, আপনাকে আপনার ভেরিফিকেশন সার্ভারে ফোন নম্বরটি পাঠাতে হবে এবং আপনার অ্যাপের জন্য একটি ওয়ান-টাইম কোড সম্বলিত এসএমএস বার্তার জন্য অপেক্ষা শুরু করতে এসএমএস রিট্রিভার এপিআই (SMS Retriever API)-কে কল করতে হবে। বার্তাটি পাওয়ার পর, যাচাইকরণ প্রক্রিয়াটি সম্পূর্ণ করার জন্য আপনাকে ওয়ান-টাইম কোডটি আপনার সার্ভারে ফেরত পাঠাতে হবে।
আপনার অ্যাপ প্রস্তুত করতে, নিম্নলিখিত বিভাগগুলির ধাপগুলি সম্পূর্ণ করুন।
অ্যাপের পূর্বশর্ত
আপনার অ্যাপের বিল্ড ফাইলে নিম্নলিখিত মানগুলি ব্যবহার করা হচ্ছে কিনা তা নিশ্চিত করুন:
- minSdkVersion ১৯ বা তার বেশি
- ২৮ বা তার বেশি ভার্সনের একটি compileSdkVersion
আপনার অ্যাপ কনফিগার করুন
আপনার প্রোজেক্ট-স্তরের build.gradle ফাইলে, buildscript এবং allprojects উভয় সেকশনেই Google-এর Maven রিপোজিটরি এবং Maven সেন্ট্রাল রিপোজিটরি অন্তর্ভুক্ত করুন:
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
আপনার মডিউলের গ্রেডল বিল্ড ফাইলে (যা সাধারণত app/build.gradle হয়ে থাকে) এসএমএস রিট্রিভার এপিআই-এর জন্য গুগল প্লে সার্ভিসেস ডিপেন্ডেন্সি যোগ করুন:
dependencies {
implementation 'com.google.android.gms:play-services-auth:21.5.1'
implementation 'com.google.android.gms:play-services-auth-api-phone:18.3.0'
}
ব্যবহারকারীর ফোন নম্বর সংগ্রহ করুন।
আপনার অ্যাপের জন্য উপযুক্ত যেকোনো উপায়ে আপনি ব্যবহারকারীর ফোন নম্বর সংগ্রহ করতে পারেন। প্রায়শই, ডিভাইসে সংরক্ষিত ফোন নম্বরগুলো থেকে ব্যবহারকারীকে বেছে নিতে বলার জন্য হিন্ট পিকার ব্যবহার করাই সেরা ইউজার এক্সপেরিয়েন্স, যার ফলে ফোন নম্বর হাতে টাইপ করার প্রয়োজন হয় না। হিন্ট পিকার ব্যবহার করতে:
// 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
// ...
}
});
এসএমএস পুনরুদ্ধার টাস্কটি আপনার অ্যাপকে শনাক্তকারী একটি অনন্য স্ট্রিং সম্বলিত এসএমএস বার্তার জন্য পাঁচ মিনিট পর্যন্ত অপেক্ষা করে।
আপনার সার্ভারে ফোন নম্বরটি পাঠান
ব্যবহারকারীর ফোন নম্বর সংগ্রহ করে এসএমএস বার্তার জন্য অপেক্ষা শুরু করার পর, যেকোনো পদ্ধতি ব্যবহার করে (সাধারণত একটি HTTPS POST অনুরোধের মাধ্যমে) ব্যবহারকারীর ফোন নম্বরটি আপনার যাচাইকরণ সার্ভারে পাঠান।
আপনার সার্ভার একটি যাচাইকরণ বার্তা তৈরি করে এবং আপনার নির্দিষ্ট করা ফোন নম্বরে এসএমএস-এর মাধ্যমে পাঠিয়ে দেয়। সার্ভারে এসএমএস যাচাইকরণ সম্পাদন দেখুন।
যাচাইকরণ বার্তা গ্রহণ করুন
যখন ব্যবহারকারীর ডিভাইসে একটি যাচাইকরণ বার্তা আসে, তখন প্লে সার্ভিসেস আপনার অ্যাপে স্পষ্টভাবে একটি SmsRetriever.SMS_RETRIEVED_ACTION Intent সম্প্রচার করে, যেটিতে বার্তাটির টেক্সট থাকে। এই যাচাইকরণ বার্তাটি গ্রহণ করতে একটি BroadcastReceiver ব্যবহার করুন।
BroadcastReceiver এর onReceive হ্যান্ডলারে, Intent-এর extras থেকে ভেরিফিকেশন মেসেজের টেক্সট (এবং ঐচ্ছিকভাবে প্রেরকের ঠিকানা) নিন:
/**
* 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>
যাচাইকরণ বার্তা থেকে ওয়ান-টাইম কোডটি আপনার সার্ভারে পাঠান।
এখন যেহেতু আপনার কাছে ভেরিফিকেশন মেসেজের টেক্সটটি আছে, মেসেজটি থেকে ওয়ান-টাইম কোডটি পাওয়ার জন্য একটি রেগুলার এক্সপ্রেশন বা অন্য কোনো লজিক ব্যবহার করুন। ওয়ান-টাইম কোডের ফরম্যাটটি নির্ভর করে আপনি আপনার সার্ভারে সেগুলোকে কীভাবে প্রয়োগ করেছেন তার উপর।
অবশেষে, একটি সুরক্ষিত সংযোগের মাধ্যমে আপনার সার্ভারে ওয়ান-টাইম কোডটি পাঠান। আপনার সার্ভার ওয়ান-টাইম কোডটি গ্রহণ করলে, এটি রেকর্ড করে যে ফোন নম্বরটি যাচাই করা হয়েছে।