很多的時候,項目中進行實名制注冊都需要進行短信碼進行校驗,下面介紹一下我項目中內建mob.com的短信驗證:
一、在mob.com上進行注冊,并申請項目的key
注冊成功後進入背景中心,上傳項目應用的apk,通過mob官網認證稽核通過後,AppKey和App Secret方有效
二、下載下傳短信驗證碼SDK

裡面有有API的說明文檔和相關Demo,及所需要的jar包和.so包,可通過eclipse或者android studio內建相關包進行開發
三、項目代碼示範
1、manifest.xml中加入下列權限
<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.READ_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2、SMSSDK中的核心代碼
//初始化SDK
SMSSDK.initSDK(this, APPKEY, APPSECRET);
EventHandler eventHandler = new EventHandler() {
public void afterEvent(int event, int result, Object data) {
Message msg = new Message();
msg.what=MSG_VERIFY_SUCCESS;
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
handler.sendMessage(msg);
}
};
// 注冊回調監聽接口
SMSSDK.registerEventHandler(eventHandler);
3、MainActivity.java
package cn.sms.verify;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
public class MainActivity extends Activity implements OnClickListener {
private Button mVerifyBtn;
private boolean ready;
private EditText mPhoneName;
// 填寫從短信SDK應用背景注冊得到的APPKEY和APPSECRET
private static String APPKEY = "yourkey";
private static String APPSECRET = "yousecret";
private static final int MSG_SEND_SHOW=0X1100;
private static final int MSG_RE_SEND=0X1101;
private static final int MSG_VERIFY_SUCCESS=0X1102;
private Handler handler=new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SEND_SHOW:
int i=(Integer) msg.obj;
mVerifyBtn.setText(i+R.string.verify_code_tips);
break;
case MSG_RE_SEND:
mVerifyBtn.setClickable(true);
mVerifyBtn.setText(R.string.btn_verify_name);
break;
case MSG_VERIFY_SUCCESS:
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(MainActivity.this, "送出驗證碼成功",
Toast.LENGTH_SHORT).show();
}else if(event==SMSSDK.EVENT_GET_VERIFICATION_CODE)
{
Toast.makeText(MainActivity.this, "驗證碼已經發送",
Toast.LENGTH_SHORT).show();
}else{
}
}//if
break;
default:
break;
}//switch
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initSDK();
initViews();
initListens();
}
private void initSDK() {
//初始化SDK
SMSSDK.initSDK(this, APPKEY, APPSECRET);
EventHandler eventHandler = new EventHandler() {
public void afterEvent(int event, int result, Object data) {
Message msg = new Message();
msg.what=MSG_VERIFY_SUCCESS;
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
handler.sendMessage(msg);
}
};
// 注冊回調監聽接口
SMSSDK.registerEventHandler(eventHandler);
ready=true;
}
private void initListens() {
mVerifyBtn.setOnClickListener(this);
}
private void initViews() {
mVerifyBtn=(Button) findViewById(R.id.btn_verify);
mPhoneName=(EditText) findViewById(R.id.phone_num);
}
@Override
public void onClick(View v) {
String phoneNum=mPhoneName.getText().toString();
switch (v.getId()) {
case R.id.btn_verify:
if (!isPhoneNumber(phoneNum)) {
return;
}
SMSSDK.getVerificationCode("86", phoneNum);
mVerifyBtn.setClickable(false);
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 30; i >0; i--) {
Message msg=new Message();
msg.what=MSG_SEND_SHOW;
msg.obj=i;
handler.sendMessage(msg);
if (i<=0) {
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}//for
handler.sendEmptyMessage(MSG_RE_SEND);
}
}).start();
break;
default:
break;
}
}
//手機号碼的驗證
public static boolean isPhoneNumber(String phonenum) {
Pattern p = Pattern
.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
Matcher m = p.matcher(phonenum);
return m.matches();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (ready) {
// 銷毀回調監聽接口
ready=false;
SMSSDK.unregisterAllEventHandler();
}
}
}
4、activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<EditText
android:id="@+id/phone_num"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/phone_tips"
/>
<Button
android:id="@+id/btn_verify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/phone_num"
android:layout_alignParentRight="true"
android:text="@string/btn_verify_name" />
</RelativeLayout>