Android&java的成长之路之八(Android短信验证 亲测)


第三方登陆,注册,分享,等等是每个APP基本必备的一项功能,首先,我们今天先说一下Android短信验证。

这里要用到第三方包,进入mob网站,下载集成好的Android短信的SDK 即SMS SDK 下载下来如下图显示:

第一个是我们用不到的 后面四个加载到项目里面 如下图显示:

 然后再根据mob官网上的文档进行相应的配置 ,配置好了之后,我们就可以在应用中用到SMSSDK这个类了 不妨作一下测试。

接下来 就说一下具体代码是怎么实现的吧。

package com.example.administrator.sms_sdk;

import android.graphics.Color;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.json.JSONException;
import org.json.JSONObject;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText phone, phoneRandom;
    private Button btnRegister, btnCheckPass;
    private EventHandler eh;
    private CountTimer countTimer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        inttView();
        initEvent();
    }

    //初始化控件
    private void inttView() {
        phone = (EditText) findViewById(R.id.phone);
        phoneRandom = (EditText) findViewById(R.id.phoneRandom);
        btnCheckPass = (Button) findViewById(R.id.btnCheckPass);
        btnRegister = (Button) findViewById(R.id.btnRegister);
        countTimer = new CountTimer(60000, 1000);
    }

    private void initEvent() {
        btnRegister.setOnClickListener(this);
        btnCheckPass.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnCheckPass:
                if (phone.getText().toString().equals("") || phone.getText().toString().length() != 11
                        || (!phone.getText().toString().substring(0, 2).equals("13")) && (!phone.getText().toString().substring(0, 2).equals("15"))) {
                    Toast.makeText(MainActivity.this, "请正确输入手机号码", Toast.LENGTH_SHORT).show();
                    return;
                }

                sendSMSRandom();
                countTimer.start();
                break;
            case R.id.btnRegister://点击了提交的按钮
                if (phoneRandom.getText().toString().length()!=4) {
                    Toast.makeText(MainActivity.this, "请输入正确验证码", Toast.LENGTH_SHORT).show();
                    return;
                }
                SMSSDK.submitVerificationCode("86", phone.getText().toString(), phoneRandom.getText().toString());
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterEventHandler(eh);//解除注册的回掉
    }

    //发送短信验证码的方法
    public void sendSMSRandom() {
        //初始化短信验证
        SMSSDK.initSDK(this, "fe42edb9cf9c", "d955f95b891af1d0f36842645d413432");
        //监听事件
        eh = new EventHandler() {
            @Override
            public void afterEvent(int event, int result, final Object data) {

                if (result == SMSSDK.RESULT_COMPLETE) {
                    //回调完成
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        //提交验证码成功
                        Message ms = Message.obtain();
                        ms.arg1 = 2;
                        ms.arg2 = 2;
                        ms.obj = data.toString().substring(21);
                        handler.sendMessage(ms);
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        //获取验证码成功
                        Log.i("TTTTTTTTTT", data + "");
                    } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
                        //返回支持发送验证码的国家列表
                    }
                } else {

                    Message ms = Message.obtain();
                    ms.arg1 = 1;
                    ms.arg2 = 1;
                    ms.obj = data.toString().substring(21);
                    handler.sendMessage(ms);
                    ((Throwable) data).printStackTrace();
                }
            }
        };
        SMSSDK.registerEventHandler(eh); //注册短信回调
        SMSSDK.getVerificationCode("86", phone.getText().toString());
    }

    //每隔一分钟可以点击一次验证码
    public class CountTimer extends CountDownTimer {
        /**
         * @param millisInFuture    时间间隔是多长时间
         * @param countDownInterval 回调onTick方法,每隔多久执行一次
         */

        public CountTimer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        //间隔时间内执行的操作
        @Override
        public void onTick(long millisUntilFinished) {
            //更新页面组件
            btnCheckPass.setText(millisUntilFinished / 1000 + "后重新发送");
            btnCheckPass.setBackgroundColor(Color.rgb(169, 169, 169));
            btnCheckPass.setClickable(false);
        }

        //间隔时间结束的时候才会调用
        @Override
        public void onFinish() {
            //更新页面的组件
            btnCheckPass.setText("获取验证码");
            btnCheckPass.setBackgroundColor(Color.rgb(255, 255, 255));
            btnCheckPass.setClickable(true);
        }
    }

    public Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String code = "";
            if (msg.arg1 == 1) {
                JSONObject object = null;
                try {
                    Log.i("TTTTTTTT", (msg.obj + ""));
                    object = new JSONObject(msg.obj + "");
                    code = object.getString("status");
                    //这里进行返回的码数来提醒用户
                    switch (code) {
                        case "466":
                            Toast.makeText(MainActivity.this, "校验的验证码为空", Toast.LENGTH_SHORT).show();
                            break;
                        case "467":
                            Toast.makeText(MainActivity.this, "校验验证码请求频繁", Toast.LENGTH_SHORT).show();
                            break;
                        case "468":
                            Toast.makeText(MainActivity.this, "需要校验的验证码错误", Toast.LENGTH_SHORT).show();
                            break;
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                    Log.i("TTTTTTTT", e.getMessage());
                }
            }else if(msg.arg1 == 2){
                Toast.makeText(MainActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
            }
        }
    };
}

代码量是有点多,不过看着解释都能理解的。这里有三个知识点需要提一下 一个是Handler Message 这个 还有个是JSON数据的处理 如果不用gson包的时候是怎么样处理的 这个应该复习下。还有短信验证的时候按钮倒计时 看看是怎么实现的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值