"fullLoad"app(三)之Mob短信验证的集成

来源:互联网 发布:php绑定域名 编辑:程序博客网 时间:2024/06/04 18:26

技术分析

很多时候,在项目中会用到短信验证服务。比如,为了让一个用户id与其手机号绑定,不让其反复注册,这时候可以使用短信验证的方式,在注册时填写手机号,服务器像移动端发送校验码,移动端填写正确的校验码之后,方可完成注册。
“fullLoad”app也采用短信验证的方式管理注册服务,将用户id与手机号绑定。在这里,我决定采用第三方库Mob,以下是介绍如何在项目中集成与使用MOb。


短信验证码Mob的集成

一、SMSSDK的下载

前往Mob官网SMSSDK下载区,下载最新版本的SMSSDK(本文是v3.0.0)
SMSSDK下载

二、注册Mob账号,申请appkey与appsecret

注册Mob账号后,进入Mob开发者后台,点击“添加应用”按钮,添加本项目“fullLoad”,并为其添加产品SMSSDK。
申请appkey与appsecret
可以看到,开发者后台自动生成了appkey与appsecret,并为“fullLoad”项目提供了SMSSDK短信验证码服务。接下来要做的就是开发环境的集成。

三、获取并导入SDK

解压刚刚下载的SMSSDK的压缩包,可以看到以下目录结构:
SMSSDK目录结构
SMSSDK下存放的是短信SDK的全部内容,其内容为:
短信SDK
文件说明

文件名 说明 需求 MobCommons.jar Mob 通用公共库 必须 MobTools.jar Mob 工具公共库 必须 SMSSDK-<version>.aar SMSSDK 核心 必须 SMSSDKGUI-<version>.aar SMSSDK GUI 开源库 可选

如果你需要用GUI库(包装好的短信验证界面,会有MOb提供的短信验证对话框),则需要加入全部这四个文件,不需要可以去掉SMSSDKGUI。为了方便和ShareSDK一起集成,公共库依然打包成jar。
如果你同时使用ShareSDK,保留一份公共库就行(公共库版本一致或兼容)。


接下来将所需要的文件(本项目将4个文件都导入到了libs)导入libs:
导入至libs
并点击同步按钮
同步按钮
直至jar文件出现向右的箭头说明上述jar包依赖已经引入到了项目中。


最后在Module的build.gradle里面将libs加入仓库(repositories)和依赖(dependencies ):

