Android Studio下Android客户端短信验证(详细+错误处理)

注:本篇教程是在学习慕课网Android客户端验证之后http://www.imooc.com/comment/500
进行的Android Studio 实操整理.可以移步慕课视频学习.

OK;
进行Android客户端短信验证主要分为以下步骤;
1.申请mob.com账户,并创建一个Android应用.
注册流程,进入官网http://www.mob.com/一步一步注册就ok了.
登陆并创建一个Android应用,
登陆之后点击右上角头像
这里写图片描述
点击进入后台
界面是这样的,目前mob.com提供了:
1.分享功能
2.短信验证功能(红线圈出部分)
3.视频分享功能.
ps:短信的验证与分享功能是免费的.
这里写图片描述

点击短信验证码SDK,
进入到短信验证码的后台,
弹出创建应用对话框,输入应用名称:SMSDemo,选中android.
这里写图片描述
创建应用之后,后台是这样的…官方的引导教程.
ps: 1.进入到后台应用. 2.短信验证的开发包(一会下载的就是它)
这里写图片描述
点击右上角进入应用后台,先看一下应用的后台,
这里写图片描述
概况:
可以看到有APP key ,APP Secret .这两个相当SMSDemo与mob.com进行交互的时候秘钥. 要写入到应用程序中的.

短信设置:

这里写图片描述
这里面设置短信支持的运营商,全球,中国,港澳,短信的后缀,可以理解为微博小尾巴...

到此呢,mob.com端应用的创建已经完成.

2.下载短信验证开发包—-短信验证码SDK
在应用后台界面,点击下载SDK,

这里写图片描述

选择免费短信验证码SDK,
这里写图片描述

下载到本地之后解压,目录结构大概是:
这里写图片描述

打开SMSSDK后发现是一个eclipse下的一个Android项目.
这里写图片描述

到此,短信验证SDK下载完成.

3.创建项目并引用SMSSDK库.
创建一个新的工程,SMSDemo
这里写图片描述

导入SMSSDK,右键点击SMSDemo,选择new->Module,选择导入eclipse ADT peoject项目,
这里写图片描述

找到下载的SMSSDK,
这里写图片描述

点击ok.
此时的目录结构增加,
这里写图片描述
注:此时可能会因为你的sdk版本下载完全,导致错误,
这里写图片描述
表示你的SDK目录下没有android-8,所以我们可以由两种办法解决:
1):点开你的SDK Manager 下载android-8.
2):简单粗暴,快速见效.(修改的SDK版本号必须是已经下载完成的)
点开SMSSDK->双击build.grade
这里写图片描述
修改

compileSdkVersion 16
    buildToolsVersion "19.1.0"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 19
    }

然后再重新build一下.就ok了.

言归正传,将SMSSDK添加到SMSDemo的依赖库中,
右键点击SMSDemo project->Open Module Settings
这里写图片描述
第四步,完成后弹出添加Module Dependecy 可选择的Module.
选中SMSDK,点击ok,
SMSDemo依赖中SMSSDK已经添加进来.
这里写图片描述

另外可以手动添加,移步到这位大牛博客细看.
http://www.cnblogs.com/avenwu/p/4299340.html

依赖添加完成后,点击app中的build.grade可以看到相关的依赖已经加了进来.
这里写图片描述
到此,SMSSDK依赖库的添加就完成了.

4.项目中使用SMSSDK
首先在manifests.xml配置权限,这是使用SMSSDK必须要有的

 <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" />

添加Activity标签

 <activity
            android:name="com.mob.tools.MobUIShell"            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:windowSoftInputMode="stateHidden|adjustResize" />

项目使用短信验证SDK主要
1>初始化SMSSDK
2>创建验证界面
3>获取注册界面信息
4>提交验证信息
5>显示返回成功

1>初始化SMSSDK
官方给的API中可以看到有两个方法用来初始化SMSSDK,initSDK();
这里写图片描述
解释一下参数:

            context上下文
       appkey  就是我们在mob.com创建应用时候生成APP Key
       appSecret 就是我们在mob.com创建应用时候生成APP Secret
       (warnOnReadContact 是否警告在读取联系人)

实测第一个跟第二个没有区别,使用过时的方法,在meizu手机上也能弹出警告,应该是flyme系统在应用触发读取联系人权限时做出保护措施.
这里我们最好在MainAcitivity.java中使用第二个方法.

package com.example.click.smsdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import java.util.HashMap;
import java.util.Random;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import cn.smssdk.gui.RegisterPage;

public class MainActivity extends AppCompatActivity {
    /**
     * mob.com创建应用时候生成APP_KEY
     */
    private static String APP_KEY = "a7de22b14b9d";
    /**
     *  APP_SECRET
     */
    private static String APP_SECRET = "29c2af302ab8c9f39d714d5e17b6c583";

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

        //1>初始化SMSSDK
        SMSSDK.initSDK(MainActivity.this, APP_KEY, APP_SECRET, true);

        //2>创建手机号注册界面
        RegisterPage registerPage = new RegisterPage();
        //3>获取注册界面信息
        registerPage.setRegisterCallback(new EventHandler() {
            @Override
            public void afterEvent(int event, int result, Object data) {
                //判断是否成功
                if (result == SMSSDK.RESULT_COMPLETE) {
                    //返回的Object类型的data是一个HashMap集合
                    HashMap<String, Object> phoneMap = (HashMap<String, Object>) data;
                    //获取返回的信息
                    String country = (String) phoneMap.get("country");
                    String phone = (String) phoneMap.get("phone");
                    //4>提交验证信息
                    submitUserInfo(country, phone);
                }
            }
        });
        //5>验证成功,显示成功
        registerPage.show(MainActivity.this);
    }

    /***
     * 提交用户信息
     *
     * @param country  选择的国家
     * @param phone   电话号码
     */
    public void submitUserInfo(String country, String phone) {
        String uid = Math.abs(new Random().nextInt()) + "";
        String nickName = "SMSDemo";
        String avatar = "头像";
        SMSSDK.submitUserInfo(country, phone, uid, nickName, avatar);

    }
}

SMSSDK.submitUserInfo是SMSSDK提供的用来提交验证信息的方法.

 SMSSDK.submitUserInfo(country, phone, uid, nickName, avatar);

运行截图:
1.警告信息
这里写图片描述

2.注册界面
这里写图片描述

3.信息确认
这里写图片描述

4.短信验证
这里写图片描述

5.验证成功的时候会显示一个Toast,太快了没有截到图.
服务器端短信记录
这里写图片描述

项目地址:https://github.com/Alpha-chen/SMSDemo
欢迎大家,拍砖指正!

猜你喜欢

转载自blog.csdn.net/u012782882/article/details/48543517