• UID11
  • 登录2016-05-26
  • 粉丝13
  • 关注5
  • 发帖20
  • 主页
  • 金币179枚
忠实会员
社区居民
水很活泼 发布于2015-08-07 16:22
6/5256

免费的短信验证码实现方案

楼层直达
免费的短信验证码解决方案


概要
        开发者可以让移动应用快速实现短信验证功能,获得更为真实的用户信息,方便实现通讯录好友推荐功能,让用户快速找到好友及邀请好友使用您的移动应用。

主要功能及优点
1. 每天可以免费下发1万条验证断行;
2. 输入手机号,点击获取验证码,验证手机号码的真实性;
3. 通过后台自定制下发短信内容;
4. 整个功能模块封装良好,方便快速集成。


模块集成主要步骤

将下载的smsdemo项目导入eclipse,复制smsdemo项目中libs文件夹的SMSSDK-1.1.5.jar到你的项目libs文件夹里。

图片:1.png




   添加下面两行代码,提供appkey 和 appsecret

// 填写从短信SDK应用后台注册得到的APPKEY
private static String APPKEY = "5887b8134af8"
// 填写从短信SDK应用后台注册得到的APPSECRET
private static String APPSECRET = "9cd46d6cf9908a297fbafeb75b7b19d3";

      用户可在mob.com官网注册账号,再获取自己的APPKEY和APPSECRET,得到后再替换上面已经给出的key与secret。(登陆mob.com后台,用户可以查询已发送认证短信数量等相关信息)

     在onCreate函数里,加入初始化函数。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        settimeCount();
        SMSSDK.initSDK(this,APPKEY,APPSECRET);
        EventHandler eh = new EventHandler(){
                          
            @Override
            public void afterEvent(int event, int result, Object data) {
                                          
                Message msg = new Message();
                msg.arg1 = event;
                msg.arg2 = result;
                msg.obj = data;
                handler.sendMessage(msg);
            }
                                      
        };
        SMSSDK.registerEventHandler(eh);
    }
     添加获取验证码功能与验证码校验功能,实现代码为:

//添加获取验证码功能,实现代码为
case R.id.button1://获取验证码
    if(!TextUtils.isEmpty(phonEditText.getText().toString())){
        if(checkPhoneNumber(phonEditText.getText().toString())){
            SMSSDK.getVerificationCode("86",phonEditText.getText().toString());
            phString=phonEditText.getText().toString();
        }else{
             Toast.makeText(this, R.string.phonenumber_wrong, 1).show();
             }
    }else {
          Toast.makeText(this, R.string.phonenumber_cant_be_empty, 1).show();
          }
    break;
                     
//添加校验验证码的功能,实现代码为
case R.id.button2://校验验证码
    if(!TextUtils.isEmpty(verEditText.getText().toString())){
        SMSSDK.submitVerificationCode("86", phString, verEditText.getText().toString());
    }else {
          Toast.makeText(this, R.string.code_cant_be_empty, 1).show();
          }
    break;
    创建一个handler来接收服务器返回的信息

Handler handler=new Handler(){
                       
    @Override
    public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
        super.handleMessage(msg);
        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(getApplicationContext(), R.string.submit_code_success, Toast.LENGTH_SHORT).show();              
            } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){           //验证码已发送
                  Toast.makeText(getApplicationContext(), R.string.code_be_sent, Toast.LENGTH_SHORT).show();      
                  timeCount.start();
              }
         } else {
                ((Throwable) data).printStackTrace();
                int resId = getStringRes(MainActivity.this, "smssdk_network_error");
                if(!TextUtils.isEmpty(verEditText.getText().toString()))
                    Toast.makeText(MainActivity.this,R.string.code_wrong, Toast.LENGTH_SHORT).show();
                if (resId > 0) {
                    Toast.makeText(MainActivity.this, resId, Toast.LENGTH_SHORT).show();
                }
           }
     }
                           
};
   
     设置一个倒计时60秒的功能,防止多次点击获取验证码按钮给服务器造成负担。
protected void settimeCount()
{
    timeCount = new TimeCount(60000, 1000);               //设置倒计时
}
                       
class TimeCount extends CountDownTimer{
                  
    public TimeCount(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);               
    }
                  
    public void onFinish(){
        sensmsButton.setText(R.string.get_code);
        sensmsButton.setClickable(true);
    }
                  
    @Override
    public void onTick(long millisUntilFinished) {      
        sensmsButton.setClickable(false);
        sensmsButton.setText(millisUntilFinished/1000+"秒");
    }
}
 
     检查匹配手机号,判断是否是手机号码格式
public boolean checkPhoneNumber(String number)
{
    Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9]))\\d{8}$");
    Matcher matcher = p.matcher(number);
    if(matcher.find())
        return true;
    return false;
}
   
    重载onDestroy(),解注册
@Override
protected void onDestroy() {
    super.onDestroy();
    SMSSDK.unregisterAllEventHandler();
}

  在AndroidManifest中添加权限
<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.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

