安卓漫漫路之集成三方短信SDK(MOB.com).

項目中集成MOB.com提供的三方短信SDK.

當然這些短信都是免費的.並且可以在您申請的MOB.com後臺去查看短信註冊用戶的相關信息.

這篇文後半部分會提供一個簡單的驗證短信Demo,有界面,當然界面不喜歡的話您可以自定義;

先開始咱們的相關配置步驟:

第一步(賬號的註冊):

想用人MOB.com提供給大家的免費短信SDK,首先當然是註冊成爲MOB.com的用戶.點擊MOB用戶註冊界面直接開始註冊.一共爲三個步驟:由最初的賬號信息的填寫,直到最終的激活完成.

第二步(SDK的選擇):

激活完成後自動跳轉至MOB.com主頁面點擊右上角進入後臺.有四個選項供咱們選擇:


第三步(項目的創建):

咱們需要的是短信SDK.即MOB.com提供的SecurityCodeSDK功能.點擊之後第一次會彈出提示框來提示您輸入應用的名稱,並選擇好Android或ios選項,本文介紹的爲Android集成,建議第一次先寫個小Demo來實驗一下.成功之後再弄成您的工作項目名稱.完成之後如下圖:


最上方三個標記處從左至右依次爲您創建的應用名稱,應用的AppKey,應用的AppSecret;

下方有一個快速集成選項.如果您使用的是AndroidStudio集成的話,看我的跟看官方文檔一樣快速;

但是還有一個提示爲您的應用還未上線登記,每天只能發佈20條短信.這個不用着急.等咱們把項目打包好後提交至MOB.com,經過審覈通過之後,短信條數就會變爲無限制了; 

必須要添加:

SMSSDK 2.0.1 jar包下載地址.下載完成後解壓,把其中的4個文件Copy之後放入您的項目主工程下的libs文件夾中,然後右鍵點擊任意jar包後選擇下方倒數第二行的add As Library選項.即可開始添加依賴.



必須要添加:
在項目主工程下的build.gradle下添加如下:
repositories{
    flatDir{
        dirs 'libs'
    }
}
在dependencies中添加如下兩行依賴:
compile files('libs/MobCommons-2016.1201.1839.jar')
compile files('libs/MobTools-2016.1201.1839.jar')

PS:

如果您是老版本,依賴可能沒有自動生成,您需要在項目工程的build.gradle下添加如下這一句依賴:

compile fileTree(include: ['*.jar'],dir:'libs')

這句話的意思就是編譯時依賴libs文件夾下的所有jar文件.


必須要添加:

然後到了咱們的配置清單文件AndroidMainifest.xml的時候了:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITEAL_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"/>

必須要添加:

在項目啓動時添加如下:

SMSSDK.initSDK(this, "您的appkey", "您的appsecret");

至此,前期的配置工作已經全部完成.

----------------------------------------------------------------------------

PS:

之前還在糾結這是不是個文字遊戲我是把這個初始化的操作放到Activity的onCreate中,還是把他放到Application的onCreate中呢?後來看到大神給的一番回答也就釋然了:

咱們都知道,程序的入口是在Application的onCreate中,全局的初始化操作都會寫在其中,如果咱們想讓這個SMSSDK全局都可以使用,咱們就放到Application的onCreate中,如果說咱們只需要在某個界面使用,那就可以把他放到Activity的onCreate中。



下面開始介紹Demo的源碼,您可以直接Copy或參考部分。

Demo截圖:



如上圖,當咱們輸入手機號然後點擊獲取驗證碼的按鈕時,會先把手機號取出來驗證手機號的準確性後,

通過SMSSDK.getVerificationCode("86", phoneNums)發送至MOB.com的後臺;

那怎麼接收到短信驗證碼呢?MOB.com提供了相關的回調接口:Android 短信SDK操作回調

在onCreate中通過SMSSDK.registerEventHandler(eventHandler)註冊該回調接口;

在onDestory中通過SMSSDK.unregisterAllEventHandler()反註冊該回調接口;

咱們在後臺可以查看註冊短信驗證用戶的相關模糊信息。



默認情況MOB.com會給咱們的應用後臺會開啓智能驗證,就是說短時間內,一個手機號碼只能獲取一次驗證碼,而不能頻繁的接收驗證碼,打開短信設置選項,在頁面最下面可以選擇關閉. 

MainActivity的源代碼如下:

