Mob平台Smssdk获取短信验证码

        短信验证码可以说是现在app中必备的功能,当然开发过程也很简单,各种各样的短信平台服务也很多,这里我用的是Mob平台的短信验证码服务。http://www.mob.com,注册登录,点击右上角头像,进入后台,选择SecurityCodeSdk,创建应用,获取到App Secre和App Key,下载SMSSDK,我这里使用的是2.0版本,准备工作就做好了。

        http://wiki.mob.com/sms-android-%e6%97%a0gui%e6%8e%a5%e5%8f%a3%e8%b0%83%e7%94%a8/,开发文档地址。按照开发文档导入lib目录,添加相应权限。界面如图所示。

     

    首先在onCreat()方法中进行初始化SDK,与注册接口回调。

      SMSSDK.initSDK(getApplicationContext(), APP_KEY, APP_SECRET);//初始化SDK,单例,可以多次调用;任何方法调用前,必须先初始化
      SMSSDK.registerEventHandler(eventHandler);//注册短信回调
    其中所有的操作都是通过回调来进行的,通过EventHandler来进行处理。注意,在这里一旦我们注册了短信回调,在相应的地方就要进行解注册,否则容易造成内存泄露。
//SDK操作回调
    EventHandler eventHandler = new EventHandler() {
        @Override
        public void afterEvent(int event, int result, Object data) {

            if (result == SMSSDK.RESULT_COMPLETE) {
                //回调完成
                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                    //提交验证码成功
                    mHandler.sendEmptyMessage(VERIFICATION_SUCCESS);
                } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                    //获取验证码成功
                } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
                    //返回支持发送验证码的国家列表
                }
            } else {
                ((Throwable) data).printStackTrace();
                Message message = mHandler.obtainMessage();
                message.what = VERIFICATION_FAILE;
                message.obj = data;
                mHandler.sendMessage(message);

            }
        }
    };
    用户可以通过getSupportedCountries()获取当前支持的国家列表,通过getVerificationCode(String country,String phone)申请短信验证码,通过

submitVerificationCode(String country,String phone,String code)来提交验证码。这些操作的结果都将在EventHandler中获得,但是因为这并不是在UI线程中,要进行UI操作需要使用Handler来发送消息。这里顺便叨叨Handler的使用。Handler操作不当可能导致内存泄露(虽然没有遇到过),但是防患于未然。Java当中,非静态的内部类和匿名内部类都会隐式的持有一个外部对象。非静态的handler可能会持有一个外部Activity对象,当handler在进行一些延时操作时,这时候会阻碍Activity的回收。也就是说,当使用内部类的时候,如果是非静态的,当其实例的生命周期大于其持有的外部对象的生命周期时,从而导致影响到外部对象的回收,就会发生内存泄露。这里主要推荐两种做法,使用静态类和弱引用。静态内部类不会持有外部对象,弱引用不会阻碍gc对其持有外部对象的回收。如下代码所示。

 //弱引用handler,防止内存泄露
    static class MyHandler extends Handler {

        private WeakReference<Sms_verification> weakReference;

        MyHandler(Sms_verification sms_verification) {
            this.weakReference = new WeakReference<>(sms_verification);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Sms_verification sms_verification = weakReference.get();
            switch (msg.what) {

                case VERIFICATION_SUCCESS:
                    Toast.makeText(sms_verification, "验证成功", Toast.LENGTH_SHORT).show();
                    break;

                case VERIFICATION_FAILE:
                    sms_verification.getErrorMsg(msg);
                    break;
            }
        }
    }
     最后还有一个简单的计时器来倒数60s,重新获取验证码,很简单直接上代码。
 //计时器
    private void starttime() {
        canClick = false;
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                get_verificationcode.setText(UPDATE-- + "s后重新获取");
                get_verificationcode.setTextColor(getResources().getColor(R.color.black));
                if (UPDATE == 0) {
                    get_verificationcode.setClickable(true);
                    get_verificationcode.setText("获取验证码");
                    get_verificationcode.setTextColor(getResources().getColor(R.color.red));
                    UPDATE = 60;
                    canClick = true;
                } else {
                    mHandler.postDelayed(this, TIME);
                }
            }
        };
        mHandler.post(runnable);

    }
      大致就是这样了,这里面的country代码,这个版本中国是“+86”,曾经某个版本是“86”,大家做的时候可以查询一下。

       最后附上项目地址:https://github.com/lulululbj/DailyAndroid,利用业余时间总结一些项目中用到的知识,不断更新中。


有任何疑问,欢迎加群讨论:261386924


  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值