iOS客户端添加短信验证码功能

集成mob的免费短信服务

除了这家,暂时没发现其它的免费短信服务。
集成mob的短信服务非常简单,导入短信SDK后,添加以下几个依赖库文件

  • libz.dylib
  • libicucore.dylib
  • MessageUI.framework
  • JavaScriptCore.framework
  • libstdc++.dylib

在appdelegate中加入注册使用,appkey和appSecret在mob官网注册后即可获取

1
[SMSSDK registerApp:appKey withSecret:appSecret];

发送验证码

发送验证使用下面这个类方法,参数有获取验证码方式(短信或语音,这里选的是语音),手机号码,地区代码(这个SDK可以发送短信给全球不同地区的手机号码,中国大陆代码为86),如果获取不成功会有error返回,这个error中userInfo提示的信息挺完整的,直接显示给用户问题没问题

1
2
3
4
5
6
7
8
[SMSSDK getVerificationCodeByMethod:SMSGetCodeMethodSMS phoneNumber:_phoneNum zone:@"86" customIdentifier:nil result:^(NSError *error) {

if (!error) {
NSLog(@"获取验证码成功");
} else {
NSLog(@"错误信息:%@",error.userInfo[@"getVerificationCode"]);
}
}];

验证

用户收到验证码填入,点击验证按钮执行以下方法进行验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[SMSSDK commitVerificationCode:self.verifyCodeField.text phoneNumber:_phone zone:_areaCode result:^(SMSSDKUserInfo *userInfo, NSError *error) {

{
if (!error)
{

NSLog(@"验证成功");
}
else
{
NSLog(@"错误信息:%@",error);
}
}
}];

至此基本集成了短信验证码的功能,在登录注册找回密码等地方可以应用

让后台也能验证

很容易发现,按照上面的方法服务器后台是没办法验证用户的验证码的,如果有人抓包知道了服务器的接口,就能随便登录(如果是用验证码来登录)注册,以及修改任意用户的密码。除此之外,一些图片验证码的功能也没办法实现。

官方文档给出解决办法是,它们开放了验证接口,让用户获取到验证码后,可以让开发者自己的服务器对mob的服务器发送验证请求。由以下官方文档的两张图可以很清楚了解流程:

原流程
one

开发者服务器验证流畅
two

到github下demo回到看了下,发现其实官方同时开放了发送和验证验证码的接口,也就是说,发送和验证其实都可以由后台完成。

如果只是为了安全,而不是做图片验证码的话,其实还有另一个比较快捷的方法,反正客户端都是要发送两次请求(获取和验证),那不如直接让客服端和mob通信,在验证成功的时候提交验证码给自己的服务器,这样服务器也有了验证码,可以验证用户后续的操作。