Android從零單排之免費短信驗證

轉載請註明住處:http://blog.csdn.net/crazy1235/article/details/41912003html

介紹

       短信驗證功能你們都很是熟悉了。在很是多地方都能見到,註冊新用戶或者短息驗證支付等。短信驗證利用短信驗證碼來註冊會員。大大減小了非法註冊,很是大程度上提升了用戶帳戶的安全性。java

   眼下市面上已經有了很是多提供短信驗證的服務商,有收費的。也有免費的。android

假設是我的的開發人員,用免費的是最划算的了!如下我就介紹一個免費的短信驗證平臺---Mob.com安全

   Mob平臺提供的短信驗證功能可以實現高速的驗證和匹配通信錄好友功能,並且能爲每個app天天提供10000條免費短信驗證。很是多開發人員都想在本身的app中集成短信驗證功能,如下咱們就來體驗一下免費的」快感「吧。app

應用

       1. 首先需要註冊成爲mob平臺用戶。而後進入控制中心中的【免費短信驗證碼SDK】。在界面上點擊【加入新應用】加入本身的應用。這一步驟完畢以後,會給你提供一個AppKey和一個App Secret。需要把這兩個碼記下來,如下有重要用處。ide


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



       SMSSDK就是平臺提供的驗證短信的SDK,sample目錄是一個demo。post

       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標籤下加入例如如下信息:

<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線程處理。

    如下看個人樣例吧:

/**
	 * 初始化短信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
			 *            事件操做的結果
			 */
			@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:
			// 1. 經過規則推斷手機號
			if (!judgePhoneNums(phoneNums)) {
				return;
			} // 2. 經過sdk發送短信驗證
			SMSSDK.getVerificationCode("86", phoneNums);

			// 3. 把button變成不可點擊,並且顯示倒計時(正在獲取)
			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();

			// 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();
					}
				}
			}
		}
	};
@Override
	protected void onDestroy() {
		super.onDestroy();
		//
		this.unregisterReceiver(smsBroadcastReceiver);
		SMSSDK.unregisterAllEventHandler();
	}

總結

        至此,一個短信驗證功能就已經實現了。這個平臺有一些限制,app必須聯網。驗證碼僅僅能是4位。還有就是驗證短信不能本身定義,僅僅能是  【xxxx】xxxx的驗證碼:7521。  這樣的形式的。假設開發人員不但願有這些限制的話,我看僅僅能找運營商合做了。

下載

       Demo下載地址!
相關文章
相關標籤/搜索