轉載請註明住處:http://blog.csdn.net/crazy1235/article/details/41912003html
介紹
短信驗證功能你們都很熟悉了。在不少地方都能見到,註冊新用戶或者短息驗證支付等。短信驗證利用短信驗證碼來註冊會員,大大下降了非法註冊,很大程度上提升了用戶帳戶的安全性。java
目前市面上已經有了不少提供短信驗證的服務商,有收費的,也有免費的。若是是我的的開發者,用免費的是最划算的了!下面我就介紹一個免費的短信驗證平臺---Mob.comandroid
Mob平臺提供的短信驗證功能能夠實現快速的驗證和匹配通信錄好友功能,而且能爲每一個app天天提供10000條免費短信驗證。不少開發者都想在本身的app中集成短信驗證功能,下面咱們就來體驗一下免費的」快感「吧!安全
應用
1. 首先須要註冊成爲mob平臺用戶,而後進入控制中心中的【免費短信驗證碼SDK】,在界面上點擊【添加新應用】添加本身的應用。這一步驟完成以後,會給你提供一個AppKey和一個App Secret。須要把這兩個碼記下來,下面有重要用處。app

2. 打開網址http://sms.mob.com/Download)下載sdk。解壓以後以下圖:ide

SMSSDK就是平臺提供的驗證短信的SDK,sample文件夾是一個demo。函數
3. 在ecliplse中導入這個sdk,做爲一個library,而後把它做爲一個庫引入到你本身的項目中。this

接下來,須要在AndroidManifest.xml中添加以下smssdk須要的權限:spa
- <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標籤下添加以下信息:.net
- <activity
- android: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線程處理。
下面看個人例子吧:
- private void initSDK() {
- SMSSDK.initSDK(this, "xxxxxx", "xxxxxxxx");
- 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 = 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:
-
- if (!judgePhoneNums(phoneNums)) {
- return;
- }
- SMSSDK.getVerificationCode("86", phoneNums);
-
-
- requestCodeBtn.setClickable(false);
- requestCodeBtn.setText("從新發送(" + i-- + ")");
- new Thread(new Runnable() {
- @Override
- public 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();
-
-
-
- break;
- case R.id.commit_btn:
-
- SMSSDK.submitVerificationCode("86", phoneNums, inputCodeEt
- .getText().toString());
- createProgressBar();
-
-
- 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) {
-
- 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();
- }
- }
- }
- }
- };
- @Override
- protected void onDestroy() {
- super.onDestroy();
-
- this.unregisterReceiver(smsBroadcastReceiver);
- SMSSDK.unregisterAllEventHandler();
- }
總結
至此,一個短信驗證功能就已經實現了。這個平臺有一些限制,app必須聯網,驗證碼只能是4位。還有就是驗證短信不能自定義,只能是 【xxxx】xxxx的驗證碼:7521。 這種形式的。若是開發者不但願有這些限制的話,我看只能找運營商合做了。
下載