একটি অ্যান্ড্রয়েড অ্যাপে এসএমএস যাচাইয়ের অনুরোধ করুন

ফোন নম্বরগুলি স্বয়ংক্রিয়ভাবে যাচাই করতে, আপনাকে যাচাইকরণ প্রবাহের ক্লায়েন্ট এবং সার্ভার উভয় অংশই বাস্তবায়ন করতে হবে। এই ডকুমেন্টটি একটি Android অ্যাপে ক্লায়েন্ট অংশটি কীভাবে বাস্তবায়ন করতে হয় তা বর্ণনা করে।

একটি অ্যান্ড্রয়েড অ্যাপে ফোন নম্বর যাচাইকরণ প্রক্রিয়া শুরু করতে, আপনি আপনার যাচাইকরণ সার্ভারে ফোন নম্বরটি পাঠান এবং আপনার অ্যাপের জন্য একটি এককালীন কোড সম্বলিত একটি এসএমএস বার্তা শোনা শুরু করতে SMS Retriever API-এ কল করুন। বার্তাটি পাওয়ার পরে, যাচাইকরণ প্রক্রিয়াটি সম্পূর্ণ করার জন্য আপনি এককালীন কোডটি আপনার সার্ভারে ফেরত পাঠান।

আপনার অ্যাপ প্রস্তুত করতে, নিম্নলিখিত বিভাগগুলির ধাপগুলি সম্পূর্ণ করুন।

অ্যাপের পূর্বশর্ত

আপনার অ্যাপের বিল্ড ফাইলে নিম্নলিখিত মানগুলি ব্যবহার করা হয়েছে কিনা তা নিশ্চিত করুন:

  • ১৯ বা তার বেশি ভার্সনের একটি minSdkVersion
  • ২৮ বা তার বেশি ভার্সনের একটি compileSdkVersion

আপনার অ্যাপ কনফিগার করুন

আপনার প্রোজেক্ট-লেভেল build.gradle ফাইলে, আপনার buildscript এবং allprojects উভয় বিভাগেই Google এর Maven সংগ্রহস্থল এবং Maven কেন্দ্রীয় সংগ্রহস্থল অন্তর্ভুক্ত করুন:

