編輯:關於Android編程
基本上很多驗證都需要用到短信服務,注冊登錄時或有消息通知時需要對用戶進行驗證,這時會向用戶發送一條短信。Mob是一個移動開發者服務平台,他可以為我們提供第三方的短信服務功能。開發者可以通過官網,注冊登錄並創建應用項目,獲取對應的Key,以及 Secret,就可以使用官方短信SDK。
個人覺得Mob最大的優勢在於,提供數據統計,對於應用分析是一個很好的數據參考。

正如前面所說,要想使用Mob第三方短信驗證服務,開發者需要通過官網,注冊登錄並創建應用項目,獲取對應的Key,以及 Secret,就可以使用官方短信SDK。
進入官網,在右上角進行注冊並登錄

2.2.1
登錄成功後,進入後台

2.2.2
啟用短信應用SDK

2.2.3
添寫應用信息,短信信息中會附有應用名稱

2.2.4
得到key值以及secret

2.3.1
可以通過官網導航欄進入短信SDK界面

也可以直接通過該鏈接:
http://download.csdn.net/download/abrazen_zz/9644555 進行下載
2.3.2
選擇IDE版本

這裡只講解Android Studio導入方式
2.4.1
打開下載好的SDK,在SMSSDK下,將以下標出的四個文件導入到項目app的libs目錄下(如果沒有libs文件夾可以直接新建)。
SMSSDK目錄如下:

2.4.2
在build.gradle下,加上藍圈中的這幾句。
項目結構:

考慮到等待時間較長,這裡省略輸入手機號碼界面,短信發至另外部手機,效果如下:

3.2.1
添加如下的權限:
3.2.2
在application標簽下添加跳轉界面的Activity配置:
windowsoftinputmode="stateHidden|adjustResize">
在你要跳轉到短信頁面時,按順序加入以下步驟的代碼
3.3.1
啟動時初始化
SMSSDK.initSDK(this, "您的appkey", "您的appsecret");
3.3.2
發送短信驗證碼
短信SDK內置了開源的GUI功能,您可以通過調用下面的代碼打開短信驗證頁面:
//創建注冊頁面
RegisterPage registerPage = new RegisterPage();
//顯示界面
registerPage.show(MainActivity.this);
//回調函數
registerPage.setRegisterCallback(new EventHandler() {
public void afterEvent(int event, int result, Object data) {
// 解析注冊結果
if (result == SMSSDK.RESULT_COMPLETE) {
@SuppressWarnings("unchecked")
HashMap phoneMap = (HashMap) data;
String country = (String) phoneMap.get("country");
String phone = (String) phoneMap.get("phone");
Toast.makeText(MainActivity.this, "驗證成功", Toast.LENGTH_SHORT).show();
// 提交用戶信息(此方法可以不調用)
//registerUser(country, phone);
}
}
});
只要初始化並顯示短信驗證界面,剩下的SDK都封裝好了。我們也可以監聽短信驗證的每個步驟,如請求獲取驗證短信,驗證成功,驗證失敗等等。
這裡使用setRegisterCallback()為短信添加一個EventHandler監聽方法,result == SMSSDK.RESULT_COMPLETE即驗證碼驗證成功後的監聽。
具體關於短信驗證的回調函數在下面有做分析,在這裡只是簡單的參考。
這裡是我自己制作的頁面,點擊驗證按鈕就會調用官方提供接口上傳手機號碼,從而請求下發短信。效果如下:

4.2.1
同理,這裡需要在AndroidManifest.xml中添加權限,因為不需要調用界面,所以不需要配置< activity>< /activity>.
4.2.2
在點擊事件,添加如下代碼:
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1)
Toast.makeText(mActivity, "回調完成", Toast.LENGTH_SHORT).show();
else if (msg.what == 2)
Toast.makeText(mActivity, "提交驗證碼成功", Toast.LENGTH_SHORT).show();
else if (msg.what == 3)
Toast.makeText(mActivity, "獲取驗證碼成功", Toast.LENGTH_SHORT).show();
else if (msg.what == 4)
Toast.makeText(mActivity, "返回支持發送國家驗證碼", Toast.LENGTH_SHORT).show();
}
};
//回調函數
EventHandler eh = new EventHandler() {
@Override
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) {
handler.sendEmptyMessage(1);
//回調完成
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
//提交驗證碼成功
handler.sendEmptyMessage(2);
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
//獲取驗證碼成功
handler.sendEmptyMessage(3);
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
//返回支持發送驗證碼的國家列表
handler.sendEmptyMessage(4);
}
} else {
((Throwable) data).printStackTrace();
}
}
};
SMSSDK.initSDK(this, "您的appkey", "您的appsecret");//初始化
SMSSDK.registerEventHandler(eh); //注冊短信回調
SMSSDK.getVerificationCode("86", phone);//請求獲取短信驗證碼
這裡使用registerEventHandler()方法為短信驗證增加一個EventHandler的監聽對象。
其次,這裡只是請求下發短信到手機。並未進行判斷驗證碼是否准確。
可以通過
submitVerificationCode(String country, String phone, String code)
對短信進行驗證。請求成狗與否,驗證成功與否會調用回調函數EventHandler。
5. 監聽器(回調接口)其中的EventHandler即為操作回調。它包括4個方法,分別為:
public void onRegister(); //注冊監聽時被觸發 public void beforeEvent(int event, Object);//操作執行前被觸發 public void afterEvent(int event, int result, Object data);//操作結束時被觸發(即相當於輸入手機號碼並點擊了驗證) public void onUnregister();//解除監聽時被觸發
其中要注意的是:afterEvent在操作結束時被觸發,event表示操作的類型但是,data表示事件操作結果,其具體取值根據參數result而定。result是操作結果,為SMSSDK.RESULT_COMPLETE表示操作成功,為SMSSDK.RESULT_ERROR表示操作失敗。
當result=SMSSDK.RESULT_COMPLETE時先判斷result,再判斷event,之後直接將data強壯成對應的類型即可。

