標籤:驗證碼 回呼函數 message 地址 class void 匯入 sample 代碼
轉載請註明住處:http://blog.csdn.net/crazy1235/article/details/41912003
介紹
簡訊驗證功能大家都非常熟悉了。在非常多地方都能見到,注冊新使用者或者短息驗證支付等。簡訊驗證利用簡訊驗證碼來注冊會員。大大減少了非法注冊,非常大程度上提高了使用者賬戶的安全性。
眼下市面上已經有了非常多提供簡訊驗證的服務商,有收費的。也有免費的。
假設是個人的開發人員,用免費的是最划算的了!以下我就介紹一個免費的簡訊驗證平台---Mob.com
Mob平台提供的簡訊驗證功能能夠實現高速的驗證和匹配通訊錄好友功能,而且能為每一個app每天提供10000條免費簡訊驗證。非常多開發人員都想在自己的app中整合簡訊驗證功能,以下我們就來體驗一下免費的”快感“吧。
應用
1. 首先須要注冊成為mob平台使用者。然後進入控制中心中的【免費簡訊驗證碼SDK】。在介面上點擊【加入新應用】加入自己的應用。這一步驟完畢之後,會給你提供一個AppKey和一個App Secret。須要把這兩個碼記下來,以下有重要用處。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3JhenkxMjM1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >
2. 開啟網址http://sms.mob.com/Download)下載sdk。解壓之後例如以:
SMSSDK就是平台提供的驗證簡訊的SDK,sample目錄是一個demo。
3. 在ecliplse中匯入這個sdk,作為一個library。然後把它作為一個庫引入到你自己的項目中。
接下來,須要在AndroidManifest.xml中加入例如以下smssdk須要的許可權:
<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" />
在activity標籤下加入例如以下資訊:
<activityandroid:name="cn.smssdk.SMSSDKUIShell"android:configChanges="keyboardHidden|orientation|screenSize"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:windowSoftInputMode="stateHidden|adjustResize"/>
接下來,在你的項目啟動的時候。調用
SMSSDK.initSDK(this, “appkey”, “appsecret”);
第二個和第三個參數各自是你在mob平台上加入應用提供的兩個碼!
然後加入注冊回調監聽介面
SMSSDK.regeisterEventHandler(EventHandler);
當中EventHandler表示毀掉函數。包含四個方法。
public void onRegister();//在回調對象被注冊的時候被調用
public void beforeEvent(int event, Object data);//在操作之前被觸發
public void afterEvent(int event, int result, Object data);//在操作結束的時候被觸發
public void onUnregister();//在反注冊的時候被觸發
一般僅僅須要實現afterEvent方法就夠了。該方法有3個參數,event表示操作的類型。result表示操作的結果,data表示操作返回的資料。
比較經常使用的event有 EVENT_GET_VERIFICATION_CODE(擷取驗證碼)、EVENT_SUBMIT_VERIFICATION_CODE(提交驗證碼)。
在處理完畢之後。須要調用反注冊將其銷毀
SMSSDK.unresigterEventHandler(EventHandler);
注意:EventHandler的四個回呼函數都不能在UI線程中執行。須要使用handler發送訊息給UI線程處理。
以下看我的範例吧:
/** * 初始化簡訊SDK */private void initSDK() {SMSSDK.initSDK(this, "xxxxxx", "xxxxxxxx");EventHandler eventHandler = new EventHandler() {/** * 在操作之後被觸發 * * @param event * 參數1 * @param result * 參數2 SMSSDK.RESULT_COMPLETE表示操作成功,為SMSSDK. * RESULT_ERROR表示操作失敗 * @param data * 事件操作的結果 */@Overridepublic 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);}
@Overridepublic void onClick(View v) {String phoneNums = phoneNumEt.getText().toString();switch (v.getId()) {case R.id.back_iv:this.finish();KeyBoardUtils.closeKeybord(phoneNumEt, RegisterActivity.this);break;case R.id.request_code_btn:// 1. 通過規則推斷手機號if (!judgePhoneNums(phoneNums)) {return;} // 2. 通過sdk傳送簡訊驗證SMSSDK.getVerificationCode("86", phoneNums);// 3. 把button變成不可點擊,而且顯示倒計時(正在擷取)requestCodeBtn.setClickable(false);requestCodeBtn.setText("又一次發送(" + i-- + ")");new Thread(new Runnable() {@Overridepublic void run() {for (int i = 30; i > 0; i--) {handler.sendEmptyMessage(-9);if (i <= 0) {break;}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}handler.sendEmptyMessage(-8);}}).start();// 4. 開啟廣播來接受讀取簡訊break;case R.id.commit_btn:// judgePhoneNums(phoneNums);SMSSDK.submitVerificationCode("86", phoneNums, inputCodeEt.getText().toString());createProgressBar();// 驗證通過之後。將smssdk注冊代碼登出// SMSSDK.unregisterEventHandler(eventHandler);break;case R.id.clear_phone_iv:phoneNumEt.setText("");break;case R.id.clear_code_iv:inputCodeEt.setText("");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);} 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(RegisterActivity.this,MainActivity.class);startActivity(intent);} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {Toast.makeText(getApplicationContext(), "驗證碼已經發送",Toast.LENGTH_SHORT).show();} else {((Throwable) data).printStackTrace();}}}}};
@Overrideprotected void onDestroy() {super.onDestroy();//this.unregisterReceiver(smsBroadcastReceiver);SMSSDK.unregisterAllEventHandler();}
總結 至此,一個簡訊驗證功能就已經實現了。這個平台有一些限制,app必須連網。驗證碼僅僅能是4位。還有就是驗證簡訊不能自己定義,僅僅能是 【xxxx】xxxx的驗證碼:7521。 這樣的形式的。假設開發人員不希望有這些限制的話,我看僅僅能找電訊廠商合作了。下載 Demo!
Android從零單排之免費簡訊驗證