热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android中用Bmob实现短信验证码功能的方法详解

本文给大家分享通过第三方平台Bmob实现发送验证码和校验验证码的功能,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧

 这篇文章主要介绍发送验证码和校验验证码的功能,用到一个第三方平台Bmob,那Bmob是什么呢?Bmob可以开发一个云存储的移动应用软件,他提供了大量的标准的API接口,根据需要接入相关服务,开发者可以更加专注于应用的开发,让产品交付更快速,验证码功能就是其中一个。

一、跟其他第三方一样,我们开发之前要做一些准备工作。

1、首先,去官网注册一个帐号:http://www.bmob.cn/;

2、然后就可以创建应用了;具体怎么做Bmob说得很清楚了(官方操作介绍),如果你不想看,我简单说一下:点击右上角“我的控制台”,进入后点击“创建应用”,如图

然后填应用名,下面的根据需要选,如果实在不知选什么,就选最下面的其他,这样就好了,如图:

3、获取Application ID和REST API Key;点击左下角的设置,右边就有应用密钥了。

系统会帮你生成四个值,解释如下,其中Application ID是等下初始化的时候要用到的。

Application ID,SDK初始化必须用到此密钥

REST API Key,REST API请求中HTTP头部信息必须附带密钥之一

Secret Key,是SDK安全密钥,不可泄漏,在云端逻辑测试云端代码时需要用到

Master Key,超级权限Key。应用开发或调试的时候可以使用该密钥进行各种权限的操作,此密钥不可泄漏

4、创建短信验证码模版,只有审核通过之后的自定义短信模板才可以被使用,如果自定义的短信模板其状态显示审核中或者审核失败,再调用该方法则会以默认模板来发送验证码,开发者提交短信验证码模板时需注意以下几点:

1)、模板中不能有【】和 [] ,否则审核不通过;

2)、如果你提交的短信模板无法发送,则有可能包含一些敏感监控词,具体通过查阅《短信关键字监控参考文档》(我会连同源码一起发)来查看提交内容是否合法。

3)、一天一个应用给同一手机号发送的短信不能超过10条,否则会报10010错误,其他错误码可查看:短信功能相关错误码 。

支持自定义签名。注:官方签名属于独立通道,自定义签名属于共享通道,短信接收速度和稳定性会有所差异。

短信签名是指短信内容里【】 括起来的名称,签名字数为3~8个字,且不能有任何非文字字符。

模板内容支持3个变量:%appname%(您填写的应用名称),%smscode% (统生成的6位验证码),%ttl%(验证码有效时间,单位为分钟)。

若无需使用到变量则不用再加“%”,直接填写实际名称即可。

我今天创建了3个审核不通过的,我就纳闷了,后来我才看到上面这几点才发现错误,像下图就是审核不通过的:

5、下载短信验证码的SDK,下载后发现里面只有一个jar包。

注意:每个 Bmob 帐户有 10 条免费额度的短信数量用于测试,超过需要购买短信条数才能继续使用。

二、接下来就开始写客户端的代码了,之前写了一片关于跨界面倒计时的文章,(链接:跨界面倒计时,再也不怕倒计时过程中Activity被销毁了)今天就用那个程序来接着完成这次的验证码,哈哈哈,我是不是很懒呢。。。。不过其实布局也很简单,关键是下面。

1、导入jar包,我前面写过一篇文章是关于Android Studio导入jar包的文章(链接:Android Studio下导入jar包(以andbase.jar为例)),这里就简单带过。将jar文件放到libs目录下,接下来右键项目,选择open module settings,然后选择APP后点击右边的dependencies,再点击右上角的加号,选择第二个File dependenc以后会弹出窗口,选择刚才的jar包,最后点OK,OK。

2、SMS初始化。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
mCOntext= this; 
Log.e(TAG, "onStart 方法调用"); 
// SMS初始化 
BmobSMS.initialize(mContext, "还记得吗?这里填刚才拿到的Application ID"); 
init(); 
} 

3、点击按钮请求发送短信验证码。先看下布局吧:

<&#63;xml version="1.0" encoding="utf-8"&#63;> 
 
 

给“获取验证码”按钮设置点击事件:倒计时和请求发送短信验证码

btnCountdown.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
// 将按钮设置为不可用状态 
btnCountdown.setEnabled(false); 
// 启动倒计时的服务 
startService(mIntent); 
// 通过requestSMSCode方式给绑定手机号的该用户发送指定短信模板的短信验证码 
BmobSMS.requestSMSCode(mContext, etPhone.getText().toString(), "天才", new RequestSMSCodeListener() { 
@Override 
public void done(Integer smsId, BmobException ex) { 
if (ex == null) {//验证码发送成功 
Log.e("bmob", "短信id:" + smsId);//用于查询本次短信发送详情 
} 
} 
}); 
} 
}); 

验证验证码

btnSend.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
String number = etNumber.getText().toString(); 
if (!TextUtils.isEmpty(number)){ 
 // 通过verifySmsCode方式可验证该短信验证码 
BmobSMS.verifySmsCode(mContext,etPhone.getText().toString(), number, new VerifySMSCodeListener() { 
@Override 
public void done(BmobException ex) { 
if(ex==null){//短信验证码已验证成功 
Log.e("bmob", "验证通过"); 
}else{ 
Log.e("bmob", "验证失败:code ="+ex.getErrorCode()+",msg = "+ex.getLocalizedMessage()); 
} 
} 
}); 
} 
} 
}); 

别忘了在AndroidManifest.xml里面添加权限:

 
 
 
 
 
 

我的例子就写到这里了,不过还有一个知识点:查询短信发送状态。我把官网的贴一下(根据自己的业务决定要不要这个功能,o(︶︿︶)o 唉,其实就是我懒,哈哈哈):

// 通过querySmsState方式可查询指定smsId的发送状态 
BmobSMS.querySmsState(context, smsId, new QuerySMSStateListener() { 
@Override 
public void done(SmsState state, BmobException ex) { 
if(ex==null){ 
Log.i("smile","短信状态:"+state.getSmsState()+",验证状态:"+state.getVerifyState()); 
} 
} 
}); 

注:SmsState包含两种状态:

1、smsState(短信状态) :SUCCESS(发送成功)、FAIL(发送失败)、SENDING(发送中)。

2、verifyState(验证状态):true(已验证)、false(未验证)。

以上所述是小编给大家介绍的Android中用Bmob实现短信验证码功能的方法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
author-avatar
正好忍心_702
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有