1. 程式人生 > >[置頂] mob簡訊驗證碼SMSSDK的使用

[置頂] mob簡訊驗證碼SMSSDK的使用

首先,很多第三方簡訊驗證碼都可以,為什麼我要選擇mob的呢?

因為mob 的簡訊驗證碼是完全免費,完~全~免~費~,所以老大就讓我用它安靜

其實,個人感覺mob 的簡訊驗證發生時間很不穩定,會延遲,而且未稽核之前一個手機號一天只允許請求5次,一個mob賬號一天最多傳送20次。

使用起來效率可能會相對比較低,但是,它是完~全~免~費~的~~~

請求流程:

1. 以使用者提供的手機號碼作為引數,請求連線到SMSSDK的伺服器

2. SMSSDK伺服器校驗號碼格式成功,請求簡訊服務商傳送簡訊驗證碼到該手機號

3. 手機終端接收到驗證碼,使用者輸入驗證碼

4. 驗證碼傳入應用後臺服務端,服務端通過SMSSDK介面驗證,再把驗證結果傳回手機端

功能實現過程:

分兩種,第一種是無GUI,第二種是有GUI

GUI是指,SMSSDK裡面有一個介面,呼叫這個介面可以使用SMSSDK已經為我們寫好的登入註冊佈局,簡訊驗證碼以及簡訊驗證回撥方法;

當不想使用SMSSDK裡面提供的佈局或者只是需要簡訊驗證碼時,呼叫第一種無GUI方法。

一、無GUI整合簡訊驗證碼的SMSSDK

2. 把Android SMSSDK v2.0.1.zip下的jar包放到專案的libs目錄下,還有其中的raw檔案(包括raw檔案中的so檔案)拉到專案的res中。如果找不到該檔案,可以修改SMSSDK-2.0.1檔案的格式為rar再從中獲取。

 

 

3. 配置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.GET_TASKS" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

```

<application>下新增activity

``` python

<activity

android:name="com.mob.tools.MobUIShell"

android:theme="@android:style/Theme.Translucent.NoTitleBar"

android:configChanges="keyboardHidden|orientation|screenSize"

android:windowSoftInputMode="stateHidden|adjustResize"/>

```

4. activity中寫程式碼,分2步執行,一載入,二傳送

 

//  appkeyappSecretmob申請的應用中獲取

// 初始化SDK,單例,可以多次呼叫;任何方法呼叫前,必須先初始化

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

// 其中引數第一個代表的是國家代號,86為中國

SMSSDK.getVerificationCode("86","手機號碼");

這樣就完成一個簡單請求簡訊驗證碼的功能。

伺服器驗證簡訊驗證碼必須先開啟伺服器驗證的開關,否則無法進行驗證。

 

二、有GUI介面整合呼叫

1. 有GUI整合大致與無GUI相同,需要在libs目錄下多加一個SMSSDKGUI-2.0.1.jar

 

2. 整合許可權配置(同無GUI介面一致)

3. 新增程式碼

``` python

//初始化

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

//呼叫程式碼開啟GUI頁面

//開啟註冊頁面

RegisterPage registerPage = new RegisterPage();

registerPage.setRegisterCallback(new EventHandler() {

public void afterEvent(int event, int result, Object data) {

// 解析註冊結果

if (result == SMSSDK.RESULT_COMPLETE) {

@SuppressWarnings("unchecked")

HashMap<String,Object> phoneMap = (HashMap<String, Object>) data;

String country = (String) phoneMap.get("country");

String phone = (String) phoneMap.get("phone");

// 提交使用者資訊

registerUser(country, phone);

}

}

});

registerPage.show(context);

 ```

static void

getSupportedCountries()
獲取簡訊目前支援的國家列表,在監聽中返回

static void

getVerificationCode(String country, String phone)
請求獲取簡訊驗證碼,在監聽中返回

static void

submitVerificationCode(String country, String phone, String code)
提交簡訊驗證碼,在監聽中返回

簡訊SDK不能支援所有國家的簡訊驗證,呼叫getSupportedCountries方法能獲取到SDK可以支援的國家列表和國家代號。

請求getVerificationCode的時間間隔不應該小於60秒,否則服務端會返回“操作過於頻繁”的錯誤。

submitVerificationCode用於向伺服器提交接收到的簡訊驗證碼,驗證成功後會通過EventHandler返回國家程式碼和電話號碼。

EventHandler是簡訊回撥介面,在使用之前必須先註冊,同樣,有註冊就有登出。

SMSSDK.registerEventHandler(EventHandler handler)註冊回撥介面

SMSSDK.unregisterEventHandler(EventHandler handler)登出回撥介面

registerEventHandler必須和unregisterEventHandler配套使用,否則可能造成記憶體洩漏。

``` python

// 簡訊回撥程式碼

EventHandler 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) {

                //提交驗證碼成功

}else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){

    //獲取驗證碼成功

}else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){

                //返回支援傳送驗證碼的國家列表

                }

              }else{                                                                 

                 ((Throwable)data).printStackTrace();

          }

      }

   };

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

```

流程圖:

引入服務端驗證介面走以下流程

 

1.手機端請求下發簡訊

2.SMSSDK伺服器請求簡訊服務商

3.簡訊服務商下發簡訊

4.手機端傳送簡訊驗證碼到開發者伺服器進行驗證

5.開發者伺服器傳送到SMSSDK伺服器進行驗證

6.SMSSDK伺服器返回開發者伺服器驗證結果

7.開發者伺服器把驗證結果返回手機端

在沒有簡訊服務端驗證介面的時候,我的伺服器需要知道使用者是否驗證成功是這樣走的

 

1. 手機端請求下發簡訊

2. SMSSDK伺服器請求簡訊服務商

3. 簡訊服務商下發簡訊

4. 手機端傳送簡訊驗證碼到SMSSDK伺服器進行驗證

5. SMSSDK伺服器返回手機端驗證結果

6. 手機端把驗證結果返回開發者伺服器

以上為個人的總結,疑問或者有不妥當之處,請指出

第一次寫部落格,好激動~~~得意

接下來會好好努力,堅持下去奮鬥