.
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    String APPKEY = "您的AppKey";
    String APPSECRET = "您的AppSecret";

    // 手機號輸入框
    private EditText inputPhoneEt;

    // 驗證碼輸入框
    private EditText inputCodeEt;

    // 獲取驗證碼按鈕
    private Button requestCodeBtn;

    // 註冊按鈕
    private Button commitBtn;

    //倒計時顯示   可以手動更改。
    int i = 30;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    /**
     * 初始化控件
     */
    private void initView() {
        inputPhoneEt = (EditText) findViewById(R.id.login_input_phone_et);
        inputCodeEt = (EditText) findViewById(R.id.login_input_code_et);
        requestCodeBtn = (Button) findViewById(R.id.login_request_code_btn);
        commitBtn = (Button) findViewById(R.id.login_commit_btn);
        requestCodeBtn.setOnClickListener(this);
        commitBtn.setOnClickListener(this);

        // 啓動短信驗證sdk
        SMSSDK.initSDK(this, APPKEY, APPSECRET);
        EventHandler eventHandler = new EventHandler(){
            @Override
            public void afterEvent(int event, int result, Object data) {
                Message msg = new Message();
                msg.arg1 = event;
                msg.arg2 = result;
                msg.obj = data;
                handler.sendMessage(msg);
            }
        };
        //註冊回調監聽接口
        SMSSDK.registerEventHandler(eventHandler);
    }

    @Override
    public void onClick(View v) {
        String phoneNums = inputPhoneEt.getText().toString();  //取出咱們輸入的手機號
        switch (v.getId()) {
            case R.id.login_request_code_btn:
                // 1. 判斷手機號是不是11位並且看格式是否合理
                if (!judgePhoneNums(phoneNums)) {
                    return;
                } // 2. 通過sdk發送短信驗證
                SMSSDK.getVerificationCode("86", phoneNums);

                // 3. 把按鈕變成不可點擊,並且顯示倒計時(正在獲取)
                requestCodeBtn.setClickable(false);
                requestCodeBtn.setText("重新發送(" + i + ")");
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        for (; i > 0; i--) {
                            handler.sendEmptyMessage(-9);
                            if (i <= 0) {
                                break;
                            }
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                        handler.sendEmptyMessage(-8);
                    }
                }).start();
                break;

            case R.id.login_commit_btn:
                //將收到的驗證碼和手機號提交再次覈對
                SMSSDK.submitVerificationCode("86", phoneNums, inputCodeEt
                        .getText().toString());
                break;
        }
    }

    /**
     *
     */
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == -9) {
                requestCodeBtn.setText("重新發送(" + i + ")");
            } else if (msg.what == -8) {
                requestCodeBtn.setText("獲取驗證碼");
                requestCodeBtn.setClickable(true);
                i = 30;
            } else {
                int event = msg.arg1;
                int result = msg.arg2;
                Object data = msg.obj;
                Log.e("event", "event=" + event);
                if (result == SMSSDK.RESULT_COMPLETE) {
                    // 短信註冊成功後,返回MainActivity,然後提示
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交驗證碼成功
                        Toast.makeText(getApplicationContext(), "提交驗證碼成功",
                                Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(MainActivity.this,
                                Main2Activity.class);
                        Bundle bundle = new Bundle();
                        bundle.putString("userName",inputPhoneEt.getText().toString().trim());
                        intent.putExtras(bundle);
                        startActivity(intent);
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        Toast.makeText(getApplicationContext(), "正在獲取驗證碼",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        ((Throwable) data).printStackTrace();
                    }
                }
            }
        }
    };


    /**
     * 判斷手機號碼是否合理
     *
     * @param phoneNums
     */
    private boolean judgePhoneNums(String phoneNums) {
        if (isMatchLength(phoneNums, 11)
                && isMobileNO(phoneNums)) {
            return true;
        }
        Toast.makeText(this, "手機號碼輸入有誤!",Toast.LENGTH_SHORT).show();
        return false;
    }

    /**
     * 判斷一個字符串的位數
     * @param str
     * @param length
     * @return
     */
    public static boolean isMatchLength(String str, int length) {
        if (str.isEmpty()) {
            return false;
        } else {
            return str.length() == length ? true : false;
        }
    }

    /**
     * 驗證手機格式
     */
    public static boolean isMobileNO(String mobileNums) {
        /*
         * 移動:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
         * 聯通:130、131、132、152、155、156、185、186 電信:133、153、180、189、(1349衛通)
         * 總結起來就是第一位必定爲1,第二位必定爲3或5或8,其他位置的可以爲0-9
         */
        String telRegex = "[1][358]\\d{9}";// "[1]"代表第1位爲數字1,"[358]"代表第二位可以爲3、5、8中的一個,"\\d{9}"代表後面是可以是0~9的數字,有9位。
        if (TextUtils.isEmpty(mobileNums))
            return false;
        else
            return mobileNums.matches(telRegex);
    }

    @Override
    protected void onDestroy() {
        //反註冊回調監聽接口
        SMSSDK.unregisterAllEventHandler();
        super.onDestroy();
    }
}
.



MainActivity的佈局文件如下:

.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/login_input_phone_et"
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="107dp"
        android:ems="10"
        android:hint="請輸入手機號"
        android:inputType="phone" />

    <requestFocus />

    <EditText
        android:id="@+id/login_input_code_et"
        android:layout_width="170dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/login_input_phone_et"
        android:layout_below="@+id/login_input_phone_et"
        android:layout_marginTop="44dp"
        android:hint="請輸入驗證碼"
        android:inputType="textPassword"></EditText>

    <Button
        android:id="@+id/login_request_code_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/login_input_phone_et"
        android:layout_alignTop="@+id/login_input_code_et"
        android:text="獲取驗證碼" />

    <Button
        android:id="@+id/login_commit_btn"
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/login_input_code_et"
        android:layout_below="@+id/login_input_code_et"
        android:layout_marginTop="44dp"
        android:text="註冊" />

</RelativeLayout>
.


Main2Activity的代碼就很簡單了:

.
public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Bundle extras = getIntent().getExtras();
        String userName = extras.getString("userName");
        Toast.makeText(this, "尊敬的用戶"+userName+",您的賬號已驗證成功!!!!!!!!!!!!!!!", Toast.LENGTH_SHORT).show();
    }
}
.

項目直達下載通道爲:Demo_MOB_SMS


如有問題請多指正,您的指正使我更正確的前行.

發佈了26 篇原創文章 · 獲贊 39 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章