根据电信运营商的规范,短信按照用途被分为三类:
【短信签名】您请求重设应用“应用名称”的密码,请输入验证码123456验证,验证码仅在10分钟内有效。
【购物网】您尾号为34323的订单号已经通过宅急送(快递单号12343432)安排递送,请您开箱验货确认无误后签收,物流查询拨打400-0000-xxx。
不同类型的短信遵循不同的内容规范,不符合规定的短信将无法发送。
【LeanCloud】感谢您注册LeanCloud,领先的BaaS提供商,为移动开发提供强有力的后端支持。
要使用短信服务,首先需要在控制台创建一个应用,然后进入控制台>设置>安全中心,确保短信服务开关是打开的:
然后进入控制台>短信>设置,请确保以下选项处于勾选状态:
启用通用的短信验证码服务(开放requestSmsCode和verifySmsCode接口)
文本短信验证码在到达率上有一定的风险。尽管根据我们长期得到的用户反馈,到达率已接近100%,但是有些应用对时效性的要求极高,并且需要更好的安全性,所以我们也推出了语音短信验证码的服务,调用的方式如下:
通知类短信非常普遍,例如联通用户从外地进入上海可能会收到如下短信:
这是一个来自通信运营商的通知类短信的规范案例。
营销类短信默认会在短信最后加上「回复TD退订」,这是运营商的强制要求。
警告自2016年6月起,营销类短信不允许由个人用户发送。所有营销类短信必须提供有效的公司或者企业名称,缺失名称将导致营销类短信无法发送。伪造或使用虚假名称将会被追究法律责任。
短信签名是指短信内容里用【】括起来的短信发送方名称,根据运营商的规定,短信内容的开头必须有签名。你需要在控制台>短信>签名与模版为每个应用创建合法的短信签名。如果一个应用拥有多个短信签名,请确保选择其一作为默认签名。
创建签名时需要输入内部名称和签名字符串,并上传相应的证明材料,如下图所示:
应运营商的审核要求,创建签名需要提交相应的证明材料,证明具体该签名的使用权。比如:
注意,未上架的应用,以应用名申请签名,以应用商店后台开发者管理截图作为资质文件,运营商审核人员不会通过。如果该应用有同名的小程序、公众号、网站,或者为应用名称注册了商标,可以提交相应的资质文件申请签名。否则,可以改用公司名或简称作为签名。
警告短信签名缺失、或没有默认签名、或未通过审核且无其他可用签名,都将导致短信无法发送。
开发者可以使用短信模板来自定义短信的内容。
要创建短信模板,先进入控制台,选择一个应用,再选择短信>签名与模版。选择需要的模板类型:
验证码类模板,要求如下:
通知类模板,要求如下:
营销类模板,要求如下:
警告自定义变量的值不允许包含实心括号【】。
在模板中还可以使用系统预留变量,在短信发送时,它们会被自动填充,开发者无法对其重新赋值:
欢迎注册{{{name}}}应用!请使用验证码{{{code}}}来完成注册。该验证码将在{{{ttl}}}分钟后失效,请尽快使用。
短信中的URL不允许全部设置为变量,这样是为了确保安全,防止病毒以及不良信息的传播。错误范例如下:
但是URL中可以包含变量,比如:
通知类模板
正确范例
错误示例
无论是通知类还是营销类短信,凡包含「房源」、「借贷」这类敏感词的短信都被禁止发送。
正确范例·销售类
正确范例·推广类
还在找寻同桌的TA吗?还在烦恼过年回家联系不上老同学吗?iOS用户在AppStore搜索:找同学,下载最新版的找同学,让同学聚会重温往日时光!
注意应用的下载链接必须是明文,不可设置为参数。
假设提交的短信模板的类型为「通知类」,内容如下:
尊敬的的用户,您的订单号:{{{order_id}}}正在派送,请保持手机畅通,我们的快递员随时可能与您联系,感谢您的订阅。
并且模板名称为Order_Notice,并且为已经拥有了一个审核通过的签名叫做「天天商城」,签名的名称叫做sign_BuyBuyBuy,当模板通过审批后就可以调用如下代码发送这条通知类的短信:
【天天商城】尊敬的用户,您的订单号:7623432424540正在派送,请保持手机畅通,我们的快递员随时可能与您联系,感谢您的订阅。
短信在提供便利性和实用性的同时,也会受到攻击而被滥用,产生经济损失,甚至影响到品牌形象。「短信轰炸」就是最常见的一种攻击手段——恶意攻击者使用软件来自动收集一些不需要认证就能发送短信验证码的网站,利用这些网站的漏洞,攻击者能以程序化方式批量地向手机号重复发送短信,这样造成的后果就是:
因此开发者需要重视对此类攻击的防范。目前,图形验证码(又称CAPTCHA)是防范短信轰炸最有力的手段。比如,我们在一些网站注册的时候,经常需要填写以下图片的信息:
网站必须在用户进行「免费获取验证码」操作前,要求用户先输入图形验证码来确认操作真实有效,服务器端再请求LeanCloud云端发送动态短信到用户手机上,这样才可以有效防范恶意攻击者。
图形验证码的基本工作流程如下:
要针对短信验证码启用图形验证码,开发者需要进入控制台>设置>安全中心,打开图形验证码服务。
如果希望强制所有的短信接口都必须通过图形验证码验证才能发送,则进入控制台>短信>设置,选中强制短信验证服务使用图形验证码。注意:这样一来,所有主动调用发送短信的接口都会强制进行图形验证码验证,否则会直接返回调用错误。
LeanCloud提供的图形验证码服务仅提供基本的防范,如有必要,可以自行接入功能更强大的第三方验证码服务。
我们以HTML+JavaScript实现一个很小的功能页面,演示图形验证码接入的流程。
初始化图形验证码组件:
例如可以这样初始化一个展示高度为30px、宽度为80px的captcha实例:
AV.Captcha.request({width:80,height:30});captcha.bind()方法可以将captcha实例与界面元素绑定起来,它支持如下参数:
以下为上述demo的完整代码:
请参阅官网的价格页面以了解LeanCloud支持的国家和地区。
注意,国际版应用主要面向国际用户,短信模板无需人工审核(在控制台创建后自动通过)。也因为没有经过审核,通过国际版应用向国内手机号(+86)发送的短信,会有很大几率被运营商拦截,到达率会很低。建议另外使用国内版的应用往国内手机号发送短信。
从客户端注册或更新手机号时,向注册手机号码发送验证短信
未验证手机号码的用户,允许以短信重置密码
一般来说,用户收到的注册验证短信内容为:
【Signature】欢迎使用「应用名称」服务,您的验证码是123456,请输入完成验证。
如果一个短信模板字数超过70个字(包括签名的字数),那么该短信在发送时会被运营商按多条来收取费用,但接收者收到的仍是一条完整的短信。
只有「调用失败」不收费,「投递失败」也要收费。每条短信的收费标准请参考官网价格方案。
短信发送采取实时扣费。如果当前账户没有足够的余额,短信将无法发送。充值请进入开发者账户>财务>概览,点击余额充值。