دریافت شماره سیمکارت و خواندن کد تایید SMS در اندروید

دسته‌بندی: ,
بدون دیدگاه

سلام خیلی وقت بود آموزش جدید نذاشته بودم ولی خب اومدم بالاخره 🙂

امروزه داخل اکثر اپلیکیشن های محتلف برای ثبت نام از شماره موبایل به جای ایمیل استفاده می کنند که خب کار و برای کاربر ها خیلی راحت میکنه دیگه نیازی ندارند وارد ایمیل خودشون بشن  تا ثبت نام و تکمیل کنند.

داخل این اموزش دوتا نکته مهم و با هم یاد میگیریم. اول اینکه بجای اینکه مستقیم از کاربر بخوایم شماره موبایل خودش و وارد کنه با استفاده از سیستم خودمون درخواست دریافت شماره و بکنیم. و نکته دوم وقتی sms کد تایید میاد چطوری بدون اینکه کاربر کد و وارد کنه برنامه خودش کد تایید و از داخل پیامک ها بصورت خود کار بخونه.


برای این اموزش از کتابخونه Google Play Services 10.2+ استفاده میکنیم.
ابتدا میخوایم که درخواست دریافت شماره موبایل کاربر و بنویسیم برای اینکار از دستور زیر استفاده میکنیم.

HintRequest hintRequest = new HintRequest.Builder()
                         .setHintPickerConfig(newCredentialPickerConfig.Builder().setShowCancelButton(true).build())
                         .setPhoneNumberIdentifierSupported(true)
                         .build();

طراحی اپلیکیشن اندروید

بعد از این کار شما یک pending intent دریافت میکنید که با کد زیر میتونید یک دیالوگ برای انتخاب شماره بسازید.

GoogleApiClient apiClient = new GoogleApiClient.Builder(getContext())
               .addApi(Auth.CREDENTIALS_API).enableAutoManage(getActivity(), GoogleApiHelper
               .getSafeAutoManageId(), new GoogleApiClient.OnConnectionFailedListener() {
                         @Override
                         public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                             Log.e(TAG, "Client connection failed: " + connectionResult.getErrorMessage());
                         }
             }).build();


 PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
            apiClient, hintRequest);

 startIntentSenderForResult(intent.getIntentSender(),
                            RESOLVE_HINT, null, 0, 0, 0);

بعد از اینکه کاربر شماره موبایلی و انتخاب کرد شماره مورد نظر به onActivityResult() برگردانده میشود.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_PHONE_HINT) {
       if (data != null) {
          Credential cred = data.getParcelableExtra(Credential.EXTRA_KEY);
            if (cred != null) {
               final String unformattedPhone = cred.getId();
            }
       }    
    }
}

خب حالا شماره موبایل و دریافت کردیم رسیدیم به قسمتی که میخوایم پیامک های ورودی که حاوی کد تایید هست و بررسی کنیم بصورت خودکار.
برای این کار نیاز داریم که تارگت پیامک خود را معرفی کنیم و داخل پیامک های خود از یک Hash ثابت استفاده کنیم تا پیامک ما از بقیه پیام ها تشخیص داده بشه.

 

برنامه نویسی اندروید

SmsRetrieverClient client = SmsRetriever.getClient(mContext);
 
// Starts SmsRetriever, waits for ONE matching SMS message until timeout
// (۵ minutes).
Task<Void> task = client.startSmsRetriever();
 
// Listen for success/failure of the start Task. 
task.addOnSuccessListener(new OnSuccessListener<Void>() {
  @Override
  public void onSuccess(Void aVoid) {
    // Log.d(TAG,"Successfully started retriever");
  }
});
 
task.addOnFailureListener(new OnFailureListener() {
  @Override
  public void onFailure(@NonNull Exception e) {
    Log.e(TAG,"Failed to start retriever");
  });
);

وقتی پیامکی با هش مورد نظر برای کابر ارسال شد با استفاده از Broadcast این پیامک و میخونیم.

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:
          // Get SMS message contents
          String message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
          break;
        case CommonStatusCodes.TIMEOUT:
          Log.d(TAG,"timed out (5 minutes)"
          break;
      }
    }
  }
}

خب با این Broadcast کد تایید و میتونید دریافت کنید و به هروشی که مایل هستید صحت کد و بررسی کنید.
و در اخر مانیفست خود را با این کد کامل تر کنید.



<receiver android:name=".MySMSBroadcastReceiver" android:exported="true">
    <intent-filter>
        <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
    </intent-filter>
</receiver>
آموزش زبان کاتلین
  • نویسنده
    hesam
  • تعداد بازدید
    32 views
0دیدگاه فرستاده شده است.
شما هم دیدگاه خود را بنویسید

نوشته‌های ویژه
اخبار ویژه