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:

 <activityandroid: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;@Overrideprotected 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() {@Overridepublic 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@Overridepublic void run() {showDailog("恭喜你!通过验证");dialog.dismiss();//    Toast.makeText(MainActivity.this, "通过验证", Toast.LENGTH_SHORT).show();}});} else {runOnUiThread(new Runnable() {@Overridepublic 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();}}@Overrideprotected void onDestroy() {super.onDestroy();//要在activity销毁时反注册,否侧会造成内存泄漏问题SMSSDK.unregisterAllEventHandler();}
}

 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns: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"><EditTextandroid: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"/><EditTextandroid: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"/><Buttonandroid:onClick="getSecurity"android:id="@+id/btn_get"android:layout_width="match_parent"android:text="获取验证码"android:layout_height="wrap_content"/><Buttonandroid:onClick="testSecurity"android:id="@+id/btn_register"android:layout_width="match_parent"android:text="注册"android:layout_height="wrap_content"/>
</LinearLayout>

 效果图:

转载于:https://www.cnblogs.com/loaderman/p/6520382.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java四神兽_SpringCloud五大神兽之Eureka

注册中心概述什么是注册中心&#xff1f;相当于服务之间的‘通讯录’&#xff0c;记录了服务和服务地址之间的映射关系。在分布式架构中服务会注册到这里。当服务需要调用其他服务时&#xff0c;就在注册中心找到其他服务的地址&#xff0c;进行调用注册中心的主要作用&#xf…

windows下dubbo-admin和zookeeper安装部署

1. 概述 ZooKeeper是Hadoop的正式子项目&#xff0c;它是一个针对大型分布式系统的可靠协调系统&#xff0c;提供的功能包括&#xff1a;配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务&#xff0c;将简单易用的接口和性能高效、…

jpush java api_JPush極光推送Java服務器端API

產品功能說明極光推送(JPush)是一個端到端的推送服務&#xff0c;使得服務器端消息能夠及時地推送到終端用戶手機上&#xff0c;讓開發者積極地保持與用戶的連接&#xff0c;從而提高用戶活躍度、提高應用的留存率。極光推送客戶端支持 Android, iOS 兩個平台。本 Android SDK …

Maven详解(转)

转自 https://www.cnblogs.com/hongwz/p/5456578.html 一.前言 以前做过的项目中&#xff0c;没有真正的使用过Maven&#xff0c;只知道其名声很大&#xff0c;其作用是用来管理jar 包的。最近一段时间在项目过程中使用Maven&#xff0c;用Maven构建的web项目&#xff0c;其项目…

java商品编写代码_商品品牌业务之后台Java代码的编写

今天是刘小爱自学Java的第146天。感谢你的观看&#xff0c;谢谢你。商品品牌业务之后台Java代码的编写-1.jpg (50.46 KB, 下载次数: 1)2021-2-5 00:22 上传学习计划安排如下&#xff1a;昨天实现了前端页面的编写以及发送请求&#xff0c;今天关于异步请求工具axios的简单说明。…

java中8种数据类型和默认值所占字节数

java 8种基本数据类型的默认值及所占字节数通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge;2 3 public class Ceshi { 4 int a; 5 double b; 6 boolean c; 7 char d; 8 float f; 9 byte e; 10 long h; 11 short j; 12 public static void main(String…

软件测试实验1:为三角形问题编写一个Java程序,并用Junit测试程序

实验报告 实验内容&#xff1a; 1.Install Junit(4.12), Hamcrest(1.3) with Eclipse 2.Install Eclemma with Eclipse 3.Write a java program for the triangle problem and test the program with Junit. 实验步骤&#xff1a; 1.在eclipse中安装Junit、Hamcrest和eclemma。…

SurfaceFlinger与Surface概述

基本原理&#xff1a; SF一个Client对应一个app中的SurfaceComposerClient&#xff0c; 分别是Binder的n端和b端&#xff0c;主要用来CreateSurface 一个app中有多个Activity&#xff0c;一个Activity一般有一个Surface(除SurfaceView&#xff0c;一个View就有一个Surface)&…

拼图项目动手指南

Jigsaw项目将把模块化引入Java平台&#xff0c;根据原始计划&#xff0c;它将在12月10日完成功能。 所以我们在这里&#xff0c;但是拼图在哪里&#xff1f; 在过去的六个月中肯定发生了很多事情&#xff1a; 原型问世 &#xff0c;内部API的迫在眉睫的删除引起了很大的骚动 &…

java实现回文验证_LeetCode 精选 TOP 面试题(Java 实现)—— 验证回文串

文章目录一、题目描述1.1 题目验证回文串给定一个字符串&#xff0c;验证它是否是回文串&#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。说明&#xff1a;本题中&#xff0c;我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a cana…

java开发门禁指纹,指纹门禁

大兀人脸识别控制系统USB指纹仪DW9拓扑图(指纹为java系统直接采集、云或控制板直接比对&#xff0c;无需二次注册&#xff0c;人脸为htttp上传服务器或rtsp视频流比对方案)大兀活体指纹门禁采用BS架构&#xff0c;已集成进大兀人脸识别系统&#xff0c;如二次开发可直接调用jav…

使用Selenide进行有效的UI测试

等待奇迹 圣诞节是奇迹的时刻。 在新的一年的前夕&#xff0c;我们都为下一年制定了计划。 我们希望所有问题都将在最后一年消失&#xff0c;在来年出现奇迹。 每个Java开发人员都梦想着创造一个奇迹&#xff0c;使他成为世界上最有效的Java开发人员。 我想向你展示这样的奇…

android之seekbar

做了一个拖动滑块改变数值的demo 下附上代码: <SeekBar android:id"id/myseekbar" android:layout_width"match_parent" android:layout_marginTop"20dp" android:thumb"drawable/slider" android:layout_height&qu…

php 微信小程序 循环 多选,微信小程序实现多选功能

本文为大家分享了微信小程序实现多选功能的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下代码&#xff1a;{{num 1}}/{{quesyion.length}}{{question[num][0]}}A {{question[num][1]}}B {{question[num][2]}}C {{question[num][3]}}D {{question[num][4]}}正确答案…

php+反序列化代码执行漏洞,PHP反序列化漏洞

0x001 漏洞产生原理在反序列化的过程中自动触发了某些魔术方法。未对用户输入的序列化字符串进行检测&#xff0c;导致攻击者可以控制反序列化过程&#xff0c;从而导致XSS、代码执行、文件写入、文件读取等不可控后果。0x002 漏洞触发条件一般只能通过代码审计的方式挖掘该漏洞…

java filter 模式,Java设计模式----过滤器模式(挑三拣四)

过滤器模式描述拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器&#xff0c;并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志&#xff0c;或者跟踪请求&#xff0c;然后把请求传给相…

java项目processes设置,Jvm调优和SpringBoot项目优化的详细教程

参考文章1、先看一下未设置JVM参数的情况&#xff0c;默认情况下&#xff0c;没有设置任何Jvm参数。2、设置Jvm参数。配置参数&#xff1a;关于这些设置的JVM参数是什么意思&#xff0c;参考Jvm调优。-XX:MetaspaceSize128m (元空间默认大小)-XX:MaxMetaspaceSize128m (元空间最…

Git问题Everything up-to-date解决

Git问题Everything up-to-date解决 【自己的亲身错误体验】 我的上一篇博客&#xff0c;说了怎么上传一个项目到git远程上面。今天我写好一个小栗子&#xff0c;准备再次上传的时候。我依旧是放在我的F:\github\js- 这个和我的github上的远程仓库相同名称的文件中的 在这里空白…

java超出gc开销限制_超出了GC开销限制– Java堆分析

java超出gc开销限制这篇文章是我们原来的GC开销超出问题模式的延续。 正确的Java堆分析对于消除O​​utOfMemoryError&#xff1a;GC开销问题至关重要。 如果您不熟悉此Java HotSpot 1.6错误&#xff0c;建议您首先阅读有关此主题的第一篇文章 。 本文将为您提供一个示例程序和…

java自定义一个timeout,Timeout操作符 RxJava 学习笔记二十一

timeout用于检测在给定时间内observables没有及时响应。如果指定的时间量没有发出任何项目&#xff0c;则超时会使observables失败并出现TimeoutException。我们将从debounce的示例中重用我们的observable来演示超时。输出&#xff1a;只要值不超过200ms&#xff0c;就会输出。…