转载请注明住处: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(); }