Android开发工程中集成mob短信验证码功能的方法

Android开发工程中集成mob短信验证码功能的方法,第1张

概述一.前言现在的app基本上都需要用到短信功能,注册时或者有消息通知时需要给用户发送一条短信,但是对于个人开发者来说,去买第三方的短信服务实在是有点奢侈,很好的是mob为我们提供了免费的短信验证码服务功能,我

一.前言

现在的app基本上都需要用到短信功能,注册时或者有消息通知时需要给用户发送一条短信,但是对于个人开发者来说,去买第三方的短信服务实在是有点奢侈,很好的是mob为我们提供了免费的短信验证码服务功能,我不是打广告,的确觉得这项服务很不错。那么下面就简单讲一下如何在自己的工程里集成mob的短信功能,其实整个流程并不复杂,只是个人觉得mob的官方文档有点小乱,官方Demo也有点小复杂,同时有一些细节地方容易被忽视,也会导致一些问题。
PS:太喜欢mob的logo了。

二.实现过程

本篇只涉及AndroID,如果是IOS系统,还望自己斟酌,希望本篇文章也能给您提供帮助,同时IDE是AndroID Studio。

1.key申请

申请地址:http://www.mob.com,在产品中心选择短信验证码SDK,然后完成相应的注册和申请工作;
进入自己的后台中心,就可以看见自己的App Key和App Secret:

整体趋势栏给我们展示了一些短信服务使用情况。未上线登记时,我们可以免费使用20条/天,如果需求量比较大,我们可以在自己的工程里集成了mob短信,然后上线登记,应该可以获得更多的免费短信条数,暂未尝试。

2.下载SDK

在SDK下载栏目选择SMS for AndroID,然后选择相应IDE对应的SDK即可(本篇IDE是as)

 

下载后大概是这样:

3.集成过程

申请到了key和secret后就是集成到自己的工程中了。mob主要提供两种接口方式:1)使用官方自带的UI;2)使用无GUI接口。

3.1.配置SDK

这已经是使用第三方接口的老规矩了。官网文档我就不贴了,着实看着不舒服,在这里只贴自己的。

首先是在工程的libs下添加jar包和.aar文件。

然后在build.gradle中添加依赖项

在AndroIDManifest中添加相应权限和注册相应的activity

 <!-- mob短信 需要的权限 --> <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" /><!--在application中注册activity --> <!-- Mob短信(如果使用无GUI的,这个activity应该可以不需要了,自己没试过,就先在这注册着吧) --> <activity  androID:name="com.mob.tools.MobUIShell"  androID:configChanges="keyboardHIDden|orIEntation|screenSize"  androID:theme="@androID:style/theme.Translucent.NoTitlebar"  androID:windowsoftinputMode="stateHIDden|adjustResize" > </activity>

3.2.调用接口发送短信

前面提到了,mob短息提供有GUI和无GUI的两种方式,无论哪种方式,都需要对SMSSDK先初始化,再调用接口。

初始化:SMSSDK.initSDK(LoginActivity.this,"App Key","App Secret");

1)有GUI,即使用mob提供的界面

