"fullLoad"app(三)之Mob短信验证的集成
来源:互联网 发布:php绑定域名 编辑:程序博客网 时间:2024/06/04 18:26
技术分析
很多时候,在项目中会用到短信验证服务。比如,为了让一个用户id与其手机号绑定,不让其反复注册,这时候可以使用短信验证的方式,在注册时填写手机号,服务器像移动端发送校验码,移动端填写正确的校验码之后,方可完成注册。
“fullLoad”app也采用短信验证的方式管理注册服务,将用户id与手机号绑定。在这里,我决定采用第三方库Mob,以下是介绍如何在项目中集成与使用MOb。
短信验证码Mob的集成
一、SMSSDK的下载
前往Mob官网SMSSDK下载区,下载最新版本的SMSSDK(本文是v3.0.0)
二、注册Mob账号,申请appkey与appsecret
注册Mob账号后,进入Mob开发者后台,点击“添加应用”按钮,添加本项目“fullLoad”,并为其添加产品SMSSDK。
可以看到,开发者后台自动生成了appkey与appsecret,并为“fullLoad”项目提供了SMSSDK短信验证码服务。接下来要做的就是开发环境的集成。
三、获取并导入SDK
解压刚刚下载的SMSSDK的压缩包,可以看到以下目录结构:
SMSSDK下存放的是短信SDK的全部内容,其内容为:
文件说明
如果你需要用GUI库(包装好的短信验证界面,会有MOb提供的短信验证对话框),则需要加入全部这四个文件,不需要可以去掉SMSSDKGUI。为了方便和ShareSDK一起集成,公共库依然打包成jar。
如果你同时使用ShareSDK,保留一份公共库就行(公共库版本一致或兼容)。
接下来将所需要的文件(本项目将4个文件都导入到了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'}
如图
四、添加代码
首先配置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的集成与使用了。
- "fullLoad"app(三)之Mob短信验证的集成
- Android开发:app工程集成mob短信验证码功能
- 短信验证(mob)
- 安卓短信验证功能-----快速集成Mob之SecurityCodeSDK
- 集成mob的SMSSDK获取短信验证码的Demo
- 集成Mob第三方的短信验证码功能
- Android之短信验证码(用的Mob短信验证)
- 『实践』Android之短信验证码(用的Mob短信验证)
- 快速集成Mob短信验证(附源码)
- 快速集成Mob短信验证(附源码)
- android短信验证之Mob
- “fullLoad” app(一)之介绍
- 短信验证安卓集成mob.com
- 集成短信验证码--Mob.com
- 短信验证安卓集成mob.com
- mob(sharedsdk)短信验证
- Android开发之MOB短信验证SDK的使用(一)
- Android开发之MOB短信验证SDK的使用(二)
- 版本控制
- 创建用户
- python 集合
- [精华分享][独立游戏][Steam][发行商]怎么发行自己的独立游戏以及相关维护
- PHP中使用会话控制(cookie & session)
- "fullLoad"app(三)之Mob短信验证的集成
- Android 同步异步区别
- Java线程之传统线程
- PhalconTools工具的使用
- Sql Api里面的executeQuery(),executeUpdate(),execute()的使用
- 如何使用mount挂载服务器
- 关于composer的使用
- c++学习笔记----指针函数
- c++学习笔记----void指针