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…

Mockito入门

本文是我们名为“ 用Mockito进行测试 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入了解Mockito的魔力。 您将了解有关“模拟”&#xff0c;“间谍”和“部分模拟”的信息&#xff0c;以及它们相应的Stubbing行为。 您还将看到使用测试双打和对象匹配器进行验证的过…

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;其项目…

javafx性能_对JavaFX Mobile应用程序进行性能分析

javafx性能注意&#xff1a;本文最初发表于2009年&#xff0c;仅供参考。 请查阅我们其余的JavaFX文章 。 对于每个JavaFX Mobile应用程序开发人员而言&#xff0c;今天都是美好的一天。 你想知道为什么吗&#xff1f; 因为JavaME SDK 3.0已发布。 根据我午休时听到的消息&…

egg.js java 生产数据_Egg 2.15.0 发布,阿里开源的企业级 Node.js 框架

值得注意的变化新特性[EXPERIMENT FEATURE] 支持单线程模式Bug 修复[TYPE] 支持config.static.dir的数组[TYPE] 修复中间件类型不兼容[TYPE] 修复当 esModuleInterop 为 true 时类型错误的bug其他优化文档设计原则企业级应用在追求规范和共建的同时&#xff0c;还需要考虑如何平…

SpringMVC工作原理

Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色&#xff0c;这种分离让它们更容易进行定制。 Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。 SpringMVC原理图 SpringMVC接口解释&#xff1a; DispatcherSer…

2015年的Java –重大事件

2015年是Java的一年&#xff0c;语言&#xff0c;平台&#xff0c;生态系统和社区继续主导着软件领域&#xff0c;只有Javascript对整个行业产生了类似的影响。 如果您错过了2015年的亮点&#xff0c;这里是发生的一些重大事件。 Java 20岁了&#xff0c;还没有死&#xff01;…

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。…

java避免空指针异常_避免Java中的空指针异常

java避免空指针异常空指针异常是Java中最常见&#xff0c;最烦人的异常。 在这篇文章中&#xff0c;我想避免这种不希望的异常。 首先让我们创建引发空指针异常的示例 private Boolean isFinished(String status) { if (status.equalsIgnoreCase("Finish")) { ret…

比java好的_Java Spring真的比直接进行Java编程好吗

我已经读过依赖注入对于测试是有好处的,因为可以在没有依赖的情况下测试一个类,但是我想到的问题是,如果A类依赖于B或C或任何类,则独立于某个类的A类测试就是得出的测试结果为零,而不是失败或过去的测试.创建A类是为了执行某些操作,如果无论是使用新关键字还是在Spring中设置多…

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…

Yarn 和 Npm 命令行切换 摘录

原文作者: Gant Laborde原文地址: https://shift.infinite.red/np...中文翻译: 文蔺译文地址:http://www.wemlion.com/2016/n... 好&#xff0c;想必你对新的 JavaScript 包管理工具 yarn 已经有所耳闻&#xff0c;并已通过 npm i -g yarn 进行了安装&#xff0c;现在想知道怎么…

Something about Giraffe (II)

先解決老師留的幾個問題再說吧&#xff0c;23333 XD.Giraffe 是一個將 Deep Reinforcement Learning 和 Neural Network 结合到一起的Chess AI 程式。 作者 Matthew Lai 是一個了不起的人&#xff0c;目前就職於 Google Deepmind. 隨著AlphaGo席捲全球&#xff0c;隨著Deep lea…

php 时间选择,PHP-在学说2中的日期之间选择条目

PHP-在学说2中的日期之间选择条目我将因这个无法修复的最小错误而发疯。 我想在两天之间选择条目&#xff0c;下面的示例说明了我所有的失败&#xff1a;选择1。$qb->where(e.fecha > . $monday->format(Y-m-d));$qb->andWhere(e.fecha < . $sunday->forma…