短信验证平台无法打开

提供以下功能:&
手机定位监护
手机短信监护
手机通话监护
手机录音监护
&24X7自助查询
位置定位(粗略)
&精准手机定位&短信记录&通话与敏感违禁内容识别&环境拾音&微信QQ监控&手机上网监控
短信发来的链接始终无法打开,我可以上其他网站,网络没问题
您好,请问您收到的链接是否为 http://anxin360.com/jar/360.jad,如果手机上不能访问,请尝试在PC上输入以下链接,http://anxin360.com/jar/360.jar ,下载相应的软件。谢谢!
手机定位 实时获取受控设备的位置,支持基站定位、WIFI定位与GPS卫星定位。
获取受控设备的短信聊天记录,包括发信人、收信人与内容。
获取受控设备的通话往来记录与录音,智能自动识别关键内容。
应用程序监控对受控设备上的应用程序安装情况进行监控、记录并上报。
聊天行为监控
管控被控端的聊天行为,可监控国内外常见的聊天软件。
网站浏览监控
对受控设备上的网站浏览行为进行监控,包括网址、时间,自动判别违规网站。
画面与环境拾音
家长可实时查看某一个被控端设备当前的屏幕画面与环境拾音。
关键词监控
可针对短信、通话内的特殊关键词进行智能匹配警报。
常见问题支付问题在线分销 客户服务工单系统:24时热线:人工热线:客服邮箱:远程协助:010-小时)021- (仅工作日)
& 《安心360手机定位软件》软件著作权登记号:&&|&&《酷享安心360移动设备主机监测系统》软件著作权登记号:功能设计规范参考:《中华人民共和国公共安全行业标准GA/T910-2010》主机系统类别:安卓Android/苹果iOS 版权所有(C)&&&&&&&&短信 SMS 服务使用指南
短信服务适用的场景很多:
用户验证:在处理用户登录、修改密码等操作时,需要向用户的手机发送一条包含验证码的短信,以确保账户安全。
操作验证:在银行金融类应用中,当用户对账户资金进行转账、消费等敏感操作时,需要通过验证码来确认是否为用户本人操作。
通知与营销推广:电商在发货后将快递单号、订单号、发货时间等信息会通过短信发给买家,以达到良好的购物体验;或是定期将新产品及促销信息发送给消费者。
根据电信运营商的规范,短信按照用途被分为三类:
【短信签名】您请求重设应用“应用名称”的密码,请输入验证码 123456 验证,验证码仅在 10 分钟内有效。
【购物网】您尾号为34323的订单号已经通过宅急送(快递单号)安排递送,请您开箱验货确认无误后签收,物流查询拨打400-0000-xxx。
【当当】春风十里,好书陪你!30万种畅销书5折封顶! 回TD退订
不同类型的短信遵循不同的 ,不符合规定的短信将无法发送。
开发者在 LeanCloud 应用控制台开启与短信相关的服务后(参见 ),即可通过 SDK 向用户发送短信:
AVShortMessageRequestOptions *options = [[AVShortMessageRequestOptions alloc] init];
options.templateName = @&Register_Notice&;// 控制台预设的模板名称
options.signatureName = @&LeanCloud&;
// 控制台预设的短信签名
这个手机号码发送短信,使用预设的模板和签名
[AVSMS requestShortMessageForPhoneNumber:@&&
options:options
callback:^(BOOL succeeded, NSError * _Nullable error) {
if (succeeded) {
/* 请求成功 */
/* 请求失败 */
AVSMSOption option = new AVSMSOption();
option.setTemplateName(&Register_Notice&);
// 控制台预设的模板名称
option.setSignatureName(&LeanCloud&);
// 控制台预设的短信签名
这个手机号码发送短信,使用预设的模板和签名
AVSMS.requestSMSCodeInBackground(&&, option, new RequestMobileCodeCallback() {
public void done(AVException e) {
if (null == e) {
/* 请求成功 */
/* 请求失败 */
这个手机号码发送短信,使用预设的模板和签名
AV.Cloud.requestSmsCode({
mobilePhoneNumber: '',
// 目标手机号
template: 'Register_Notice',
// 控制台预设的模板名称
sign:'LeanCloud'.
// 控制台预设的短信签名
}).then(function(){
//调用成功
}, function(err){
//调用失败
这个手机号码发送短信,使用预设的模板(「Register_Notice」参数)和签名(「LeanCloud」参数)
AVCloud.RequestSMSCodeAsync(&&,&Register_Notice&,null,&LeanCloud&).ContinueWith(t =&
var result = t.R
// result 为 True 则表示调用成功
这个手机号码发送短信,使用预设的模板(「Register_Notice」参数)
AVOSCloud.requestSMSCode(&&, &Register_Notice&, null);
用户收到的短信内容如下:
【LeanCloud】感谢您注册 LeanCloud,领先的 BaaS 提供商,为移动开发提供强有力的后端支持。
短信的内容来自名为 Register_Notice 的 ,需要在控制台提前创建并通过审核。
LeanCloud 为 ,是必需添加的,也需要在控制台提前创建并通过审核才可使用。
开通短信服务
在安全中心开启短信服务
要使用短信服务,首先需要在控制台创建一个应用,然后进入 ,确保 短信服务 开关是打开的:
完成短信配置
然后进入 ,请确保以下选项处于勾选状态。
&启用通用的短信验证码服务(开放 requestSmsCode 和 verifySmsCode 接口)
开启:开发者可以使用短信进行验证功能的开发,比如,敏感的操作认证、异地登录、付款验证等业务相关的需求。
关闭:请求验证发送短信以及验证短信验证码都会被服务端拒绝,但是请注意,跟用户相关的验证与该选项无关。
设置默认签名
短信发送的时候需要有签名运营商才会放行,如前面示例中的「购物网」、「当当」即为短信签名。在开始发送短信之前,你需要进入,设置默认的短信签名(第一个签名即为「默认签名」):
创建签名只需要输入内部名称和签名字符串即可,如下图所示:
等签名审核完成之后,你就可以调用 LeanCloud API 发送自己的短信了。我们看到最开始的示例代码里面还有「短信模板」,但是因为模板并不是必须的,所以留待 。
验证类短信
通过短信进行注册、登录或重要操作的验证,是一种非常常见的需求。这里我们以一个购物应用为例,说明如何使用 LeanCloud 短信服务完成操作认证:
用户点击支付订单发起敏感操作
调用接口发送验证短信注意,在这一步之前,我们假设开发者已经完成了前面章节提及的所有短信服务设置。
AVShortMessageRequestOptions *options = [[AVShortMessageRequestOptions alloc] init];
options.TTL = 10;
// 验证码有效时间为 10 分钟
options.applicationName = @&应用名称&;
// 应用名称
options.operation = @&某种操作&;
// 操作名称
[AVSMS requestShortMessageForPhoneNumber:@&186xxxxxxxx&
options:options
callback:^(BOOL succeeded, NSError * _Nullable error) {
if (succeeded) {
/* 请求成功 */
/* 请求失败 */
AVSMSOption option = new AVSMSOption();
option.setTtl(10);
// 验证码有效时间为 10 分钟
option.setApplicationName(&应用名称&);
option.setOperation(&某种操作&);
AVSMS.requestSMSCodeInBackground(&186xxxxxxxx&, option, new RequestMobileCodeCallback() {
public void done(AVException e) {
if (null == e) {
/* 请求成功 */
/* 请求失败 */
AV.Cloud.requestSmsCode({
mobilePhoneNumber: '186xxxxxxxx',
name: '应用名称',
op: '某种操作',
// 验证码有效时间为 10 分钟
}).then(function(){
//调用成功
}, function(err){
//调用失败
// 下面参数中的 10 表示验证码有效时间为 10 分钟
AVCloud.RequestSMSCodeAsync(&186xxxxxxxx&,&应用名称&,&某种操作&,10).ContinueWith(t =&
if(!t.Result)
//调用成功
// 下面参数中的 10 表示验证码有效时间为 10 分钟
AVOSCloud.requestSMSCode(&186xxxxxxxx&, &应用名称&, &某种操作&, 10);
用户收到短信,并且输入了验证码。在进行下一步之前,我们建议先进行客户端验证(对有效性进行基本验证,例如长度、特殊字符等),这样就避免了错误的验证码被服务端驳回而产生的流量,以及与服务端沟通的时间,有助于提升用户体验。
调用接口验证用户输入的验证码是否有效。注意,调用时需要确保验证码和手机号的参数顺序,我们假设验证码数字是「123456」。
[AVOSCloud verifySmsCode:@&123456& mobilePhoneNumber:@&186xxxxxxxx& callback:^(BOOL succeeded, NSError *error) {
if(succeeded){
//验证成功
AVSMS.verifySMSCodeInBackground(&123456&, &186xxxxxxxx&, new AVMobilePhoneVerifyCallback() {
public void done(AVException e) {
if (null == e) {
/* 验证成功 */
/* 验证失败 */
AV.Cloud.verifySmsCode(';, '186xxxxxxxx').then(function(){
//验证成功
}, function(err){
//验证失败
AVCloud.VerifySmsCodeAsync(&123456&,&186xxxxxxxx&).ContinueWith(t =&{
if(t.Result)
// 验证成功
AVOSCloud.verifySMSCode(';, '186xxxxxxxx');
/* 验证成功 */
} catch (AVException ex) {
/* 验证失败 */
针对上述的需求,可以把场景换成异地登录验证、修改个人敏感信息验证等一些常见的场景,步骤是类似的,调用的接口也是一样的,仅仅是在做 UI 展现的时候需要开发者自己去优化验证过程。
语音短信验证码
文本短信验证码在到达率上有一定的风险,尽管经过我们长期得到的用户反馈,到达率已接近 100%,但是有些应用的时效性和安全性要求极高,所以我们也推出了语音短信验证码的服务,调用的方式如下:
AVShortMessageRequestOptions *options = [[AVShortMessageRequestOptions alloc] init];
options.type = AVShortMessageTypeV
[AVSMS requestShortMessageForPhoneNumber:@&188xxxxxxxx&
options:options
callback:^(BOOL succeeded, NSError * _Nullable error) {
if (succeeded) {
NSLog(@&A voice short message has been sent.&);
AVSMSOption option = new AVSMSOption();
option.setSmsType(AVSMSOption.AVSMS_TYPE.VOICE_SMS);
AVSMS.requestSMSCodeInBackground(&188xxxxxxxx&, option, new RequestMobileCodeCallback() {
public void done(AVException e) {
if (null == e) {
// 发送成功
// 发送失败
AV.Cloud.requestSmsCode({
mobilePhoneNumber: 'xxxxxxxxx',
smsType: 'voice'
}).then(function() {
// 发送成功
}).catch(function(error) {
// 处理异常
AVCloud.RequestVoiceCodeAsync (&&).ContinueWith(t =&{
// 发送成功
AVOSCloud.requestVoiceCode(&&);
发送成功之后,用户的手机就会收到一段语音通话,它会播报 6 位数的验证码,然后开发者需要再次调用:
[AVOSCloud verifySmsCode:@&123456& mobilePhoneNumber:@&186xxxxxxxx& callback:^(BOOL succeeded, NSError *error) {
if(succeeded){
//验证成功
AVSMS.verifySMSCodeInBackground(&123456&, &186xxxxxxxx&, new AVMobilePhoneVerifyCallback() {
public void done(AVException e) {
if (null == e) {
/* 验证成功 */
/* 验证失败 */
AV.Cloud.verifySmsCode(';, '186xxxxxxxx').then(function(){
//验证成功
}, function(err){
//验证失败
AVCloud.VerifySmsCodeAsync(&123456&,&186xxxxxxxx&).ContinueWith(t =&{
if(t.Result)
// 验证成功
AVOSCloud.verifyCode(';, '186xxxxxxxx');
/* 验证成功 */
} catch (AVException ex) {
/* 验证失败 */
再次验证用户输入的验证码是否正确。
营销、通知类短信
通知类短信非常普遍,例如联通用户从外地进入上海可能会收到如下短信:
尊敬的用户:欢迎您来到上海,如需帮助请拨打客服热线10010或登录www.10010.com,优惠订购机票酒店请拨打116114。中国联通
这是一个来自通信运营商的通知类短信的规范案例。
在实际使用的过程中,通知类短信往往会因为措辞不当而被短信服务商拒绝发送;甚至还会出现 开发者发送过去的请求被服务商直接屏蔽的情况。因此,LeanCloud 在发送推广类的短信时需要进行内容审核(也就是开发者需要事先创建,我们审核通过之后再按照模板进行内容发送)。
营销类短信是应用开发者与潜在客户沟通、进行产品推广和销售的有效手段。营销类短信使用时跟
使用没有任何本质区别,步骤依次是
营销类短信默认会在短信最后加上「回复TD退订」,这是运营商的强制要求。
自 2016 年 6 月起,营销类短信不允许由个人用户发送。所有营销类短信必须提供有效的公司或者企业名称,缺失名称将导致营销类短信无法发送。伪造或使用虚假名称将会被追究法律责任。
第一次提交营销模板,其使用的营销签名需要上报至运营商进行备案,审核过程将需要 2~5 个工作日。当营销签名完成了备案,此后再提交营销模板,审核将在工作日 4 小时内完成。
开发者可以使用短信模板来自定义短信的内容。为了确保短信内容的合法性及投递成功率,短信模板需要经过 人工审核 通过后,开发者才能在接口中调用该模板。
短信签名是指短信内容里用【】括起来的短信发送方名称,根据运营商的规定,它必须出现在短信内容的开头或结尾。你需要在
为每个应用创建合法的短信签名。如果一个应用拥有多个短信签名,请确保选择其一作为默认签名。
短信签名缺失、或没有默认签名、或未通过审核且无其他可用签名,都将导致短信无法发送。
签名规范:
签名必须是应用名称、公司简称、品牌名或网站名,容易被用户识别;长度控制在 2 到 8 个字符之间。例如签名【应用A】中的 应用A 为 3 个字符。
不能有任何非文字字符,也不可以是变量。
不允许全部为英文字符或全部为数字
不需要带上实心方头括号【】
一个应用最多可以拥有 50 个签名(包含审核未通过的签名)。
要创建短信模板,先进入控制台,选择一个应用,再选择 。选择需要的模板类型:
验证码类型
如果模板类型选择了通知类或者验证类,但短信内容涉及到营销内容,则无法通过审核。要发送营销类短信请阅读 。
假设提交的短信模板的类型为「通知类」内容如下:
尊敬的的用户,您的订单号:{{order_id}} 正在派送,请保持手机畅通,我们的快递员随时可能与您联系,感谢您的订阅。
并且模板名称为 Order_Notice,并且为已经拥有了一个审核通过的签名叫做「天天商城」,签名的名称叫做 sign_BuyBuyBuy ,当模板通过审批后就可以调用如下代码发送这条通知类的短信:
AVShortMessageRequestOptions *options = [[AVShortMessageRequestOptions alloc] init];
options.templateName = @&Order_Notice&;
options.signatureName = @&sign_BuyBuyBuy&;
options.templateVariables = @{ @&order_id&: @&0& }; // 使用实际的值来替换模板中的变量
[AVSMS requestShortMessageForPhoneNumber:@&186xxxxxxxx&
options:options
callback:^(BOOL succeeded, NSError * _Nullable error) {
if (succeeded) {
/* 请求成功 */
/* 请求失败 */
AVSMSOption option = new AVSMSOption();
option.setTemplateName(&Order_Notice&);
option.setSignatureName(&sign_BuyBuyBuy&);
Map&String, Object& parameters = new HashMap&String, Object&();
parameters.put(&order_id&, &0&);
// 使用实际的值来替换模板中的变量
option.setEnvMap(parameters);
AVSMS.requestSMSCodeInBackground(&186xxxxxxxx&, option, new RequestMobileCodeCallback() {
public void done(AVException e) {
if (null == e) {
/* 请求成功 */
/* 请求失败 */
AV.Cloud.requestSmsCode({
mobilePhoneNumber: '186xxxxxxxx',
template: 'Order_Notice',
sign:'sign_BuyBuyBuy'
order_id: '0'}).then(function(){
//调用成功
}, function(err){
//调用失败
var env = new Dictionary&string,object&()
{&order_id&,&0&}
// 使用实际的值来替换模板中的变量
AVCloud.RequestSMSCodeAsync(&186xxxxxxxx&,&Order_Notice&,env,&sign_BuyBuyBuy&).ContinueWith(t =&
var result = t.R
// result 为 True 则表示调用成功
Map&String, Object& parameters = new HashMap&String, Object&();
parameters.put(&order_id&, &0&);
// 使用实际的值来替换模板中的变量
AVOSCloud.requestSMSCode(&186xxxxxxxx&, &Order_Notice&, parameters);
用户收到的内容如下:
【天天商城】尊敬的用户,您的订单号:0 正在派送,请保持手机畅通,我们的快递员随时可能与您联系,感谢您的订阅。
模板可以使用自定义变量,在调用模板时以参数形式传入。模板语法遵循
自定义变量的值不允许包含实心括号 【】 。
在模板中还可以使用系统预留变量,在短信发送时,它们会被自动填充,开发者无法对其重新赋值:
欢迎注册{{name}}应用!请使用验证码{{code}}来完成注册。该验证码将在{{ttl}}分钟后失效,请尽快使用。
name:应用名称
code:验证码(通知类和营销类不会包含)
ttl:过期时间(默认为 10 分钟)
sign:短信签名
template:模板名称
开发者在设置短信内容的时候,文字表述上应该做到规范、正确、简洁。鉴于开发者的应用场景各异,我们整理了以下范例来说明如何撰写规范的短信内容。需要再次强调,一切跟营销推广相关的短信模板,请在创建模板时务必选择营销类,否则将无法通过审核。
【正确范例】
XX房东您好,租客{{guest_name}}(手机号码:{{guest_phone}})于{{payment_create_time}}向您支付了房租。租金为{{rent_price}}元,房屋地址在{{rent_addr}}。请关注微信公众号:XX租房。XX租房APP下载地址:
短信中的 URL 不允许全部设置为变量,这样是为了确保安全,防止病毒以及不良信息的传播。错误范例如下:
尊敬的会员您好,您的订单(订单号{{orderId}})已确认支付。5周年庆新品降价!大牌奢品上演底价争霸,低至2折!BV低至888元!阿玛尼低至199元!都彭长款钱包仅售499元!杜嘉班纳休闲鞋仅售1399元!周年庆家居专场千元封顶现已开启!{{download_link}} 客服电话400-881-6609 回复TD退订
以上通知内容包含了象 打折、降价、仅售 这类营销推广的敏感词语,容易导致审批无法通过,因此请谨慎使用或改用 。
但是 URL 中可以包含变量,比如:
亲,您的宝贝已上路,快递信息可以通过以下链接查询:{{bill_number}}
通知类模板
【正确范例】
恭喜您获得关注广州体彩微信送“排列三”的活动彩票,您的号码是第{{phase}}期的:{{num}}。开奖时间为{{date}},请关注公众号—开奖信息查询中奖状态。
〖错误范例〗
您好,本条短信来自“XX旅游”~恭喜幸运的您,在本次“北海道机票”抽奖活动中,获得二等奖——定制星巴克杯! 请您关注我们的微信公众号(XX旅游:xx_app),回复“中奖名单”即可查看详细中奖名单及领取须知!后续还会有更多活动惊喜,期待您的参与~官方网站:xxsite.cn
错误点在于不可以在
模板中发送带有抽奖中奖信息等营销信息的内容。解决方案是在创建模板的时候选择 。
另外,有一些行业相关的敏感词语是不允许发送的,错误范例如下:
业主还在苦苦等待你的反馈,你认领的房源已超过1小时没有填写核实结果,请尽快登录XX客户端,在“业主--待处理”列表中进行填写。【XX网】
无论是通知类还是营销类短信,凡包含房源、借贷这类敏感词都被禁止发送。
营销类模板
【正确范例 · 销售类】
X牌新款春装已经上市,明星夫妻同款你值得拥有!详情请咨询当地X牌门市店,或者直接登录 www.xxxx.com 查询门市店,或者拨打 010-,凭短信可享 9 折优惠。
【正确范例 · 推广类】
还在找寻同桌的 TA 吗?还在烦恼过年回家联系不上老同学吗?iOS 用户在 App Store 搜索:找同学,下载最新版的找同学,让同学聚会重温往日时光!
注意:应用的下载链接必须是明文,不可设置为参数。
短信轰炸与图形验证码
短信在提供便利性和实用性的同时,也会受到攻击而被滥用,产生经济损失,甚至影响到品牌形象。「短信轰炸」就是最常见的一种攻击手段——恶意攻击者使用软件来自动收集一些不需要认证就能发送短信验证码的网站,利用这些网站的漏洞,攻击者能以程序化方式批量地向手机号重复发送短信,这样造成的后果就是:
对于网站来说,它会不断收到发送短信验证码的请求,运营者会承担更多的短信费用;
对手机号码的使用者来说,他会在短时间内频繁收到包含验证码的无关短信。
因此开发者需要重视对此类攻击的防范。目前,图形验证码(又称 captcha)是防范短信轰炸最有力的手段。比如,我们在一些网站注册的时候,经常需要填写以下图片的信息:
网站必须在用户进行「免费获取验证码」 操作前,要求用户先输入图形验证码来确认操作真实有效,服务器端再请求 LeanCloud 云端发送动态短信到用户手机上,这样才可以有效防范恶意攻击者。
图形验证码的基本工作流程如下:
用户在浏览器中打开产品的注册/登录页面,同时也会请求显示 LeanCloud 图形验证码。
用户按照要求填写各项信息,并点击发送短信验证码的按钮,进行图形验证码的验证。
LeanCloud 图形验证码成功之后,发送短信验证码到目标手机号。
用户提交表单,产品后台将用户表单的短信验证码相关数据发送到 LeanCloud 后台进行二次校验。
LeanCloud 后台返回校验通过/失败的结果,用户完成注册/登录流程。
开通图形验证码服务
要使用图形验证码,开发者需要进入 ,打开 图形验证码服务。
如果希望强制所有的短信接口都必须通过图形验证码验证才能发送,则进入 , 选中 强制短信验证服务使用图形验证码。注意:这样一来,所有主动调用发送短信的接口都会强制进行图形验证码验证,否则会直接返回调用错误。
前端接入示例
我们以 JavaScript + HTML 实现如下一个很小的功能页面,演示图形验证码接入的流程。
组件初始化
引入 LeanCloud 图形验证码相关的 JavaScript:
&script src=&//cdn1.lncld.net/static/js/2.3.2/av-min.js&&&/script&
初始化图形验证码组件:
AV.Captcha.request().then(function(captcha) {
captcha.bind({
textInput: 'captcha-code', // the id for textInput
image: 'captcha-image',
// the id for image element
verifyButton: 'verify',
// the id for verify button
success: function(validateCode) {
console.log('验证成功,下一步')
error: function(error) {
console.error(error.message)
配置参数说明
AV.Captcha.request() 在生成 AV.Captcha 实例的时候,可以指定如下参数:
图形验证码展示区域的宽度,单位:像素,有效值范围:60-200
图形验证码展示区域的高度,单位:像素,有效值范围:30-100
例如可以这样初始化一个展示高度为 30px、宽度为 80px 的 captcha 实例:
AV.Captcha.request({width: 80, height: 30})
captcha.bind() 方法可以将 captcha 实例与界面元素绑定起来,它支持如下参数:
string or HTMLInputElement
图形验证码的输入框控件,或者是该控件的 id
string or HTMLImageElement
图形验证码对应的图像控件,或者是图像控件的 id
verifyButton
string or HTMLElement
验证图形验证码的按钮控件,或者是该按钮的 id
以下为上述 demo 的完整代码:
&!DOCTYPE html&
&meta charset=&utf-8&&
&meta name=&viewport& content=&width=device-width&&
&title&JS Bin&/title&
&!-- 引入 LeanCloud 图形验证码相关的 JavaScript --&
&script src=&//cdn1.lncld.net/static/js/2.3.2/av-min.js&&&/script&
&span&手机号:&/span&
&input type=&text& id=&phone&/&
&span&校验码:&/span&
&input type=&text& id=&captcha-code&/&
&img id=&captcha-image&/&
&button id=&verify&&发送验证码&/button&
var appId = '{{appid}}';
// 你的应用 appid
var appKey = '{{appkey}}'; // 你的应用 appkey
AV.init({ appId: appId, appKey: appKey });
// AV.Captcha.request() 默认生成一个 85x30px 的 AV.Captcha 实例
AV.Captcha.request().then(function(captcha) {
//在浏览器中,可以直接使用 captcha.bind 方法将验证码与 DOM 元素绑定:
captcha.bind({
textInput:
'captcha-code',
// the id for textInput
'captcha-image', // the id for image element
verifyButton: 'verify',
// the id for verify button
success: function(validateCode) {
var phoneNumber = document.getElementById('phone').
console.log('验证成功,下一步 send sms to phone:' + phoneNumber)
AV.Cloud.requestSmsCode({
mobilePhoneNumber: phoneNumber,
name: '应用名称',
validate_token: validateCode,
op: '某种操作',
}).then(function(){
//发送成功
console.log('发送成功')
}, function(err){
//发送失败
console.log('发送失败。' + err.message)
error: function(error) {
console.error(error.message)
图形验证码 API
获取图形验证码
AVCaptchaRequestOptions *options = [[AVCaptchaRequestOptions alloc] init];
options.width = 100;
options.height = 50;
[AVCaptcha requestCaptchaWithOptions:options
callback:^(AVCaptchaDigest * _Nullable captchaDigest, NSError * _Nullable error) {
/* URL string of captcha image. */
NSString *url = captchaDigest.URLS
AVCaptchaOption option = new AVCaptchaOption();
option.setWidth(85);
option.setHeight(30);
AVCaptcha.requestCaptchaInBackground(option, new AVCallback&AVCaptchaDigest&() {
protected void internalDone0(AVCaptchaDigest captchaDigest, AVException exception) {
if (null == exception) {
// 请求成功,可以通过 captchaDigest.getUrl() 获取图片
AV.Captcha.request({
width:100, // 图片的宽度
height:50, // 图片的高度
}).then(function(captcha) {
console.log(captcha.url); // 图片的 url,客户端用来展现
AVCloud.RequestCaptchaAsync(width:85, height:30).ContinueWith(t =&{
var captchaData = t.R
var url = captchaData.U// 图片的 url,客户端用来展现
var captchaToken = captchaData.captchaT// 用来对应后面的验证接口,服务端用这个参数来匹配具体是哪一个图形验证码
// Java SDK 暂不支持图形验证码
校验图形验证码
获取图形验证码之后,将图形验证码的图像显示在客户端(iOS 和 Android 或者其他平台可以调用基础的图像控件展示该图片),等到用户输入完成之后,继续调用下一步的接口校验用户输入的是否合法。
[AVCaptcha verifyCaptchaCode:&#用户识别的符号#&
forCaptchaDigest:&#之前请求的 AVCaptchaDigest 对象#&
callback:^(NSString * _Nullable validationToken, NSError * _Nullable error) {
/* validationToken 可用短信认证 */
AVCaptcha.verifyCaptchaCodeInBackground(code, captchaDigest, new AVCallback&String&() {
protected void internalDone0(String validateToken, AVException exception) {
if (null == exception) {
// 请求成功,validateToken 所请求的到的返回值
// captcha 是上一步得到的验证码实例对象
captcha.verify('这里填写用户输入的图形验证码,例如 AM8N').then(function(validateToken) {});
AVCloud.VerifyCaptchaAsync(&这里填写用户输入的图形验证码,例如 AM8N&,'这里填写上一步返回的 captchaToken').CotinuteWith(t =&{
var validate_token =
// Java SDK 暂不支持图形验证码
使用 validate_token 发送短信
如果校验成功,拿到返回的 validate_token,继续调用发送短信的接口:
AVShortMessageRequestOptions *options = [[AVShortMessageRequestOptions alloc] init];
options.templateName = @&New_Series&;
options.signatureName = @&sign_BuyBuyBuy&;
options.validationToken = &#validationToken#&;
[AVSMS requestShortMessageForPhoneNumber:@&186xxxxxxxx&
options:options
callback:^(BOOL succeeded, NSError * _Nullable error) {
if (succeeded) {
/* 请求成功 */
/* 请求失败 */
AVSMSOption option = new AVSMSOption();
option.setTemplateName(&New_Series&);
option.setSignatureName(&sign_BuyBuyBuy&);
option.setValidationToken(&validateToken&);
AVSMS.requestSMSCodeInBackground(&186xxxxxxxx&, option, new RequestMobileCodeCallback() {
public void done(AVException e) {
if (null == e) {
/* 请求成功 */
/* 请求失败 */
// mobilePhoneNumber :手机号
// template :模板名称
// sign :签名
AV.Cloud.requestSmsCode({
mobilePhoneNumber: '186xxxxxxxx',
template: 'New_Series',
sign:'sign_BuyBuyBuy'
validateToken:'上一步返回的 validate_token'
}).then(function(){
//调用成功
}, function(err){
//调用失败
// 186xxxxxxxx :手机号
// New_Series :模板名称
// sign_BuyBuyBuy :签名
AVCloud.RequestSMSCodeAsync(&186xxxxxxxx&,&New_Series&,null,&sign_BuyBuyBuy&,&上一步返回的 validate_token&).ContinueWith(t =&
var result = t.R
// result 为 True 则表示调用成功
// Java SDK 暂不支持图形验证码
向国外用户发送短信,只需要在手机号码前加上正确的国际区号即可,如美国和加拿大为 +1,当然前提是已在
中选中了 开启国际短信服务。中国区号为 +86,但可以省略,无区号的手机号码会默认使用中国区号。
服务覆盖区域和价格
以下金额为每条短信的价格,以人民币计费。列表中未包含的国家或区域,请在论坛或工单中提问确认。
国家或地区
开通国际短信服务
国际短信服务是需要额外开启的,你需要在
进行选择。
&开启国际短信服务
开启:可以向中国大陆以外的手机号发送短信,详见 。
关闭:无法向中国大陆 +86 之外的手机号发送短信。
与 LeanCloud 账户系统集成
LeanCloud 提供了内建的
来帮助开发者快速完成用户系统的注册、登录、重置密码等功能,同时为了方便使用,我们也集成了账户系统手机号码相关的短信功能,譬如账户注册时自动验证手机号、手机号码登录和重置密码等等。
我们可以在
查看相关选项:
&用户注册时,向注册手机号码发送验证短信
开启:调用 AVUser 注册相关的接口时,如果传入了手机号,系统则会自动发送验证短信,然后开发者需要手动调用一下验证接口,这样 _User 表中的 mobilePhoneVerified 值才会被置为 true。
关闭:调用 AVUser 注册相关的接口不会发送短信。
&未验证手机号码的用户,禁止登录
开启:未验证手机号的 AVUser 不能使用「手机号 + 密码」以及「手机号 + 短信验证码」的方式登录,但是用户名搭配密码的登录方式不会失败。
关闭:不会对登录接口造成任何影响。
&未验证手机号码的用户,允许以短信重置密码
开启:允许尚未验证过手机号的 AVUser 通过短信验证码实现重置密码的功能。
关闭:AVUser 必须在使用短信重置密码之前,先行验证手机号,也就是 mobilePhoneVerified 字段必须是 true 的前提下,才能使用短信重置密码。
&已验证手机号码的用户,允许以短信验证码登录
开启:AVUser 可以使用手机号搭配短信验证码的方式登录。
关闭:AVUser 不能直接使用。
下面以「注册验证」为例,详细说明一下如何在注册过程中自动使用短信服务。
现在越来越多的应用支持使用手机号码来快速注册账户,并且同时会通过短信验证码来核实用户手机号码的有效性。下面我们来看看如何便捷地使用 LeanCloud 的「注册验证」功能。其使用步骤如下:
用户输入手机号以及密码引导用户正确的输入,建议在调用 SDK 接口之前,验证一下手机号的格式。
调用 AVUser 的注册接口,传入手机号以及密码。
AVUser *user = [AVUser user];
user.username = @&hjiang&;
user.password =
@&f32@ds*@&dsa&;
user.email = @&hang@leancloud.rocks&;
user.mobilePhoneNumber = @&&;
NSError *error =
[user signUp:&error];
AVUser user = new AVUser();
user.setUsername(&hjiang&);
user.setPassword(&f32@ds*@&dsa&);
user.setEmail(&hang@leancloud.rocks&);
// 其他属性可以像其他AVObject对象一样使用put方法添加
user.put(&mobilePhoneNumber&, &186-&);
user.signUpInBackground(new SignUpCallback() {
public void done(AVException e) {
if (e == null) {
// successfully
var user = new AV.User();
user.set(&username&, &hjiang&);
user.set(&password&, &123456&);
user.setMobilePhoneNumber('186xxxxxxxx');
user.signUp(null, ……)
var user = new AVUser();
user.Username = &hjiang&;
user.Password = &123456ZXCV&;
user.MobilePhoneNumber = &186xxxxxxxx&;
user.SignUpAsync().ContinueWith(t =&
// 注册成功之后云端会自动发送验证短信
// Java SDK 与 Android 代码相同
云端发送手机验证码,并且返回注册成功。但是此时用户的 mobilePhoneVerified 依然是 false,客户端需要引导用户去输入验证码。
用户再一次输入验证码最好本地先验证一下有效性(例如长度、特殊字符等)。
调用验证接口,检查用户输入的纯数字验证码是否合法。
[AVUser verifyMobilePhone:@&123456& withBlock:^(BOOL succeeded, NSError *error) {
//验证结果
AVUser.verifyMobilePhoneInBackground(&123456&, new AVMobilePhoneVerifyCallback() {
public void done(AVException e) {
if(e == null){
// 验证成功
Log.d(&SMS&, &Verified failed!&);
AV.User.verifyMobilePhone('6位数字验证码').then(function(){
//验证成功
}, function(err){
//验证失败
AVUser.VerifyMobilePhoneAsync(&6位数字验证码&, &186xxxxxxxx&).ContinueWith(t =&
if (t.Result)
// 验证成功
// Java SDK 与 Android 代码相同
以上是一个通用的带有手机号验证的注册过程。开发者可以根据需求增加或减少步骤,但是推荐开发者在使用该功能时,首先明确是否需要勾选「验证注册用户手机号码」。因为一旦勾选,只要调用了 AVUser 相关的注册账号,并传入手机号,云端就会自动发送短信验证码。
另外,假如注册的时候并没有强制用户验证手机号,而是在用户使用某一个功能的时候,要求用户验证手机号,也可以调用接口进行「延迟验证」,验证之后 mobilePhoneVerified 就会被置为 true。
请求发送验证码
[AVUser requestMobilePhoneVerify:@&& withBlock:^(BOOL succeeded, NSError *error) {
if(succeeded){
//调用成功
AVUser.requestMobilePhoneVerifyInBackground(&&, new RequestMobileCodeCallback() {
public void done(AVException e) {
if(e == null){
// 调用成功
Log.d(&SMS&, &Send failed!&);
AV.User.requestMobilePhoneVerify('186xxxxxxxx').then(function(){
//调用成功
}, function(err){
//调用失败
AVUser.RequestMobilePhoneVerifyAsync(&186xxxxxxxx&).ContinueWith(t =&
if(t.Result)
// 调用成功
// Java SDK 与 Android 代码相同
调用验证接口,验证用户输入的纯数字的验证码。
[AVUser verifyMobilePhone:@&123456& withBlock:^(BOOL succeeded, NSError *error) {
if(succeeded){
//验证成功
AVUser.verifyMobilePhoneInBackground(&654321&, new AVMobilePhoneVerifyCallback() {
public void done(AVException e) {
if (e == null) {
// 验证成功
Log.d(&SMS&, &Verified failed!&);
AV.User.verifyMobilePhone('6位数字验证码').then(function(){
//验证成功
}, function(err){
//验证失败
AVUser.VerifyMobilePhoneAsync(&6位数字验证码&).ContinueWith(t =&
if (t.Result)
// 验证成功
// Java SDK 与 Android 代码相同
未收到注册验证短信
一般来说,用户收到的注册验证短信内容为:
【Signature】欢迎使用“应用名称”服务,您的验证码是 123456,请输入完成验证。
其中【Signature】为短信签名,必须遵循
中的长度及其他要求,否则会被短信供应商拒绝发送。
详情请参照 。
如果一个短信模板字数超过 70 个字(包括签名的字数),那么该短信在发送时会被运营商按多条来收取费用,但接收者收到的仍是一条完整的短信。
小于或等于 70 个字,按一条计费。
大于 70 个字,按每 67 字一条计费。
只有「调用失败」不收费,「投递失败」也要收费。每条短信的收费标准请参考 。
短信发送采取实时扣费。如果当前账户没有足够的余额,短信将无法发送。充值请进入 ,点击 余额充值。
同时我们建议设定好 ,以便在第一时间收到短信或邮件获知余额不足。

我要回帖

更多关于 短信验证码 的文章

 

随机推荐