1. 程式人生 > >Android-使用Mob簡訊驗證碼SDK完成簡訊驗證功能

Android-使用Mob簡訊驗證碼SDK完成簡訊驗證功能

1.之所以選擇Mob簡訊驗證碼SDK,是因為它是完全免費的,所以很適合自己平時測試或者在個人的小專案中使用,但是有點小坑的是上線前每個手機號一天有次數限制、簡訊內容不能自定義。

2.首先開啟Mob官網:http://www.mob.com/#/ ,下載SDK

3.將下載好的.zip檔案解壓,其檔案結構如圖:

4.開啟官網,登入自己賬號,選擇進入後臺

5.選擇SecurityCodeSDK

6.申請應用的APP Key 和App Secret ,如圖:

7.建立一個我們自己要進行測試的工程mydemo,匯入依賴庫,即三步走:第一步開啟3中下載的檔案,複製SMSSDK資料夾到工程目錄下

8.第二步:右鍵工程選擇import -> 再把自身專案裡的SMSSDK匯入一下工程 (注意當eclipse中其他專案也包含有SMSSDK時,可能會匯入不了,所以應該避免這種情況)

9.第三步:再右鍵專案,選擇 properties -> android -> add ->SMSSDK ->ok

10.好了,準備工作都已做好,接下來編寫程式碼

(1)

SMSSDK.initSDK(this, "11b137e3a5e00", "632f0c9cf1cd683806146758ef8784e3");//sdk使用前的一個初始化,第二個引數即6中的key和Secret

(2)

/**
  * 寫一個簡訊傳送的監聽,用於判斷驗證碼是否發出,提交的驗證碼是否通過等資訊,因為這個不是主執行緒中的,所以不能對UI執行緒進行操作,所以這裡使用了訊息機制
  */
 EventHandler eh = new EventHandler(){
  public void afterEvent(int arg0, int arg1, Object arg2) {  //afterEvent 為呼叫SDK之後回撥的方法
   Message m = Message.obtain();
   m.what = 1;
   m.arg1 = arg0;//event
   m.arg2 = arg1;//result
   handler.sendMessage(m);
  }

};

(3)

SMSSDK.registerEventHandler(eh);//註冊簡訊回撥介面

(4)

/**
  * 新增一個按鈕,當點選時傳送簡訊,注意只有當前網路有網時才能訪問伺服器獲取驗證碼,方法CommonUtils.getNetworkInfo 是自己定義判斷網路狀態的工具方法,很簡單
  */
 public void smsPhoneRegisterVM(Context context,String str){
  this.context = context;
  if(CommonUtils.getNetworkInfo(context) != 2){
   SMSSDK.getVerificationCode("86",str);//請求獲取簡訊驗證碼,在監聽中EvenHandler介面返回,str:手機號
  }else{
   Toast.makeText(context, "請檢查網路連線", Toast.LENGTH_SHORT).show();
  }
 }

(5)

/**
  * 新增一個提交按鈕,進行驗證碼驗證
  */
 public void smsCommitCommitVM(Context context,String str,String str1){
  SMSSDK.submitVerificationCode("86", str, str1);//提交簡訊驗證碼,在監聽中返回,str :手機號 str1:收到的驗證碼
 }

(6)

/**
  * 接收afterEvent 方法裡面的Message
  */
 Handler handler = new Handler(){
  public void handleMessage(Message msg) {
   switch (msg.what) {
   case 1:
    if(msg.arg2 == SMSSDK.RESULT_COMPLETE){//傳送成功的情況
     if(msg.arg1 == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE){//驗證成功通過
      Intent i = new Intent(context2,ActivityRegisterSmsPage3.class);
      context2.startActivity(i);
     }else if(msg.arg1 == SMSSDK.EVENT_GET_VERIFICATION_CODE){//驗證碼已經從伺服器發出
      Toast.makeText(context, "驗證碼已發出,請注意查收", Toast.LENGTH_SHORT).show();
     }
    }else{
     Toast.makeText(context, "驗證碼錯誤", Toast.LENGTH_SHORT).show();
    }
    break;
   }
  };
 };

(7)

public void unRegisterEventHandler(){  //最後登出監聽,否則可能會造成記憶體洩露
  SMSSDK.unregisterEventHandler(eh);
  }

(8)

最後別忘了新增許可權和一個activity,此activity位置和普通activity位置一樣

 <!-- 簡訊驗證的許可權 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
   

  <!-- 簡訊驗證Mob依賴庫必備的 -->
        <activity
            android:name="cn.smssdk.SMSSDKUIShell"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:windowSoftInputMode="stateHidden|adjustResize" />

(9)

/**
  * MOB官方文件說明
  * getVerificationCode用於向伺服器請求傳送驗證碼的服務,需要傳遞國家代號和接收驗證碼的手機號碼,支援此服務的國家程式碼在 getSupportedCountries中獲取。
  * 請求getVerificationCode的時間間隔不應該小於60秒,否則服務端會返回“操作過 於頻繁”的錯誤
  * submitVerificationCode用於向伺服器提交接收到的簡訊驗證碼,驗證成功後會通過EventHandler返回國家程式碼和電話號碼。
  */

好了 就到這裡了  加油、共勉