buildscript {
    repositories {
        google()
        mavenCentral()
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

আপনার মডিউলের Gradle বিল্ড ফাইলে SMS Retriever API-এর জন্য Google Play পরিষেবা নির্ভরতা যোগ করুন, যা সাধারণত app/build.gradle হয়:

dependencies {
  implementation 'com.google.android.gms:play-services-auth:21.4.0'
  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 এ কল করুন এবং 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 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 অনুরোধের মাধ্যমে) ব্যবহারকারীর ফোন নম্বরটি আপনার যাচাইকরণ সার্ভারে পাঠান।

আপনার সার্ভার একটি যাচাইকরণ বার্তা তৈরি করে এবং আপনার নির্দিষ্ট ফোন নম্বরে SMS এর মাধ্যমে পাঠায়। সার্ভারে SMS যাচাইকরণ করুন দেখুন।

যাচাইকরণ বার্তা গ্রহণ করুন

যখন ব্যবহারকারীর ডিভাইসে একটি যাচাইকরণ বার্তা পাওয়া যায়, তখন Play পরিষেবাগুলি স্পষ্টভাবে আপনার অ্যাপে একটি SmsRetriever.SMS_RETRIEVED_ACTION Intent সম্প্রচার করে, যাতে বার্তার পাঠ্য থাকে। এই যাচাইকরণ বার্তাটি গ্রহণ করতে একটি 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>

যাচাইকরণ বার্তা থেকে এককালীন কোডটি আপনার সার্ভারে পাঠান।

এখন যেহেতু আপনার কাছে যাচাইকরণ বার্তার টেক্সট আছে, একটি নিয়মিত অভিব্যক্তি বা অন্য কোনও যুক্তি ব্যবহার করে বার্তা থেকে এককালীন কোডটি পান। এককালীন কোডের ফর্ম্যাট নির্ভর করে আপনি কীভাবে সেগুলি আপনার সার্ভারে প্রয়োগ করেছেন তার উপর।

অবশেষে, একটি নিরাপদ সংযোগের মাধ্যমে আপনার সার্ভারে এককালীন কোডটি পাঠান। যখন আপনার সার্ভার এককালীন কোডটি পায়, তখন এটি রেকর্ড করে যে ফোন নম্বরটি যাচাই করা হয়েছে।

,

ফোন নম্বরগুলি স্বয়ংক্রিয়ভাবে যাচাই করতে, আপনাকে যাচাইকরণ প্রবাহের ক্লায়েন্ট এবং সার্ভার উভয় অংশই বাস্তবায়ন করতে হবে। এই ডকুমেন্টটি একটি Android অ্যাপে ক্লায়েন্ট অংশটি কীভাবে বাস্তবায়ন করতে হয় তা বর্ণনা করে।

একটি অ্যান্ড্রয়েড অ্যাপে ফোন নম্বর যাচাইকরণ প্রক্রিয়া শুরু করতে, আপনি আপনার যাচাইকরণ সার্ভারে ফোন নম্বরটি পাঠান এবং আপনার অ্যাপের জন্য একটি এককালীন কোড সম্বলিত একটি এসএমএস বার্তা শোনা শুরু করতে SMS Retriever API-এ কল করুন। বার্তাটি পাওয়ার পরে, যাচাইকরণ প্রক্রিয়াটি সম্পূর্ণ করার জন্য আপনি এককালীন কোডটি আপনার সার্ভারে ফেরত পাঠান।

আপনার অ্যাপ প্রস্তুত করতে, নিম্নলিখিত বিভাগগুলির ধাপগুলি সম্পূর্ণ করুন।

অ্যাপের পূর্বশর্ত

আপনার অ্যাপের বিল্ড ফাইলে নিম্নলিখিত মানগুলি ব্যবহার করা হয়েছে কিনা তা নিশ্চিত করুন:

  • ১৯ বা তার বেশি ভার্সনের একটি minSdkVersion
  • ২৮ বা তার বেশি ভার্সনের একটি compileSdkVersion

আপনার অ্যাপ কনফিগার করুন

আপনার প্রোজেক্ট-লেভেল build.gradle ফাইলে, আপনার buildscript এবং allprojects উভয় বিভাগেই Google এর Maven সংগ্রহস্থল এবং Maven কেন্দ্রীয় সংগ্রহস্থল অন্তর্ভুক্ত করুন:

buildscript {
    repositories {
        google()
        mavenCentral()
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

আপনার মডিউলের Gradle বিল্ড ফাইলে SMS Retriever API-এর জন্য Google Play পরিষেবা নির্ভরতা যোগ করুন, যা সাধারণত app/build.gradle হয়:

dependencies {
  implementation 'com.google.android.gms:play-services-auth:21.4.0'
  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 এ কল করুন এবং 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 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 অনুরোধের মাধ্যমে) ব্যবহারকারীর ফোন নম্বরটি আপনার যাচাইকরণ সার্ভারে পাঠান।

আপনার সার্ভার একটি যাচাইকরণ বার্তা তৈরি করে এবং আপনার নির্দিষ্ট ফোন নম্বরে SMS এর মাধ্যমে পাঠায়। সার্ভারে SMS যাচাইকরণ করুন দেখুন।

যাচাইকরণ বার্তা গ্রহণ করুন

যখন ব্যবহারকারীর ডিভাইসে একটি যাচাইকরণ বার্তা পাওয়া যায়, তখন Play পরিষেবাগুলি স্পষ্টভাবে আপনার অ্যাপে একটি SmsRetriever.SMS_RETRIEVED_ACTION Intent সম্প্রচার করে, যাতে বার্তার পাঠ্য থাকে। এই যাচাইকরণ বার্তাটি গ্রহণ করতে একটি 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>

যাচাইকরণ বার্তা থেকে এককালীন কোডটি আপনার সার্ভারে পাঠান।

এখন যেহেতু আপনার কাছে যাচাইকরণ বার্তার টেক্সট আছে, একটি নিয়মিত অভিব্যক্তি বা অন্য কোনও যুক্তি ব্যবহার করে বার্তা থেকে এককালীন কোডটি পান। এককালীন কোডের ফর্ম্যাট নির্ভর করে আপনি কীভাবে সেগুলি আপনার সার্ভারে প্রয়োগ করেছেন তার উপর।

অবশেষে, একটি নিরাপদ সংযোগের মাধ্যমে আপনার সার্ভারে এককালীন কোডটি পাঠান। যখন আপনার সার্ভার এককালীন কোডটি পায়, তখন এটি রেকর্ড করে যে ফোন নম্বরটি যাচাই করা হয়েছে।