首页 > 系统 > Android > 正文

Android -- 短信验证就是那么简单

2019-11-07 23:38:04
字体:
来源:转载
供稿:网友

    又有半个月没更新文章了,最近工作比较忙,一时没时间写,今天趁着清闲,赶紧补上一篇。。。。。

    今天就说一下 Android集成短信验证功能的实现,最常见的短信验证界面我们都知道,两个输入框(输入手机号,输入验证码),两个按钮(获取验证码,提交),非常简单,唯一需要多写几行代码的地方就是那个获取验证码的按钮,为防止获取验证码的操作过于频繁,需要做出必要的限制,最常见的就是60s了,关于60s的问题,可以参见 Android -- 倒计时Button的几种实现  ,在这里我们重点说一下验证功能。

    首先今天我们要说的主角就是它了—— Mob,什么?黑手党??暴徒???惊恐 NO,NO,NO,绝壁没有那么diao, 它是 Mob移动开发者服务平台 ,绝对的良民闭嘴

好了,不说废话了。开整。。。。

一、集成SDK

1、首先需要下载SDK

     我这里下的是基于AS开发平台的,也有eclipse的,不过现在基本上都在用Google亲儿子,eclipse已经被大多数android开发者抛弃了,现在想想还(曾)有(经)一(被)点(虐)小(千)怀(百)念(遍)。

2、解压下载的压缩文件

    主要用到里面的这几个jar包

3、将这四个玩意儿放到项目的libs目录下

4、在app目录下的build.gradle中加上如下图所示代码

好了,集成的工作就做好了,没错,就是这么简单,接下来就是代码了。

二、撸代码

首先初始化SDK
package com.hbh.cl.smsvalidatedemo;import android.app.application;import cn.smssdk.SMSSDK;/** * Created by hbh. */public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        SMSSDK.initSDK(this, "你的appkey", "你的appsecret");    }}至于appkey和appsecret可以在注册用户后在个人中心查看,如下

登录页面
package com.hbh.cl.smsvalidatedemo;import android.content.Intent;import android.os.Bundle;import android.os.CountDownTimer;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.util.regex.Matcher;import java.util.regex.Pattern;import cn.smssdk.EventHandler;import cn.smssdk.SMSSDK;/** * Created by hbh */public class LoginActivity extends AppCompatActivity implements View.OnClickListener {    PRivate Button validateNum_btn;    private Button landing_btn;    private EditText userName;    private EditText validateNum;    public EventHandler eh; //事件接收器    private TimeCount mTimeCount;//计时器    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login);        initEvent();        init();    }    private void initEvent(){        userName = (EditText) findViewById(R.id.userName);        validateNum = (EditText) findViewById(R.id.validateNum);        validateNum_btn = (Button) findViewById(R.id.validateNum_btn);        landing_btn = (Button) findViewById(R.id.landing_btn);        validateNum_btn.setOnClickListener(this);        landing_btn.setOnClickListener(this);        mTimeCount = new TimeCount(60000, 1000);    }    /**     * 初始化事件接收器     */    private void init(){        eh = new EventHandler(){            @Override            public void afterEvent(int event, int result, Object data) {                if (result == SMSSDK.RESULT_COMPLETE) { //回调完成                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) { //提交验证码成功                        startActivity(new Intent(LoginActivity.this, MainActivity.class)); //页面跳转                    }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){ //获取验证码成功                    }else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){ //返回支持发送验证码的国家列表                    }                }else{                    ((Throwable)data).printStackTrace();                }            }        };        SMSSDK.registerEventHandler(eh); //注册短信回调    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.validateNum_btn://                SMSSDK.getSupportedCountries();//获取短信目前支持的国家列表                if(!userName.getText().toString().trim().equals("")){                    if (checkTel(userName.getText().toString().trim())) {                        SMSSDK.getVerificationCode("+86",userName.getText().toString());//获取验证码                        mTimeCount.start();                    }else{                        Toast.makeText(LoginActivity.this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();                    }                }else{                    Toast.makeText(LoginActivity.this, "请输入手机号码", Toast.LENGTH_SHORT).show();                }                break;            case R.id.landing_btn:                if (!userName.getText().toString().trim().equals("")) {                    if (checkTel(userName.getText().toString().trim())) {                        if (!validateNum.getText().toString().trim().equals("")) {                            SMSSDK.submitVerificationCode("+86",userName.getText().toString().trim(),validateNum.getText().toString().trim());//提交验证                        }else{                            Toast.makeText(LoginActivity.this, "请输入验证码", Toast.LENGTH_SHORT).show();                        }                    }else{                        Toast.makeText(LoginActivity.this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();                    }                }else{                    Toast.makeText(LoginActivity.this, "请输入手机号码", Toast.LENGTH_SHORT).show();                }                break;        }    }    /**     * 正则匹配手机号码     * @param tel     * @return     */    public boolean checkTel(String tel){        Pattern p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");        Matcher matcher = p.matcher(tel);        return matcher.matches();    }    @Override    protected void onDestroy() {        super.onDestroy();        SMSSDK.unregisterEventHandler(eh);    }    /**     * 计时器     */    class TimeCount extends CountDownTimer{        public TimeCount(long millisInFuture, long countDownInterval) {            super(millisInFuture, countDownInterval);        }        @Override        public void onTick(long l) {            validateNum_btn.setClickable(false);            validateNum_btn.setText(l/1000 + "秒后重新获取");        }        @Override        public void onFinish() {            validateNum_btn.setClickable(true);            validateNum_btn.setText("获取验证码");        }    }}对应的xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_marginLeft="30dp"    android:layout_marginRight="30dp"    android:gravity="center"    android:orientation="vertical">    <EditText        android:id="@+id/userName"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:padding="10dp"        android:background="@drawable/shape_style"        android:hint="@string/tel"        android:textColorHint="@color/gray"        android:layout_gravity="center_vertical"        android:singleLine="true"        android:textSize="16sp" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"        android:layout_marginTop="20dp">        <EditText            android:id="@+id/validateNum"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="2"            android:padding="10dp"            android:background="@drawable/shape_style"            android:hint="@string/validate"            android:textColorHint="@color/gray"            android:layout_gravity="center_vertical"            android:layout_marginRight="10dp"            android:singleLine="true"            android:textSize="16sp" />        <Button            android:id="@+id/validateNum_btn"            android:layout_width="0dp"            android:layout_height="match_parent"            android:layout_weight="1"            android:text="@string/validateNum"/>    </LinearLayout>    <Button        android:id="@+id/landing_btn"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="20dp"        android:text="@string/landing"/></LinearLayout>最后在AndroidManifest.xml中增加权限
    <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.READ_SMS" />    <uses-permission android:name="android.permission.GET_TASKS" />    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 好了,IT'S  ALL OVER. 就是那么简单,代码基本上全都贴上了,样子就是这个样子,demo丑了点难过还有一些其他的相关功能大家可以自己去看Mob的官方文档。筒子们,再见
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表