Android集成Mob3.0.0短信验证功能SMSSDK For Android

刚才集成了一下Mob的短信登录验证功能直接集成的3.0.0版本,发现官方的集成文档写的超级烂。所以写这篇博客让大家少走弯路。
1.首先先把环境配置好,这里拿as的环境配置为例。
Android Studio

AS版本的SMSSDK目录下包含以下内容:


这里写图片描述

smssdk_as目录结构

MobCommons.jar:Mob 通用公共库(必须)

MobTools.jar:Mob 工具公共库(必须)

SMSSDK-3.0.0.aar:SMSSDK 核心(必须)

SMSSDKGUI-3.0.0.aar:SMSSDK GUI 开源库(非必须)

HowToUse.txt:使用说明

注意:如果你同时使用ShareSDK,保留一份公共库就行(公共库版本一致或兼容)。

2.1、将以上文件按需放入Android Studio项目所要使用SMSSDK的Module所在的Libs里面:


这里写图片描述

smssdk_导入as项目

2.2、在Module的build.gradle里面将libs加入仓库(repositories):

repositories{
    flatDir{
        dirs 'libs' //就是你放aar的目录地址
    }
}

2.3、在Module的build.gradle里面添加依赖(dependencies ):

dependencies {
    ....//你的其他依赖,注意这里官方文档是错的。
       compile files('libs/MobCommons-2017.0607.1736.jar')
    compile files('libs/MobTools-2017.0607.1736.jar')
    compile name: 'SMSSDK-3.0.0', ext: 'aar'
    compile name: 'SMSSDKGUI-3.0.0', ext: 'aar'
}

最终,你的build.gradle看起来应该像这样:


这里写图片描述

smssdk_as build文件

三、添加代码

1.配置AndroidManifest.xml

1.1、添加以下权限:

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

1.2、添加以下Activity:

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

1.3、在Application节点下添加以下属性:

android:name="com.mob.MobApplication"

1.4、在Application节点下添加以下meta-data:

<!-- 通过AndroidManifest配置AppKey和AppSecret,如果你选择通过代码配置,则不需要配置以下meta-data -->
<meta-data android:name="Mob-AppKey" android:value="你的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>

最终,你的AndroidManifest.xml看起来应该像这样:


这里写图片描述

2.现在我们步入正文
这时候就不要看任何官方文档了全是坑。这里有两种登录验证方式第一种是我们自己绘制UI界面进行短信登录验证,第二种是用官方自带的UI界面进行短信验证登录。第一种比较常用我们先说第一种。
首先我们这时候现在布局中搭好UI界面。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="wswy.mymob.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发送短信验证码"
        android:onClick="play"
        />
    <EditText
        android:id="@+id/yanzhengma"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入手机验证码"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="tijiao"
        android:text="提交"
        />
</LinearLayout>

然后做好初始化工作,这个应该不能不会吧。然后我们在发送短信验证码的按钮监听里写入发送短信验证码的方法。

    public void play(View view) {
        //获取验证码
        SMSSDK.getVerificationCode("86","188****8888");
    }

然后我们在提交按钮的监听里先通过EditText获取到用户所输入的验证码,然后和刚才用的那个手机号一起提交到后台验证。

   public void tijiao(View view) {
        String number = yanzhengma.getText().toString();
        SMSSDK.submitVerificationCode("86","188****8888",number);
    }

这里手机号前面的86是代表中国大陆的手机号,如果不涉及到国外就写死。

最后我们在onCreate的方法里对SDK进行初始化

MobSDK.init(this, "1f35afb98e***","0fe8807a4bed3f15d4dd00e4e8e1****");
//这里是我的App key 和App secret,一定要换成你自己的不然一定会报错。

这句代码一定要写在第一行。
然后在onCreate里写下面代码。

 handler = new EventHandler(){
            @Override
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE){
                    //回调完成
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        //提交验证码成功
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this,"验证成功",Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                                startActivity(intent);
                            }
                        });

                    }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){
                        //获取验证码成功
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this,"验证码已发送",Toast.LENGTH_SHORT).show();
                            }
                        });
                    }else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){



                    }
                }else{
                    ((Throwable)data).printStackTrace();
                    Throwable throwable = (Throwable) data;
                    try {
                        JSONObject obj = new JSONObject(throwable.getMessage());
                        final String des = obj.optString("detail");
                        if (!TextUtils.isEmpty(des)){
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this,"提交错误信息",Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }
        };

        SMSSDK.registerEventHandler(handler);

不要问我handler为什么报红,那是因为你没初始化。把他初始化成全局变量。在我写intent跳转页面的地方写跳转,因为代码运行到那个地方的时候就代表验证成功了。它下面的那个else if里判断的是验证码是否发送成功,再下面是处理国家地区用的就是前面提到的那个“86”,最后的else方法区是处理错误信息用的。还有因为你提交了handler对象所以不用的时候一定要记得销毁,不然一定会内存泄漏。就是你上面最后一行代码。
销毁要这么处理。

  }
    protected void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterEventHandler(handler);
    }

能看懂吧。这是activity的生命周期的最后一个。连这都不认识的话,就不用看了。看你也看不懂。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,426评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 本文为菜鸟窝作者刘婷的连载。”商城项目实战”系列来聊聊仿”京东淘宝的购物商城”如何实现。 还记得上篇文章《商城项目...
    菜鸟窝阅读 690评论 0 5
  • 请回答1988,2015。青春会消亡,记忆不散场。单集90分钟时长,总会在不期而至的某一秒如拔刀流般唤起你心底的记...
    乔巴82阅读 304评论 0 0
  • HTTP状态码被分成了五类。100-199 用于指定客户端应相应的某些动作。200-299 用于表示请求成功。30...
    苏星河阅读 5,410评论 0 14