sharesdk短信验证码的集成
在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短信验证码的集成的更多相关文章
- ShareSDK短信验证码集成详细步骤
1.这里使用的是ShareSDK网的短信验证码SDK 官网 http://www.mob.com 先去http://www.mob.com/#/reg 注册成为开发者 填写相应的信息,邮箱账号,然后 ...
- django之集成阿里云通信(发送手机短信验证码)
python3 + django2.0 集成 "阿里云通信" 服务: (SDK文档地址:https://help.aliyun.com/document_detail/55491. ...
- iOS开发——短信验证码
作为iOS开发者,大家都应该知道ShareSDK这个比较出名的第三方分享(带统计功能)开发工具包. 他的官网今年年初发布了短信验证码的SDK.本文介绍它的短信验证码SDK.(部分过程参考官网如何集成的 ...
- Android学习笔记之短信验证码的获取和读取
PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...
- thinkphp整合系列之短信验证码、订单通知
现在这个短信通知泛滥的年代:应用如果没有个短信注册:你都不敢说你是搞开发的: 这个验证码搞起来是不难的:但是如果刚接触也是有点不知从哪下手的迷茫: 先讲下概念: 要想发送验证码:需要至少三项:appi ...
- Android Studio精彩案例(五)《JSMS短信验证码功能实现》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用.那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能 ...
- Android之短信验证码
我们今天所使用的方案仅仅是android手机设备集成短信验证码功能的方案之中的一个. 我们所採用的方案是使用聚合数据的短信验证sdk. 程序的界面例如以下所看到的: 实现步骤: 1.到聚合数据官网上申 ...
- Android 项目开发实战:聚合数据短信验证码
聚合数据集成短信验证码官网: https://www.juhe.cn/docs/api/id/54 我根据文档集成了一个例子 效果: 源码下载:http://download.csdn.net/det ...
- Spring Security实现短信验证码登录
Spring Security默认的一个实现是使用用户名密码登录,当初我们在开始做项目时,也是先使用这种登录方式,并没有多考虑其他的登录方式.而后面需求越来越多,我们需要支持短信验证码登录了,这时候再 ...
随机推荐
- jq自动触发事件
$('.btn_fath ').trigger("click");$('.btn_fath ').click();
- Jenkins 入门系列--Jenkins 的安装配置
写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之--03PDF文档下载 第二章 Jenkins安装与配置 2 Jenkins安装 在最简单的情况下,J ...
- C++的一些黑暗料理
本文中的“黑暗料理”仅限本人在学习C++的过程中感觉易忘.有趣.不为大多数人所知的一些特性. 1. C++中int型数据在VC++环境下最小值为什么是 -32678,而不是-32677,其中涉及到原码 ...
- 【bzoj 4059】Non-boring sequences
这题的重点不在于代码,而在于复杂度分析…… 首先我们肯定会写 $n^2$ 暴力,就是每次暴力扫 $[l,r]$ 区间,找到任意一个在此区间中只出现过一次的数.设其下标为 $mid$,显然在这个区间中任 ...
- HDU - 6582 Path (最短路+最小割)
题意:给定一个n个点m条边的有向图,每条边有个长度,可以花费等同于其长度的代价将其破坏掉,求最小的花费使得从1到n的最短路变长. 解法:先用dijkstra求出以1为源点的最短路,并建立最短路图(只保 ...
- Java多线程1:使用多线程的几种方式以及对比
前言 Java多线程的使用有三种方法:继承Thread类.实现Runnable接口和使用Callable和Future创建线程,本文将对这三种方法一一进行介绍. 1.继承Thread类 实现方式很简单 ...
- spring-data-mongodb两种实现方式对比
spring-data-mongodb两种实现方式对比 参考链接:https://blog.csdn.net/feinifi/article/details/83752862
- 动软生成器 model生成模板
<#@ template language="c#" HostSpecific="True" #> <#@ output extension= ...
- Java-Shiro(五):Shiro Realm讲解(二)IniRealm的用法、JdbcRelam的用法、自定义Realm
引入 上一篇在讲解Realm简介时,介绍过Realm包含大概4类缺省的Realm,本章主要讲解: 1)IniRealm的用法: 2)JdbcRealm基于mysql 默认表及查询语句实现认证.授权 ...
- linux运维、架构之路-K8s滚动更新及回滚
一.滚动更新 应用程序一次只更新一小部分副本,更新成功后,再更新更多的副本,最终完成所有副本的更新. 滚动更新的优点:零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性. 1. ...