repositories{    flatDir{        dirs 'libs' //就是你放aar的目录地址    }}dependencies {    ....//你的其他依赖    compile name:'SMSSDK-<version>',ext:'aar'    compile name:'SMSSDKGUI-<version>',ext:'aar'}

如图
build.gradle

四、添加代码

首先配置AndroidManifest.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" />

添加以下Activity:

<activity   android:name="com.mob.tools.MobUIShell"   android:theme="@android:style/Theme.Translucent.NoTitleBar"   android:configChanges="keyboardHidden|orientation|screenSize"   android:windowSoftInputMode="stateHidden|adjustResize"/>

按照官网的做法,应该在在Application节点下添加属性:

android:name="com.mob.MobApplication"

但是因为我引用是自己的MyApplication,所以我就让MyApplication继承自MobApplication。


在Application节点下添加以下meta-data:

<!--MOb key--><!-- 通过AndroidManifest配置AppKey和AppSecret,如果你选择通过代码配置,则不需要配置以下meta-data --><meta-data android:name="Mob-AppKey" android:value="你的AppKey"/><meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>

Mob的使用

public class RegisterActivity extends Activity implements View.OnClickListener{    EditText et_phone,et_number,et_userName,et_password;    Button btn_sendToPhone,btn_sendToRemote;    CheckBox cb_car,cb_goods;    private EventHandler eventHandler;    private byte type;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_register);        /*MOB的初始化*/        // 如果希望在读取通信录的时候提示用户,可以添加下面的代码,并且必须在其他代码调用之前,否则不起作用;如果没这个需求,可以不加这行代码        //SMSSDK.setAskPermisionOnReadContact(boolShowInDialog)        // 创建EventHandler对象        //MobSDK.init(getApplicationContext(), Constants.MOB_APPKEY,Constants.MOB_APPSECRET);        eventHandler = new EventHandler() {            public void afterEvent(int event, int result, Object data) {                if (data instanceof Throwable) {                    Throwable throwable = (Throwable)data;                    String msg = throwable.getMessage();                    Toast.makeText(RegisterActivity.this, msg, Toast.LENGTH_SHORT).show();                } else if(result == SMSSDK.RESULT_COMPLETE){                    //回调完成                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE){                        //提交验证码成功                        Toast.makeText(RegisterActivity.this, "提交验证码成功",                                Toast.LENGTH_SHORT).show();                        //注册用户到服务器                        Map<String,Object> map=new HashMap<String,Object>();                        map.put("phone",et_phone.getText().toString());                        map.put("userName",et_userName.getText().toString());                        map.put("password",et_password.getText().toString());                        map.put("userType",type);                        JSONObject jsonObject=JsonRequestUtil.asyncPost(JsonRequestUtil.getServerRequestUrl("/user/muser_regist"),(HashMap) map);                        Gson gson=new Gson();                        try {                            JSONObject jsonEntity=jsonObject.getJSONObject("userEntity");                            UserEntity userEntity=gson.fromJson(jsonEntity.toString(),UserEntity.class);                            String string=userEntity.getPhone();                            //跳转到登录界面                            Intent intent=new Intent(RegisterActivity.this,LoginActivity.class);                            Bundle bundle=new Bundle();                            bundle.putParcelable("userEntity_data",userEntity);                            bundle.putString("Activity",this.getClass().toString());                            intent.putExtras(bundle);                            startActivity(intent);                        } catch (JSONException e) {                            e.printStackTrace();                        }                    }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){                        //获取验证码成功                        Toast.makeText(RegisterActivity.this, "验证码已经发送",                                Toast.LENGTH_SHORT).show();                    }                }            }        };        // 注册监听器        SMSSDK.registerEventHandler(eventHandler);        initView();    }    private void initView(){        et_phone=(EditText)findViewById(R.id.et_register_phone);        et_number=(EditText)findViewById(R.id.et_register_number);        et_password=(EditText)findViewById(R.id.et_register_pasw);        et_userName=(EditText)findViewById(R.id.et_register_username);        btn_sendToPhone=(Button)findViewById(R.id.btn_register_sendToPhone);        btn_sendToRemote=(Button)findViewById(R.id.btn_register_sendToRemote);        cb_car=(CheckBox)findViewById(R.id.cb_register_car);        cb_goods=(CheckBox)findViewById(R.id.cb_register_goods);        //注册监听事件        btn_sendToPhone.setOnClickListener(this);        btn_sendToRemote.setOnClickListener(this);        cb_car.setOnClickListener(this);        cb_goods.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.btn_register_sendToPhone:                //向手机发送验证码                if(!TextUtils.isEmpty(et_phone.getText().toString())){                    SMSSDK.getVerificationCode("86",et_phone.getText().toString());                }else {                    Toast.makeText(RegisterActivity.this,"电话不能为空",Toast.LENGTH_SHORT).show();                }                break;            case R.id.btn_register_sendToRemote:                //注册                if(TextUtils.isEmpty(et_number.getText().toString())){                    Toast.makeText(RegisterActivity.this,"验证码不能为空",Toast.LENGTH_SHORT).show();                }else if(TextUtils.isEmpty(et_userName.getText().toString())){                    Toast.makeText(RegisterActivity.this,"用户名不能为空",Toast.LENGTH_SHORT).show();                }else if(TextUtils.isEmpty(et_password.getText().toString())) {                    Toast.makeText(RegisterActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show();                }else {                    SMSSDK.submitVerificationCode("86",et_phone.getText().toString(),et_number.getText().toString());                }                break;            case R.id.cb_register_car:                if(cb_car.isChecked()){                    type= Constants.USERTYPE_CAR;                }                break;            case R.id.cb_register_goods:                if(cb_goods.isChecked()){                    type=Constants.USERTYPE_GOODS;                }                break;            default:                break;        }    }    @Override    protected void onDestroy() {        super.onDestroy();        //注销SDK        SMSSDK.unregisterEventHandler(eventHandler);    }}

以上,就是Mob的集成与使用了。

原创粉丝点击