您的当前位置:主页 > 新闻资讯 > 行业动态

合作客户

方太
金伯利

联系我们

0371-86687083
地址:郑州市管城区紫金山路兴达国贸1802室
电话:0371-86687083

行业动态

注册会员时APP如何自动获取短信验证码

2018-05-15 00:00:00    来源:    点击:4116    喜欢:0

在APP会员注册时,手机短信验证码自动获取,能给客户带来很大的方便,增加客户体验。目前好多APP都有手机验证码自动填写功能,但还是有一部分技术不知道怎么实现,这里就简单介绍一下

实现思路很简单:1、在需要输入验证码的Activity代码注册监听短信的广播 2、拦截短信,获取其中的验证码 3、回写到EditText

      

[java] view plain copy
  1.         private SmsReciver smsReciver = new SmsReciver();  
  2.         /** 收到短信Action **/  
  3.         String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED";  
  4.     /** 
  5.      * 注册广播接受者监听短信验证码自动回写  可在onCreate()中进行注册; 
  6.      */  
  7.     private void registSmsReciver() {  
  8.         IntentFilter filter = new IntentFilter();  
  9.         filter.addAction(ACTION_SMS_RECIVER);  
  10.         // 设置优先级 不然监听不到短信   
  11.         filter.setPriority(1000);  
  12.         registerReceiver(smsReciver, filter);  
  13.         }  
  14.   
  15.           /** 
  16.        * 短信广播接受者 用户监听短信,自动填写验证码 
  17.        */  
  18.           private class SmsReciver extends BroadcastReceiver {  
  19.   
  20.         @Override  
  21.         public void onReceive(Context context, Intent intent) {  
  22.             Object[] objs = (Object[]) intent.getExtras().get("pdus");  
  23.               for (Object obj : objs) {  
  24.                   yte[] pdu = (byte[]) obj;  
  25.                  SmsMessage sms = SmsMessage.createFromPdu(pdu);  
  26.                  // 短信的内容  
  27.                  String message = sms.getMessageBody();  
  28.                  Log.d("log""message     " + message);  
  29.                 // 短息的手机号,如果你们公司发送验证码的号码是固定的这里可以进行一个号码的校验  
  30.                  String from = sms.getOriginatingAddress();  
  31.                  Log.d("log""from     " + from);  
  32.                  analysisVerify(message);  
  33.   
  34.             }  
  35.          }  
  36.   
  37.     }  
  38.   
  39.      /** 
  40.      * 解析短信并且回写  这里解析的是纯数字的短信,如果小伙伴的验证码包含字母的话,可用正则替换 
  41.       *  
  42.       * @param message 
  43.       */  
  44.     private void analysisVerify(String message) {  
  45.         char[] msgs = message.toCharArray();  
  46.          StringBuffer sb = new StringBuffer();  
  47.         for (int i = 0; i < msgs.length; i++) {  
  48.             if ('0' <= msgs[i] && msgs[i] <= '9') {  
  49.                             sb.append(msgs[i]);  
  50.             }  
  51.         }  
  52.   
  53.         mEtVerifyCode.setText(sb.toString());  
  54.      }  
  55.   
  56.     @Override  
  57.     protected void onDestroy() {  
  58.         super.onDestroy();  
  59.         // 取消短信广播注册  
  60.         if (smsReciver != null) {  
  61.             unregisterReceiver(smsReciver);  
  62.             smsReciver = null;  
  63.         }  
  64.     }  

可以看到代码逻辑比较简单,需要注意的有几点。我们这里用的代码注册广播,之所以不采取全局广播的形式原因有两天,在高版本的api,注册全局的短信监听会失效。而且就业务而言,我们监听短信只会在输入验证码的Activity里面才会用到,采用代码注册的形式,在当前Activity销毁的时候取消广播注册,更符合我们的预期,提高应用的性能。第二个需要注意的问题是优先级的问题
[java] view plain copy
  1. filter.setPriority(1000);  

可以看到,我们这里把优先级设置成了最大。保证我们的应用能够尽可能的接受到短信。注意,我使用的是“尽可能”,也就是说我们不能保证短信自动填写一定能执行成功,有个小伙伴可能会问,我们不是把优先级设置成了最高了吗?为什么还不能保证了? 原因其实很简单,你能把监听短信的优先级设置成最大,同样的,其他的应用也能把短信监听的优先级设置成最大。比如说,你的手机安装有360安全卫士,把你们公司的验证码视为垃圾短信拦截了,这个时候短信拦截就失效了。


嘉之元云通信为客户提短信验证码、短信营销、国际短信、智能外呼机器人等服务!其在互联网行业深耕近10年,在短信接口平台、营销短信、国际短信、智能语音机器人方面与业内资深企业强强联合,产品服务水平一直处于行业领先水平,深受广大客户的认可,嘉之元云通信将一如既往的为您提供一流的服务。

上一篇:小云智能电话机器人--如何提升人工智能的用户体验
下一篇:嘉之元云通讯行业短信业务介绍


  • 服务咨询 0371-86687083
  • 一对一贵宾级服务
  • 7X24小时技术保障
Copyright © 2013-2017. All Rights Reserved. 郑州嘉之元计算机科技有限公司 www.jzyyun.com 版权所有 | 增值电信业务经营许可证:B2-20194910| 备案号: 豫ICP备15030919-2号
营业执照
图片
[网站地图] [联系我们]
本公司主要从事:短信验证码,短信接口,短信平台,群发短信,短信群发 sitemap:sitemap.txt|

豫公网安备41010402002418号

点击这里给我发消息