android 验证码之短信验证(云之讯短信平台)
生活随笔
收集整理的這篇文章主要介紹了
android 验证码之短信验证(云之讯短信平台)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
好久沒更新過博客了。這段時間總算是忙完了,抽點時間出來更新下博客。這次跟大家帶來的是一個很簡單的短信驗證碼。相信這個驗證碼的功能基本上99的項目都需要用到,我這里是用的云之迅平臺,為什么要用這個平臺,因為原理很簡單,用起來也還不錯。
1、這里說下云之迅的實現原理,首先得去云之迅平臺去申請個開發者賬號,然后集成云之迅代碼。
2、代碼原理其實也很簡單,就是自己在本地生成一個多少位的驗證碼,然后把驗證碼等參數通過云之迅的接口發給云之迅,再通過云之迅給那臺手機發送短信驗證碼,然后得到驗證碼之后輸入驗證碼,跟一開始生成的驗證碼進行對比,如果匹配的話就算是驗證通過,當然也可以本地md5加密,當前demo是沒有進行驗證碼加密的。
首先看下效果動圖(由于隱私問題把電話號碼擋住了一部分):
好了,下面我們進入正題!!!!
1、下面我們先看目錄結構(紅線部分就是云之迅的代碼集成的部分,我們真正寫的只有一個MainActivity)
2、好了,咱們來看看MainActivity這個里面的代碼:
package com.wyw.smsdemo;import org.json.JSONException; import org.json.JSONObject;import android.app.Activity; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {// 確認按鈕private Button btn_enter;// 發送驗證碼private Button btn_send_code;// 驗證碼輸入框private EditText edit_code;// 手機號碼輸入框private EditText edit_phone;// 驗證碼private String code;/*** 短信平臺 Account sid*/public final static String SMS_SID = "";/*** 短信平臺 Auth Token*/public final static String SMS_TOKEN = "";/*** 短信平臺 SMS_APPID*/public final static String SMS_APPID = "";/*** 短信模板ID SMS_TEMPLATEID*/public final static String SMS_TEMPLATEID = "";//計時器private TimeCount timeCount;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_enter = (Button) findViewById(R.id.btn_enter);btn_send_code = (Button) findViewById(R.id.btn_send_code);edit_code = (EditText) findViewById(R.id.edit_code);edit_phone = (EditText) findViewById(R.id.edit_phone);btn_enter.setOnClickListener(this);btn_send_code.setOnClickListener(this);}/*** 內部類計時器*/private class TimeCount extends CountDownTimer {public TimeCount(long millisInFuture, long countDownInterval) {super(millisInFuture, countDownInterval);// 參數依次為總時長,和計時的時間間隔}@Overridepublic void onFinish() {// 計時完畢時觸發btn_send_code.setText("重新發送驗證碼");btn_send_code.setEnabled(true);}@Overridepublic void onTick(long millisUntilFinished) {// 計時過程顯示btn_send_code.setText((millisUntilFinished / 1000) + "后可重新發送驗證碼");btn_send_code.setEnabled(false);}}@Overrideprotected void onDestroy() {super.onDestroy();if (timeCount!=null) {timeCount.cancel();}}@Overridepublic void onClick(View v) {if (btn_enter == v) {//確認按鈕String code_lin = edit_code.getText().toString();if (TextUtils.isEmpty(code_lin)) {Toast.makeText(MainActivity.this, "驗證碼不能為空", Toast.LENGTH_SHORT).show();return;}if (code != null && code.equals(code_lin)) {Toast.makeText(MainActivity.this, "驗證成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this, "驗證失敗,請填寫正確的驗證碼", Toast.LENGTH_SHORT).show();}} else if (btn_send_code == v) {//發送驗證碼if (TextUtils.isEmpty(edit_phone.getText().toString())) {Toast.makeText(MainActivity.this, "手機號碼不能為空", Toast.LENGTH_SHORT).show();return ;}if (!isMobileNO(edit_phone.getText().toString())) {Toast.makeText(MainActivity.this, "手機號碼不合法", Toast.LENGTH_SHORT).show();return ;}sendSMS();}}/*** 驗證手機格式*/public static boolean isMobileNO(String mobiles) {/*移動:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188聯通:130、131、132、152、155、156、185、186電信:133、153、180、189、177(1349衛通)總結起來就是第一位必定為1,第二位必定為3或5或8,其他位置的可以為0-9*/String telRegex = "[1][134578]\\d{9}";//"[1]"代表第1位為數字1,"[358]"代表第二位可以為3、5、8中的一個,"\\d{9}"代表后面是可以是0~9的數字,有9位。if (TextUtils.isEmpty(mobiles)) {return false;} else {return mobiles.matches(telRegex);}}/*** 發送短信驗證碼*/private void sendSMS() {code = Math.round(Math.random() * 10000) + "";if (code.length() > 4) {code = code.substring(0, 4);} else if (code.length() < 4) {sendSMS();return;}new Thread(new Runnable() {public void run() {JsonReqClient client = new JsonReqClient();String result = client.sendVerificationCode(SMS_APPID, SMS_SID,SMS_TOKEN, code, edit_phone.getText().toString(), SMS_TEMPLATEID);//{"resp":{"respCode":"000000","templateSMS":{"createDate":"20140820145658","smsId":"d2c49329f363b802fb3531d9c67b54f8"}}}if (result != null && result.length() > 0) {try {JSONObject object = new JSONObject(result);if (object.has("resp")) {JSONObject item = object.getJSONObject("resp");//Code = 105122 同一天同一用戶不能發超過10條驗證碼(因運營商限制一般情況下不足5條)if (item.has("respCode") && item.getString("respCode").equals("000000")) {mHandler.sendEmptyMessage(0);} else {mHandler.sendEmptyMessage(1);}} else {mHandler.sendEmptyMessage(1);}} catch (JSONException e) {e.printStackTrace();mHandler.sendEmptyMessage(1);}} else {mHandler.sendEmptyMessage(1);}}}).start();}private Handler mHandler = new Handler() {@Overridepublic void dispatchMessage(Message msg) {switch (msg.what) {case 0:Toast.makeText(MainActivity.this, "短信驗證碼發送成功", Toast.LENGTH_SHORT).show();timeCount = new TimeCount(60000, 1000);timeCount.start();break;case 1:Toast.makeText(MainActivity.this, "短信驗證碼發送失敗", Toast.LENGTH_SHORT).show();break;}}}; }在代碼里面我們可以看到這4個常量參數,然而這4個參數是怎么獲取的呢?請往下看我會一一解釋!
/*** 短信平臺 Account sid*/public final static String SMS_SID = "";/*** 短信平臺 Auth Token*/public final static String SMS_TOKEN = "";/*** 短信平臺 SMS_APPID*/public final static String SMS_APPID = "";/*** 短信模板ID SMS_TEMPLATEID*/public final static String SMS_TEMPLATEID = "";首先是(短信平臺 Account sid,短信平臺 Auth Token)這2個參數,請看圖中紅色框框標出的部分,就可以知道咱們的這2個參數怎么獲得,當然前提是你必須得有個開發者賬號!!:
接著就是(短信平臺 SMS_APPID)這個參數的獲取了,這個參數呢你得先去“應用管理-應用列表”里面去把你的應用給添加起來,然后會出現個你的應用列表,然后點擊該應用就能看到該下圖:
最后這個參數呢(短信模板ID SMS_TEMPLATEID)也是在“應用管理-短信管理”里面有個創建短信模板的,請先創建短信的模板,我這里會跟你提供一個比較大眾的模板,當然了如果有不知道模板的規則是怎樣可以點擊下圖紅框標記的查看規則說明。
當模板創建成功之后就得到咱們需要的(短信模板ID SMS_TEMPLATEID)這個參數啦!請看下圖
這樣我們就拿到所有的參數了,然后調用上面代碼的這段代碼(原理也說了本地生成一個多少位的驗證碼,然后通過接口傳給云之迅平臺,由云之迅平臺發送短信,收到短信后與本地做驗證,當前也可以進行加密之后的驗證):
/*** 發送短信驗證碼*/private void sendSMS() {code = Math.round(Math.random() * 10000) + "";if (code.length() > 4) {code = code.substring(0, 4);} else if (code.length() < 4) {sendSMS();return;}new Thread(new Runnable() {public void run() {JsonReqClient client = new JsonReqClient();String result = client.sendVerificationCode(SMS_APPID, SMS_SID,SMS_TOKEN, code, edit_phone.getText().toString(), SMS_TEMPLATEID);//{"resp":{"respCode":"000000","templateSMS":{"createDate":"20140820145658","smsId":"d2c49329f363b802fb3531d9c67b54f8"}}}if (result != null && result.length() > 0) {try {JSONObject object = new JSONObject(result);if (object.has("resp")) {JSONObject item = object.getJSONObject("resp");//Code = 105122 同一天同一用戶不能發超過10條驗證碼(因運營商限制一般情況下不足5條)if (item.has("respCode") && item.getString("respCode").equals("000000")) {mHandler.sendEmptyMessage(0);} else {mHandler.sendEmptyMessage(1);}} else {mHandler.sendEmptyMessage(1);}} catch (JSONException e) {e.printStackTrace();mHandler.sendEmptyMessage(1);}} else {mHandler.sendEmptyMessage(1);}}}).start();}本篇博客就到這里,如果有有疑問的歡迎留言討論。同時希望大家多多關注我的博客,多多支持我。
尊重原創轉載請注明:(http://blog.csdn.net/u013895206) !
下面是地址傳送門:址:http://download.csdn.net/detail/u013895206/9608223
總結
以上是生活随笔為你收集整理的android 验证码之短信验证(云之讯短信平台)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 官宣:教父级讲师李明加入尚硅谷
- 下一篇: nodejs短信验证码,基于云之讯