Android短信驗證碼SMSSDK集成與使用

在用戶註冊的過程中,我們常常可以看到使用短信驗證碼的方式來驗證用戶手機號的真實性。在此就分享下SMSSDK的集成與使用。(Android Studio版)

第一:到其官網下載SMSSDK  http://www.mob.com/#/ ,然後在其後臺添加一個APP


第二:下載下來後解壓文件,進入到他的SMSSDK文件夾裏可以看到都有如下文件:


1,將兩jar包和SMSSDK-2.1.2.arr添加到你Android Studio工程目錄下的libs文件裏。若要添加帶GUI界面的可以把後面那個arr也加入進去,此處採用無GUI的。

即:如果你需要用GUI庫,則需要加入全部這四個文件,不需要可以去掉SMSSDKGUI。爲了方便和ShareSDK一起集成,公共庫依然打包成jar。
如果你同時使用ShareSDK,保留一份公共庫就行(公共庫版本一致或兼容)。

將以上文件按需放入Android Studio項目所要使用SMSSDK的Module所在的Libs裏面,
再在Module的build.gradle裏面將libs加入倉庫(repositories),
然後添加依賴(dependencies )示例如下:
 ,2,
repositories{
    flatDir{
        dirs 'libs' //就是你放aar的目錄地址
    }
}
3,
dependencies {
    ....//你的其他依賴
    compile name:'SMSSDK-此處填寫版本號',ext:'aar'
    compile name:'SMSSDKGUI-此處填寫版本號',ext:'aar'
}

4,到此若沒有出現其他問題則集成完畢,接下來我們要配置他的一些權限和初始化信息:

打開您項目的“AndroidManifest.xml”,在其中添加如下的權限:

<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.READ_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
然後在“application”下添加如下activity:

<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>

然後在我們應用的Application類或MainActivity的onCreate()方法裏初始化SDK:

SMSSDK.initSDK(this, "您的appkey", "您的appsecret");
其中appkey和appsecret即爲你在mob後臺添加的應用信息,替換即可。更多集成細節請移步:這裏

5,到此短信sdk的集成和配置已完成。可以調用其PAI愉快的玩耍啦...

第三:接下來我們看其短信驗證的代碼實現

1,涉及到與後臺信息交換的sdk,一般都是採用觀察者的設計模式。SMSSDK亦是如此。

註冊一個事件接收器:在onCreate()方法裏

 private void initReceiverCode(){
        this.eh=new EventHandler(){
            @Override
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) {
                    //回調完成
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        //提交驗證碼成功
                        myHandler.sendEmptyMessage(1);
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        //獲取驗證碼成功
                        myHandler.sendEmptyMessage(2);
                    } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
                        //返回支持發送驗證碼的國家列表
                    }
                } else {
                    ((Throwable) data).printStackTrace();
                    //此語句代表接口返回失敗
                    //獲取驗證碼失敗。短信驗證碼驗證失敗(用flage標記來判斷)
                    if (smsFlage==1) {
                        myHandler.sendEmptyMessage(3);
                    }else if (smsFlage==2){
                        myHandler.sendEmptyMessage(4);
                    }
                }
            }
        };
        SMSSDK.registerEventHandler(eh);//註冊短信回調
    }
程序退出時在onDestory()方法裏:註銷回調接口 registerEventHandler必須和unregisterEventHandler配套使用,否則可能造成內存泄漏。

SMSSDK.unregisterEventHandler(eh);
2, 獲取短信驗證碼 請求獲取短信驗證碼,在監聽中返回

 SMSSDK.getVerificationCode(country, phone);
3,提交驗證碼去mob後臺驗證用戶輸入的驗證碼是否正確,在監聽中返回

SMSSDK.submitVerificationCode(country, phone, code);
4,最後在afterEvent(int event,int result,Object data)回調方法裏做處理即可。

注意:短信邏輯的實現過程中需要着重注意有兩種情況要考慮:第一:用戶點擊獲取一下嗎按鈕後驗證碼是否獲取成功  第二:用戶提交到mob後臺的驗證碼是否驗證成功。所以我們要在else語句中設置一個標記值smsFlage來判斷是獲取驗證碼失敗還是提交驗證碼驗證失敗。

更多使用詳情請移步其文檔:點擊這裏

5,好了最後帖上完整的代碼:

//工程集成Mob的SMSSDK後,調用即可
  //1 註冊回調接口 初始化短信接送監聽器【注意:回掉接口在非UI線程中so要用到Handler來通知用戶】在onCreate()方法裏init
    private EventHandler eh;
    public int smsFlage = 0;//0:設置爲初始化值 1:請求獲取驗證碼 2:提交用戶輸入的驗證碼判斷是否正確

    private void initReceiverCode(){
        this.eh=new EventHandler(){
            @Override
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) {
                    //回調完成
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        //提交驗證碼成功
                        myHandler.sendEmptyMessage(1);
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        //獲取驗證碼成功
                        myHandler.sendEmptyMessage(2);
                    } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
                        //返回支持發送驗證碼的國家列表
                    }
                } else {
                    ((Throwable) data).printStackTrace();
                    //此語句代表接口返回失敗
                    //獲取驗證碼失敗。短信驗證碼驗證失敗(用flage標記來判斷)
                    if (smsFlage==1) {
                        myHandler.sendEmptyMessage(3);
                    }else if (smsFlage==2){
                        myHandler.sendEmptyMessage(4);
                    }
                }
            }
        };
        SMSSDK.registerEventHandler(eh);//註冊短信回調
    }

    //2 獲取短信驗證碼 請求獲取短信驗證碼,在監聽中返回
    private void getSmsCode(String country, String phone){
        SMSSDK.getVerificationCode(country, phone);//請求獲取短信驗證碼,在監聽中返回
    }
    //3 提交驗證碼
    private void submitCode(String country, String phone, String code){
        SMSSDK.submitVerificationCode(country, phone, code);//提交短信驗證碼,在監聽中返回
    }
    //4 註銷回調接口 registerEventHandler必須和unregisterEventHandler配套使用,否則可能造成內存泄漏。
    private void unregisterHandler(){
        SMSSDK.unregisterEventHandler(eh);
    //    Log.v("TAG", "註銷回調接口");
    }

    Handler myHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 1:             //驗證碼驗證成功
                    //執行bmob註冊
                    registerUser();
                    break;
                case 2:             //獲取驗證碼成功,注意查看
                    ShowToas.showToast(RegisterActivity.this, "獲取驗證碼成功,注意查看");
                    break;
                case 3:             //獲取驗證碼失敗,請填寫正確的手機號碼
                    ShowToas.showToast(RegisterActivity.this, "獲取驗證碼失敗,請填寫正確的手機號碼");
                    break;
                case 4:             //驗證碼驗證錯誤
                    ShowToas.showToast(RegisterActivity.this, "驗證碼錯誤");
                    break;
            }
        }
    };







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章