在说Android中的短信验证码这个知识点前,我们首先来了解下聚合数据
聚合数据介绍
聚合数据是一家国内最大的基础数据API提供商,专业从事互联网数据服务。免费提供从天气查询、空气质量、地图坐标到金融基金、电商比价、违章查询等各个领域的安全、稳定和高效的数据。开发者可以免费试用聚合数据API进行移动APP的快速开发,免除数据收集、维护等环节,大大降低开发周期及成本。因此我们可以采用聚合数据给我提供好的一套东西来进行短信验证码的功能的添加。
首先我们要做准备工作,使用聚合数据主要分为以下步骤:
第一步,注册聚合数据
进入聚合数据官网(https://www.juhe.cn/)注册一个账号,完成注册后进入,"个人中心"——>“我的数据”点击申请数据如下图所示:
第二步,申请Appkey
申请后你会得到一个Appkey,此Appkey非常重要。
第三步,下载SDK
下载地址:https://www.juhe.cn/juhesdk
第四步,创建工程,配置环境
1.创建一个工程把我们下载的SDK里libs下的“armeabi文件”和"smscaptcha_v_1_4.jar"复制到我们工程的libs目录下
2.在AndroidManifest中添加开发密钥、所需权限等信息
(1)在application中添加开发密钥
<meta-data android:name="JUHE_KEY" android:value="开发者 key" />
(2)添加所需权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION " /> <uses-permission android:name="android.permission.READ_FINE_LOCATION" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_CONTACTS" />
(3)在应用程序创建时初始化 SDK引用的Context全局变量
在这一步我们有两种方法
第一种在Activity中配置
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 /** * 初始化方法 * @param context * @needFriends 是否需要好友功能 */ CommonFun.initialize(getApplicationContext(),true); setContentView(R.layout.activity_main); } }
下面这个注意是聚合数据文档给我们的建议,它建议我们把这个初始化工作放在Application中,因为程序运行首先会运行Application中的方法
注意:在SDK各功能组件使用之前都需要调用CommonFun.initialize(getApplicationContext(),true);,因此我们建议该方法放在Application的初始化方法中
所以我们就按它建议的方法,而不采用第一种方法这样我们需要创建一个Applicaiton类MyApplication如下
package com.example.android.sms; import com.thinkland.sdk.util.CommonFun; import android.app.Application; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); CommonFun.initialize(getApplicationContext(), false); } }
声明好Application后不要忘了在清单文件中配置
好了环境已经配置好了,我们来验证一下看看我们是否能收到短信
MainActivity的代码如下
package com.example.android.sms; import com.thinkland.sdk.sms.SMSCaptcha; import com.thinkland.sdk.util.BaseData; import com.thinkland.sdk.util.CommonFun; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.widget.Toast; public class MainActivity extends Activity { protected static final String TAG ="MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 SMSCaptcha对象在这个对象中有给我们发送短信验证码的方法 SMSCaptcha smsCaptcha=SMSCaptcha.getInstance(); //调用发送短信验证码的方法,在其中有一个回调 /** phone 手机号码 callBack 返回结果回调方法. */ smsCaptcha.sendCaptcha("此处输入你的手机号",new BaseData.ResultCallBack() { @Override public void onResult(int code, String reason, String result) { /* code:返回码: 服务器: 0 成功; 1 错误; 本地: -2 本地网络异常; -3 服务器网络异常;-4 解析错误;-5初始化异常 reason:返回信息 成功或错误原因. result:返回结果,JSON格式.错误或者无返回值时为空.*/ if(code==0){ Log.i(TAG,"code="+code); Log.i(TAG,"reason="+reason); Log.i(TAG,"result="+result); } } }); } }
返回结果如下:
第五步:完整的功能的实现,以及界面UI的实现
首先我们来看下界面第一个界面
我们在这个界面输入手机号,及短信的目的地,点击下一步后会弹出一个Dialog
点击确定后会调用会调用聚合数据给我们提供的sendCaptcha方法
/*点击确定后调用sendCaptcha方法向服务器提交手机号码 code(返回码): 服务器:0 成功,1 错误; 本 地:-2 本地网络异常,-3 服务器网络异常,-4 解析错误,-5 初始化异常。 reason(返回信息):成功或错误的原因。 result(返回结果):JSON格式,错误或者无返回值时为空。 */ smsCaptcha.sendCaptcha(phone,new ResultCallBack() { @Override public void onResult(int code, String reason, String result) { closeDialog(); if(code==0){ afterCapterRequested(); } } );
当返回的code==0时说明短信验证码发送成功,我们需要进行界面的跳转,代码如下
//当code=0成功时,跳转到输入验证码的Activity private void afterCapterRequested() { String phone=etPhoneNumber.getText().toString().trim().replaceAll("\\ss*", ""); String code=tvCountryNumber.getText().toString().trim(); String fomatedPhone=code+" "+splitPhoneNum(phone); Toast.makeText(this,"成功",Toast.LENGTH_SHORT).show(); Intent intent=new Intent(); intent.setClass(RegistActivity.this,CaptchaActivity.class); //把手机号码和格式化的手机号码传过去 intent.putExtra("formatedPhone",fomatedPhone); intent.putExtra("phone",phone); startActivity(intent); } //格式化手机号码的方法,格式化后的形式:+86 131 4118 2951 private String splitPhoneNum(String phone) { StringBuilder builder=new StringBuilder(phone); builder.reverse(); for(int i=4,len=builder.length();i<len;i+=5){ builder.insert(i,' '); } builder.reverse(); return builder.toString(); }
跳转的界面的布局如下
在这个界面我们需要输入短信验证码,输入短信验证码后点击下一步时会调用聚合数据的commitCaptcha这个方法,比对数据的方法,
smsCaptcha.commitCaptcha(phoneNumbber,verfiyCode,new ResultCallBack() { /* code:返回码: 服务器: 0 成功; 1 错误; 本地: -2 本地网络异常; -3 服务器网络异常;-4 解析错误;-5初始化异常 reason:返回信息 成功或错误原因. result:返回结果,JSON格式.错误或者无返回值时为空.*/ @Override public void onResult(int code,String reason,String result) { if(code==0){ Log.i(TAG,code+""); Log.i(TAG,reason); Log.i(TAG,result); Toast.makeText(CaptchaActivity.this,"您输入的验证码正确",Toast.LENGTH_SHORT).show(); CaptchaActivity.this.finish(); }else{ Toast.makeText(CaptchaActivity.this,"您输入的验证码不正确",Toast.LENGTH_SHORT).show(); } } });
我们可以看到这个方法所需的参数是①手机号码②手机验证码,我们调用此方法后聚合数据的服务器会进行判断,此验证码是否是刚才发送给这个手机号的验证码,验证后给我返回结果,我们根据返回的结果就可以进行相应的操作。
//R.string.receiveMessgeCountDown的内容为:<Data>接收短信大约需要<font color=#209526>%s</font>秒</Data> //这句话就是用time把 html里的%号替换掉 String unReceive=getResources().getString(R.string. receiveMessgeCountDown,time ); //把用html格式化的字符串设置给倒计时的文本框 tvCountDown.setText(Html.fromHtml(unReceive));
这样我们可以把html格式化的文本填充到tvCountDown中。接下来就是倒计时的方法了
private final int RETRY_INTERVAL =60; private int time=RETRY_INTERVAL; //倒计时方法 private void countDown() { new Thread( new Runnable() { @Override public void run() { while( time-->0){ //减一后的time把<Data>接收短信大约需要<font color=#209526>%s</font>秒</Data>中的%号替换掉 String countDownTime=CaptchaActivity.this .getResources().getString(R.string. receiveMessgeCountDown,time ); //在主线程上更新tvCountDown upDateTvCountDown(countDownTime); try { Thread. sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } String countDownTime=CaptchaActivity.this .getResources().getString(R.string. unreceiveMessage, time); upDateTvCountDown(countDownTime); time = RETRY_INTERVAL; } }).start(); } //在主线程上更新tvCountDown private void upDateTvCountDown(final String countDownTime) { runOnUiThread( new Runnable() { @Override public void run() { tvCountDown.setText(Html. fromHtml(countDownTime)); tvCountDown.setEnabled( false); } }); }
总结:其实使用聚合数据的短信验证码功能,主要就两个方法,一个是获取验证码的方法sendCaptcha,一个是提交验证码进行验证的方法commitCaptcha。我们在此基础上,可以根据需求对界面进行更改。以上就是对短信验证码的主要逻辑进行的介绍。
相关推荐
这个"Android开发免费短信验证码SDK Demo"提供了一个简单的示例,帮助开发者理解如何在自己的应用程序中实现这一功能。以下是对这个Demo及其相关知识点的详细解释: 1. **Android Studio**:作为Android开发的主要...
在Android开发中,有时会遇到特定的用户界面需求,例如6位自定义手机验证码输入框。这个场景下,开发者需要创建一个特殊的输入框,能够自动切换焦点,展示动态的光标效果,以提升用户体验。本篇文章将深入探讨如何...
在Android应用开发中,短信验证码是一种常见的用户身份验证机制,用于确保用户提供的手机号码真实有效。本文将详细讲解如何在Android应用中实现短信验证码的获取功能,以供开发者参考。 首先,我们需要选择一个短信...
在Android开发中,文本框(EditText)的自动填充功能是一项重要的用户体验优化技术,尤其是在涉及到身份验证或注册场景时,如输入短信验证码。本项目“Android文本框自动填充短信验证码”旨在提供一个直接运行的示例...
在Android应用开发中,短信验证码是一种常见的用户身份验证机制,用于确保用户安全并防止恶意行为。这个名为"Android短信验证码Demo"的项目是基于Mob.com移动开发者服务平台实现的,它提供了一个现成的解决方案,...
以上步骤概述了如何在Android应用中实现获取短信验证码及自定义GUI验证的基本流程。由于具体实现可能因项目需求和代码质量而异,这部分代码库可能需要根据实际需求进行调整和优化。代码库中可能包含了部分示例代码,...
在Android开发中,实现“android模拟发送手机验证码到通知栏”的功能是一项常见的需求,尤其对于学生作业或实际项目中的身份验证环节。这个功能涉及到多个关键知识点,包括Android的通知系统、网络请求、数据验证...
这个压缩包文件“Android高级应用源码-android仿淘宝,自动获取短信验证码 demo.rar”提供了一个Android应用程序的示例,该程序模拟了淘宝应用中的一个重要功能:自动获取短信验证码。这个功能在许多移动应用中用于...
在Android开发中,实现短信验证码功能是至关重要的一步,它涉及到网络请求、用户交互以及第三方服务的集成。 首先,我们来看一下集成短信验证码服务的过程。在这个示例中,我们使用的是“聚合数据”这个第三方服务...
这个压缩包"安卓验证码相关-短信验证码.rar"包含了与短信验证码实现相关的资源,可能包括源码示例和一些文档。虽然不能确保每个文件都能直接运行,但它们可以作为学习和参考的材料。 短信验证码的基本原理是:当...
在Android应用中,验证码通常分为短信验证码和图形验证码两种类型,本示例可能主要涉及的是短信验证码。 在Android中实现自动获取验证码,首先需要集成一个第三方的短信接收SDK,例如阿里云或腾讯云的短信服务。...
在Android应用开发中,短信验证码倒计时按钮是常见的功能之一,主要用于用户验证手机号码的正确性。这个功能通常在用户注册或者找回密码等场景下出现,用户输入手机号后,点击获取验证码,系统会发送一条包含验证码...
描述中的"android仿淘宝,自动获取短信验证码 demo"进一步强调了这是一个演示性质的代码示例,旨在展示如何在Android应用中实现实时接收和处理短信验证码的流程。开发者可能通过这个demo学习如何集成相关的服务和API...
尽管C#通常是.NET桌面应用或服务器端编程的首选语言,但在Android开发中,我们通常会使用Java或Kotlin。然而,通过Xamarin,C#也能用于Android应用开发。下面将详细讲解如何在Android中实现短信验证码的自动接收和...
在Android开发中,验证码是一种常见的安全机制,用于验证用户身份,防止恶意自动化操作,比如注册、登录、修改重要信息等。验证码通常分为图形验证码、滑动验证码、短信验证码等多种类型。下面将详细介绍Android环境...
Android自动获取输入短信验证码库AutoVerifyCode详解 Android自动获取输入短信验证码库AutoVerifyCode是一款功能强大且高效的Android库,旨在帮助开发者快速实现自动获取输入短信验证码的功能。该库提供了多种配置...
资源中的`smsdemo`可能是一个短信验证码的示例项目。短信验证码是通过发送一条包含随机数字或字母组合的短信到用户手机,用户在应用中输入接收到的验证码来验证身份。这种验证方式常见于注册、登录、支付等场景,...
压缩包中的文件“android 验证码之短信验证(云之讯短信平台)”可能包含了示例代码、配置文件、SDK文档等,可以帮助开发者快速理解和实现这个功能。由于无法一一验证具体内容,建议开发者根据实际情况进行调整和...
开发中在用户注册或找回密码之类的功能,经常会遇到获取短信验证码,获取验证码后需要等待1分钟倒计时,这段时间是不能再次发送短信请求的。 效果图: 二、实现步骤: 1、一个关键类:CountDownTimer(Android系统...
- **聚合数据Android项目开发实战:短信验证码**:这个上线资源包可能包含了完整的短信验证码功能实现,包括代码示例、UI设计以及可能的服务器接口文档。通过学习和研究这个项目,开发者可以深入理解Android短信...