短信SDK采用“廣播”的方式發送操作結果。每次調用registerEventHandler都會設置創建新的EventHandler。
為了避免EventHandler注冊後不再使用而造成內存洩漏,請務必在確定不使用某個EventHandler時,需要解除注冊,方法如下:
SMSSDK.unregisterEventHandler(EventHandler);
在EventHandler的4個回調方法都可能不在UI線程下,因此如果要在其中執行UI操作,請務必使用Handler發送一個消息給UI線程處理。
6. 智能短信驗證從Android 1.3.1版本開始,我們新增了智能驗證功能。智能驗證是指您的手機號最近一次已經在Mob平台的SMSSDK驗證過。此時就不再下發短信到該手機上,直接通過驗證。當用戶手機未通過智能驗證時,則依然需要下發短信/語音驗證碼的方式驗證手機號的有效性。
如果你不想使用此功能,可以在短信的後台關閉,默認是打開。
6.1使用智能驗證智能驗證依然在獲取短信驗證的api(SMSSDK.getVerificationCode)裡,只是操作回調中,需要判斷一下。當result=SMSSDK.RESULT_COMPLETE,則data的類型為Boolean,你需要判斷一下,如果為true,便是智能驗證。
調用代碼如下:
if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
if(result == SMSSDK.RESULT_COMPLETE) {
boolean smart = (Boolean)data;
if(smart) {
//通過智能驗證
} else {
//依然走短信驗證
}
}
}
7. 服務器短信服務之前,短信驗證碼正確與否是在客戶端調用submitVerificationCode(String country, String phone, String code);進行判斷。
Mob提供服務器短信服務,即在驗證碼正確與否由自己的服務器調用相應的代碼進行判斷。這樣,客戶端只需要將獲取到的短信驗證碼提交到自己的服務器。再由自己的服務器向短信驗證的服務器去判定。
7.1接口使用第一步:開通服務端驗證開關
免費短信驗證碼SDK/應用管理/短信設置 , 把服務端驗證接口開關開啟

第二步:請求接口驗證短信<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxjb2RlPsfrx/O12Na3zqqjujxhIGhyZWY9"https://webapi.sms.mob.com/sms/verify">https://webapi.sms.mob.com/sms/verify
請求方式: POST
請求參數

返回結果
{status:200}
8. 錯誤碼參考8.1本地錯誤碼:
8.2服務器錯誤碼:


如下,這是驗證碼輸入錯誤Android studio 報的錯誤..

有了狀態碼,就能知道到底是本地發生錯誤還是服務器,具體是什麼錯誤。
9. 附加9.1權限修改9.1.1
SMSSDK中用到的權限
普通組:
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.INTERNET
android.permission.GET_TASKS
謹慎組:
android.permission.READ_PHONE_STATE
android.permission.RECEIVE_SMS
android.permission.READ_SMS
android.permission.READ_CONTACTS
android.permission.WRITE_EXTERNAL_STORAGE
這些權限一般在Manifest文件中按需加入
9.1.2
6.0權限
因為6.0權限授權的改變,即使你在Manifest中加入,有些權限依然需要獲得用戶的手動授權。由於手動授權在SDK中不好做,
它會中斷SDK的初始化,因此需要開發者自己實現權限授權。
上面普通組中的只需在manifest文件中加入即可。謹慎組中的需要額外授權。
如果你需要智能驗證,請授權READ_PHONE_STATE,READ_SMS。
如果你需要通訊錄功能,請授權READ_CONTACT。
如果你需要讀取SD卡,請授權WRITE_EXTERNAL_STORAGE
如果用到UI庫中的自動讀取驗證碼,請授權RECEIVE_SMS
具體授權過程請參考官方教材:
http://developer.android.com/training/permissions/index.html
9.2mob規則mob規則是指,對短信數量及各方面做了限制。
具體參考該鏈接: http://wiki.mob.com/smssdk2-x-x%E9%BB%98%E8%AE%A4%E8%A7%84%E5%88%99/
Android學習路線(十五)Activity生命周期——重新創建(Recreating)一個Activity
先占個位置,下次翻譯~ :p There are a few scenarios in which your activity is destroyed due t
微信支付終於成功了(安卓、iOS)在此分享
經過了幾天的痛苦煎熬,終於把微信支付調通,整個調試過程很痛苦,痛苦的主要來源是微信支付的調試真的是,以前調試公眾號支付也是一波三折啊。好吧,開始!首先說明,我這裡主要沒有
Android聲音焦點----從音樂回到Luncher調節音量顯示的是Music的音量
聲音的類型有:定義在AudioSystem.java文件中 /* The default audio stream */public static final
自定義控件之滑動按鈕
1.創建一個類繼承viewpublic class MyToggleButton extends View { private static final String N