在ShareSDK官网http://mob.com/注册并创建Android应用.申请APP_key,下载SDK等

根据官网开发文档导入SDK,目录结构如下

将以上文件按需放入Android Studio项目所要使用SMSSDK的Module所在的Libs里面,再在Module的build.gradle里面将libs加入仓库(repositories),
然后添加依赖(dependencies )示例如下:

repositories{
flatDir{
dirs 'libs' //就是你放aar的目录地址
}
}
dependencies {
....//你的其他依赖
compile name:'SMSSDK-<version>',ext:'aar'
compile name:'SMSSDKGUI-<version>',ext:'aar'
}

添加权限:

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

然后在“application”下添加如下activity:

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

代码实现:

初始化工作:

SMSSDK.initSDK(this, "您的appkey", "您的appsecret");

如果使用默认的短信注册页面可以用以下代码实现:

//打开默认注册页面
RegisterPage registerPage = new RegisterPage();
registerPage.setRegisterCallback(new EventHandler() {
public void afterEvent(int event, int result, Object data) {
// 解析注册结果
if (result == SMSSDK.RESULT_COMPLETE) {
@SuppressWarnings("unchecked")
HashMap<String,Object> phoneMap = (HashMap<String, Object>) data;
String country = (String) phoneMap.get("country");
String phone = (String) phoneMap.get("phone");
// 提交用户信息(此方法可以不调用)
registerUser(country, phone);
}
}
});
registerPage.show(context);

自定义UI实现手机注册短信验证:

package com.loaderman.smssdkdemo;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast; import java.util.HashMap; import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK; public class MainActivity extends AppCompatActivity { private EditText et_number;
private String number;
private EditText et_security;
private ProgressDialog dialog; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//SMSSDK.initSDK(this, "您的appkey", "您的appsecret");
//初始化工作,建议放在自己的Application的onCreate方法中
SMSSDK.initSDK(this, "1beb22f8862dc", "df387854c513ca138cd23d53cf33cec3");
et_number = (EditText) findViewById(R.id.et_phone);
et_security = (EditText) findViewById(R.id.et_security);
//注册短信回调监听
SMSSDK.registerEventHandler(ev);
} /**
* 短信验证的回调监听
*/
private EventHandler ev = new EventHandler() {
@Override
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) { //回调完成
//提交验证码成功,如果验证成功会在data里返回数据。data数据类型为HashMap<number,code>
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
Log.e("TAG", "提交验证码成功" + data.toString());
HashMap<String, Object> mData = (HashMap<String, Object>) data;
String country = (String) mData.get("country");//返回的国家编号
String phone = (String) mData.get("phone");//返回用户注册的手机号 Log.e("TAG", country + "====" + phone); if (phone.equals(number)) {
runOnUiThread(new Runnable() {//更改ui的操作要放在主线程,实际可以发送hander
@Override
public void run() {
showDailog("恭喜你!通过验证");
dialog.dismiss();
// Toast.makeText(MainActivity.this, "通过验证", Toast.LENGTH_SHORT).show();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
showDailog("验证失败");
dialog.dismiss();
// Toast.makeText(MainActivity.this, "验证失败", Toast.LENGTH_SHORT).show();
}
});
} } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {//获取验证码成功
Log.e("TAG", "获取验证码成功");
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {//返回支持发送验证码的国家列表 }
} else {
((Throwable) data).printStackTrace();
}
}
};
//验证结果弹窗
private void showDailog(String text) {
new AlertDialog.Builder(this)
.setTitle(text)
.setPositiveButton("确定", null)
.show();
}
/**
* 获取验证码
* @param v
*/
public void getSecurity(View v) {
number = et_number.getText().toString().trim();
//发送短信,传入国家号和电话---使用SMSSDK核心类之前一定要在MyApplication中初始化,否侧不能使用
if (TextUtils.isEmpty(number)) {
Toast.makeText(this, "号码不能为空!", Toast.LENGTH_SHORT).show();
} else {
SMSSDK.getVerificationCode("+86", number);
Toast.makeText(this, "发送成功:" + number, Toast.LENGTH_SHORT).show();
}
}
/**
* 向服务器提交验证码,在监听回调中判断是否通过验证
* @param v
*/
public void testSecurity(View v) {
String security = et_security.getText().toString();
if (!TextUtils.isEmpty(security)) {
dialog = ProgressDialog.show(this, null, "正在验证...", false, true);
//提交短信验证码
SMSSDK.submitVerificationCode("+86", number, security);//国家号,手机号码,验证码
Toast.makeText(this, "提交了注册信息:" + number, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "验证码不能为空", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//要在activity销毁时反注册,否侧会造成内存泄漏问题
SMSSDK.unregisterAllEventHandler();
}
}

activity_main.xml

<?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"
android:padding="10dp"
tools:context="com.loaderman.smssdkdemo.MainActivity"> <EditText
android:id="@+id/et_phone"
android:background="#ccc"
android:hint="请输入手机号码"
android:inputType="phone"
android:padding="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/et_security"
android:layout_marginTop="10dp"
android:background="#ccc"
android:hint="请输入短信验证码"
android:inputType="phone"
android:padding="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<Button
android:onClick="getSecurity"
android:id="@+id/btn_get"
android:layout_width="match_parent"
android:text="获取验证码"
android:layout_height="wrap_content"/>
<Button
android:onClick="testSecurity"
android:id="@+id/btn_register"
android:layout_width="match_parent"
android:text="注册"
android:layout_height="wrap_content"/>
</LinearLayout>

效果图:

sharesdk短信验证码的集成的更多相关文章

  1. ShareSDK短信验证码集成详细步骤

    1.这里使用的是ShareSDK网的短信验证码SDK  官网 http://www.mob.com 先去http://www.mob.com/#/reg 注册成为开发者 填写相应的信息,邮箱账号,然后 ...

  2. django之集成阿里云通信(发送手机短信验证码)

    python3 + django2.0 集成 "阿里云通信" 服务: (SDK文档地址:https://help.aliyun.com/document_detail/55491. ...

  3. iOS开发——短信验证码

    作为iOS开发者,大家都应该知道ShareSDK这个比较出名的第三方分享(带统计功能)开发工具包. 他的官网今年年初发布了短信验证码的SDK.本文介绍它的短信验证码SDK.(部分过程参考官网如何集成的 ...

  4. Android学习笔记之短信验证码的获取和读取

    PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...

  5. thinkphp整合系列之短信验证码、订单通知

    现在这个短信通知泛滥的年代:应用如果没有个短信注册:你都不敢说你是搞开发的: 这个验证码搞起来是不难的:但是如果刚接触也是有点不知从哪下手的迷茫: 先讲下概念: 要想发送验证码:需要至少三项:appi ...

  6. Android Studio精彩案例(五)《JSMS短信验证码功能实现》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用.那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能 ...

  7. Android之短信验证码

    我们今天所使用的方案仅仅是android手机设备集成短信验证码功能的方案之中的一个. 我们所採用的方案是使用聚合数据的短信验证sdk. 程序的界面例如以下所看到的: 实现步骤: 1.到聚合数据官网上申 ...

  8. Android 项目开发实战:聚合数据短信验证码

    聚合数据集成短信验证码官网: https://www.juhe.cn/docs/api/id/54 我根据文档集成了一个例子 效果: 源码下载:http://download.csdn.net/det ...

  9. Spring Security实现短信验证码登录

    Spring Security默认的一个实现是使用用户名密码登录,当初我们在开始做项目时,也是先使用这种登录方式,并没有多考虑其他的登录方式.而后面需求越来越多,我们需要支持短信验证码登录了,这时候再 ...

随机推荐

  1. Tensorflow模型移植Arm之一:C与Python互相调用

    一.C调用Python 1.新建一个Python文件,名称为py_multipy.py: #import numpy as np def multiply(a=1,b=2): print('Funct ...

  2. deep_learning_Function_matpotlib_scatter()函数

    plt.scatter()函数用于生成一个scatter散点图. matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, ...

  3. C语言之在头文件中定义全局变量

    通常情况下,都是在C文件中定义全局变量,在头文件中声明,但是,如果我们定义的全局变量需要被很多的C文件使用的话,那么将全局变量定义在头文件里面会方便很多,那到底是如何实现的? os_var.c文件内容 ...

  4. python之django_form组件笔记

    Form字段 Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial=None, 初始 ...

  5. jenkins插件管理提示“update information obtained:不可用ago”

    jenkins插件管理遇到两个错误 (1)插件管理页面提示:There were errors checking the update sites:IOException:Unable to tunn ...

  6. Lucky HDU - 5213 (莫队,容斥)

    WLD is always very lucky.His secret is a lucky number . is a fixed odd number. Now he meets a strang ...

  7. MST-prim ElogV

    #include<bits/stdc++.h> #define ll long long using namespace std; ; ; struct node { int t;int ...

  8. IANA

    IANA,全称The Internet Assigned Numbers Authority,即互联网数字分配机构1. Internet已成为全球范围的网络.为保证其正常运作,全球有很多机构参与进来. ...

  9. 文件操作相关函数(POSIX 标准 open,read,write,lseek,close)

    POSIX标准 open函数属于Linux中系统IO,用于“打开”文件,代码打开一个文件意味着获得了这个文件的访问句柄. int fd = open(参数1,参数2,参数3): int fd = op ...

  10. 基于django中settings中间件源码思想,实现功能的插拔式设计

    这里我们用到一个非常重要的模块,importlib,利用它可以实现字符串转python代码,再利用反射进行操作,这样就可以实现插拔式设计. 一.我们先做个初级的,把所有文件放到初级思想文件夹下: 1. ...