方法如下:

 registerText.setonClickListener(new VIEw.OnClickListener() {  @OverrIDe  public voID onClick(VIEw v) {  //首先初始化SMSSDK  SMSSDK.initSDK(LoginActivity.this,"App Secret");  RegisterPage registerPage = new RegisterPage();  //回调函数  registerPage.setRegisterCallback(new EventHandler()  {   public voID afterEvent(int event,int result,Object data)   {   // 解析结果   if (result == SMSSDK.RESulT_COMPLETE)   {   //提交验证码成功   if (event == SMSSDK.EVENT_submit_VERIFICATION_CODE)   {   }   //提交验证码成功,此时已经验证成功了   else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)   {   }   }   }  });  registerPage.show(LoginActivity.this);  } });

2)无GUI

这种情况一般是使用自己的activity界面,然后集成短信功能,比如一个简单的注册。

//我只提供一些关键代码,其他部分就不提供了,太多,看起来太杂public class ActivityMessageRegister extends Activity { private static final int CODE_ING = 1;   //已发送,倒计时 private static final int CODE_REPEAT = 2;  //重新发送 private static final int SMSDDK_HANDLER = 3;  //短信回调 private int TIME = 60;//倒计时60s @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_message_register); initVIEw();//界面初始化 initSDK();//短信初始化 } //初始化界面 voID initVIEw() { userPhoneText = (EditText)findVIEwByID(R.ID.user_phone_input); userPasswordText = (EditText)findVIEwByID(R.ID.user_password_input); usernameText = (EditText)findVIEwByID(R.ID.user_name_input); registerbutton = (button)findVIEwByID(R.ID.register_button); registerbutton.setonClickListener(new OnClickListener()); loginVIEw = (TextVIEw)findVIEwByID(R.ID.login_vIEw); getCodebutton = (button)findVIEwByID(R.ID.get_code_button); getCodebutton.setonClickListener(new OnClickListener()); codeText = (EditText)findVIEwByID(R.ID.code_vIEw); // ... // } //初始化SMSSDK private voID initSDK() { SMSSDK.initSDK(this,"App Secret"); eventHandler = new EventHandler() {  @OverrIDe  public voID afterEvent(int event,Object data) {  Message msg = new Message();  msg.arg1 = event;  msg.arg2 = result;  msg.obj = data;  msg.what = SMSDDK_HANDLER;  handler.sendMessage(msg);  } }; // 注册回调监听接口 SMSSDK.registerEventHandler(eventHandler); } //监听函数 private class OnClickListener implements VIEw.OnClickListener { @OverrIDe public voID onClick(VIEw v) {  userPhone = userPhoneText.getText().toString();  switch (v.getID()) {  case R.ID.get_code_button://获取验证码   new AlertDialog.Builder(ActivityMessageRegister.this)    .setTitle("发送短信")    .setMessage("我们将把验证码发送到以下号码:\n"+"+86:"+userPhone)    .setPositivebutton("确定",new DialogInterface.OnClickListener()    {    @OverrIDe    public voID onClick(DialogInterface dialog,int which)    {     SMSSDK.getVerificationCode("86",userPhone);     getCodebutton.setClickable(false);     new Thread(new Runnable()     {     @OverrIDe     public voID run()     {      for (int i = 60; i > 0; i--)      {      handler.sendEmptyMessage(CODE_ING);      if (i <= 0)      {       break;      }      try      {       Thread.sleep(1000);      } catch (InterruptedException e)      {       e.printstacktrace();      }      }      handler.sendEmptyMessage(CODE_REPEAT);     }     }).start();    }    })    .create()    .show();   break;  case R.ID.register_button://注册   SMSSDK.submitVerificationCode("86",userPhone,codeText.getText().toString());//对验证码进行验证->回调函数   break;  default:   break;  } } } Handler handler = new Handler() { public voID handleMessage(Message msg) {  switch (msg.what)  {  case CODE_ING://已发送,倒计时   getCodebutton.setText("重新发送("+--TIME+"s)");   break;  case CODE_REPEAT://重新发送   getCodebutton.setText("获取验证码");   getCodebutton.setClickable(true);   break;  case SMSDDK_HANDLER:   int event = msg.arg1;   int result = msg.arg2;   Object data = msg.obj;   //回调完成   if (result == SMSSDK.RESulT_COMPLETE)   {   //验证码验证成功   if (event == SMSSDK.EVENT_submit_VERIFICATION_CODE)   {    Toast.makeText(ActivityMessageRegister.this,"验证成功",Toast.LENGTH_LONG).show();    if (check())//其他合法性的检测    {    usermodel user = new usermodel();    user.setUserID(MyUUID.getUUID());  //ID    user.setUserPhone(userPhone);    user.setUserPassword(MD5.md5(userPassword)); //md5加密    user.setUserGender(gender);   //性别    user.setUsername(username);    user.setUserBirthday("19920401");   //暂时为空    //user.setUserIDCard(userIDCard);    //user.setUserImage("");    //暂时为空    //注册->服务器    UserController.userRegister(user,handler);    }   }   //已发送验证码    else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)   {    Toast.makeText(getApplicationContext(),"验证码已经发送",Toast.LENGTH_SHORT).show();   } else   {    ((Throwable) data).printstacktrace();   }   }   if(result==SMSSDK.RESulT_ERROR)   {   try {    Throwable throwable = (Throwable) data;    throwable.printstacktrace();    JsONObject object = new JsONObject(throwable.getMessage());    String des = object.optString("detail");//错误描述    int status = object.optInt("status");//错误代码    if (status > 0 && !TextUtils.isEmpty(des)) {    Toast.makeText(getApplicationContext(),des,Toast.LENGTH_SHORT).show();    return;    }   } catch (Exception e) {    //do something   }   }   break;  case R.ID.register_status:   String result_code = msg.getData().getString("result").toString();   if("1".equals(result_code))   {   Toast.makeText(ActivityMessageRegister.this,"注册成功",Toast.LENGTH_LONG).show();   Intent intent = new Intent(ActivityMessageRegister.this,LoginActivity.class);   intent.putExtra("userPhone",userPhone);   ActivityMessageRegister.this.setResult(RESulE_CODE,intent);   //startActivity(intent);   finish();   }else   {   Toast.makeText(ActivityMessageRegister.this,"注册失败",Toast.LENGTH_LONG).show();   }   break;  case R.ID.check_phone_exist://手机号是否已存在   String result_code_2 = msg.getData().getString("result").toString();   if("1".equals(result_code_2))   {   errPhoneText.setText("手机号码已经注册,请换用其他号码");   resultMap.put("phone",false);   }   else   {   errPhoneText.setText("");   resultMap.put("phone",true);   }   break;  } } };}

OK,基本就大功告成。

三.问题

集成中可能会出现几个问题:

1.无法接收短信验证码

mob默认是开启了智能验证的,也意味着如果一个号码通过了一次验证码验证,那之后再次进行短信验证时,就会智能验证通过,而此时是不会接收到验证码的,因为mob不会下发验证码。这就对我们的测试造成了一定的影响,有时候,我们始终无法接收到验证码,原因就在这里。进入后台,将智能验证功能关闭就可以了。后台中心->短信设置->智能验证
这里写图片描述

2.短信验证成功后,并未执行相应的代码,而是返回到了某一个界面

还是有可能是因为智能验证的原因。

eventHandler = new EventHandler() {  @OverrIDe  public voID afterEvent(int event,Object data)   {  if (result == SMSSDK.RESulT_COMPLETE)  {   if (event == SMSSDK.EVENT_submit_VERIFICATION_CODE)   {   //官方文档中说了,如果是智能验证只需要在这里对data进行判断就可以了   if((Boolean)data)//是智能验证   {    //如果增加了这条if语句,那么就算关闭了智能验证,此时的data强制转换成了Boolean也是为true的,所以并不会执行后面的相应代码,所以,如果在集成的时候不需要智能验证,最好的方式就是不去管这个功能。   }   else   {    //非智能   }   }  }  }

所以,最妥的方式,就是彻底舍弃掉智能验证功能。

以上就是本文的全部内容,希望对大家学习AndroID软件编程有所帮助。

总结

以上是内存溢出为你收集整理的Android开发工程中集成mob短信验证码功能的方法全部内容,希望文章能够帮你解决Android开发工程中集成mob短信验证码功能的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1141891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存