天天看点

集成第三方sdk验证短信校验

很多的时候,项目中进行实名制注册都需要进行短信码进行校验,下面介绍一下我项目中集成mob.com的短信验证:

一、在mob.com上进行注册,并申请项目的key

注册成功后进入后台中心,上传项目应用的apk,通过mob官网认证审核通过后,AppKey和App Secret方有效

二、下载短信验证码SDK

集成第三方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>