注意事项
 1.如果开发者在mob官网注册的key与secret,会有可能出现无法给手机发送验证码的情况,因为无法和服务器连接。如果出现这种情况就换回demo中默认给的key与secret。
 2.如果手机号为空号试图获取验证码,将无法接收到验证码短信,同时因为SDK的原因,此时会出现toast显示“验证码错误”的提示。不过加入验证码为空的检测可以规避该不合适的错误提示。
 
环境相关
开发平台:android                        
语言:     java
开发工具: eclipse

效果展示

图片:2.png




图片:3.png




图片:4.png





Note:本源代码由“极分享”社区创建,添加或者修改,我们会持续优化源代码以提供更好的解决方案,更多详情和支持请前往finalshares.com
        附件名称/大小 下载 更新 附加说明
smsdemo.rar (1395KB)  48 2015-08-08 11:48
咩哈哈

0人打赏
  • UID11
  • 登录2016-05-26
  • 粉丝13
  • 关注5
  • 发帖20
  • 主页
  • 金币179枚
忠实会员
社区居民
水很活泼 发布于2015-08-07 16:33
沙发F
第一个沙发 欢迎大家提出意见
咩哈哈
  • UID49
  • 登录2015-10-12
  • 粉丝5
  • 关注4
  • 发帖1
  • 主页
  • 金币4枚
社区居民
萧寒916 发布于2015-08-27 12:03
板凳F
不错哦!
  • UID2959
  • 登录2016-03-08
  • 粉丝1
  • 关注0
  • 发帖14
  • 主页
  • 金币20枚
社区居民
发布于2016-01-06 15:42
地板F
不错呦
  • UID10364
  • 登录2016-03-20
  • 粉丝0
  • 关注0
  • 发帖1
  • 主页
  • 金币11枚
ChineseBoy 发布于2016-03-21 09:44
4楼F
但是为什么要金币呢
  • UID231
  • 登录2016-10-25
  • 粉丝1
  • 关注1
  • 发帖5
  • 主页http://user.qzone.qq.com/848577326
  • 金币64枚
社区居民
raincent 发布于2016-03-22 19:01
5楼F
只有100条短信是免费的,bmob我已经用很久了
俺很爱我的媳妇,不约!!!
  • UID8829
  • 登录2017-03-22
  • 粉丝1
  • 关注0
  • 发帖112
  • 主页
  • 金币596枚
社区居民
忠实会员
大印 发布于2016-03-23 09:31
6楼F
免费短信条数有限,
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 62281/345   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 34800/189   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 32821/142   省时省力的Android组件群来了,非常棒的原型参考

  • 30748/235   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 28804/0   Python爬虫:常用浏览器的useragent

  • 26678/2   超全!整理常用的iOS第三方资源

  • 25273/70   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 23798/138   2016抢红包软件及源码

  • 20316/29   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 20156/25   Android工程师面试题大全

  • 19660/27   2016程序员跳槽全攻略

  • 19492/9   GitHub上排名前50的iOS项目:总有一款你用得着

  • 18845/20   码魂:程序员的牛B漫画

  • 17755/149   Android版类似UC浏览器:非常赞,产品级的源码

  • 17096/3   吐槽那些程序员的搞笑牛逼注释

  • 16465/10   2016年最全的Android面试考题+答案 精编版

  • 16003/1   iOS 动画总结

  • 15717/41   一个绚丽的loading动效分析与实现!

  • 15372/73   【持续更新中】Android福利贴(二):资料源码大放送

  • 15339/84   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 14957/44   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 14932/10   女程序员的梦,众网友的神回复

  • 14693/11   年会上现场review代码是怎么样的体验!

  • 14667/23   个人收集的Android 各类功能源代码

  • 14453/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 13756/23   珍藏多年的素材,灵感搜寻网站

  • 13664/53   基于瀑布流的美女图片浏览App,有注释的源代码

  • 13344/17   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 13328/76   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 13029/15   基于Android支付宝支付设计和开发方案

  • 12892/20   Android福利第三波【Android电子书】

  • 12880/94   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 12726/18   65条最常用正则表达式,你要的都在这里了

  • 12562/17   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 12497/72   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 12275/0   iOS中文版资源库,非常全

  • 12016/7   用程序员的姿势抢过年的火车票

  • 11962/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 11960/7   一张图搞定iOS学习路线,非常全面

  • 11456/10   成为Java顶尖程序员 ,看这11本书就够了

  • 11189/18   一张图搞定Android学习路线,非常全面

  • 11147/10   微信支付终于成功了(安卓,iOS),在此分享

  • 10978/44   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 10853/3   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 10735/0   GitHub iOS 库和框架Top100 

  • 10717/29   【持续更新中】Android福利贴(一):资料源码

  • 10222/4   46 个非常有用的 PHP 代码片段

  • 10146/61   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 9977/3   即时通信第三方库

  • 9738/8   流媒体视频直播方案

  • 9705/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 9606/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 9475/18   八个最优秀的Android Studio插件

  • 9376/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 9297/10   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 8856/6   开箱即用!Android四款系统架构工具

  • 8699/3   一张图看清Linux 内核运行原理

  • 8640/10   十大技巧快速提升Android应用开发性能

  • 8626/3   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 8326/1   Android性能优化视频,文档以及工具

  • 返回顶部