在项目中很多时候需要登录注册功能,手机发送验证码,邮箱验证等功能,也有第三方登录的功能,第三方登录单独放在一章来说一下,这里先说一下其他的功能。
我们选用的第三方工具是BMOB,其实也有MOB,友盟等可以实现,具体看这里。今天我们使用bmob给我们提供的SDK来完成这个功能。
要使用第三方有两种办法
下载官方的SDK导入工程,然后导入我们要使用的frameworks框架
使用cocoa pods进行导入,如果有同学不会使用cocoapods 可以点击这里,cocoa pods是个很好用的工具。
还有很重要一点,使用第三方的时候记得一定要在你的info里面添加App Transport Security Settings这样一个键值,同时把它设置成字典,然后把里面的key换成Allow Arbitrary Loads,然后把他的bool值设置成YES,不然你是无法请求获取到网络数据的。有很多时候发现自己没写错,但是就是无法发送邮箱验证等,就是因为这个缘故
首先我们看一下官方文档如何导入SDK,如果有同学知道如何导入就可以跳过这一步。
- 首先注册一个bmob的账号,然后创建一个应用,名字可以起为你的项目名。
- 然后点击下载SDK,选择iOS,下载完成之后返回你的项目。把里面的BmobSDK.framework拖到你的工程里面的工具文件夹内。
- 接下来我们返回bmob看一下官方文档介绍是如何使用BMOB的SDK的。
- 我们选择iOS快速入门然后我们按照步骤来进行操作。
- 里面的Application ID是一个很重要的东西,他可以和你的工程进行连接起来,要记好它。
- 接下来要导入要使用到的系统框架
- 然后我们来添加要使用的库,在官方文档里写的有我们需要引入哪些库
Xcode更新之后dylib后缀的已经更新后缀为tbd的文件格式了,所以不要因为发愁找错文件,一定要导全才行,不然会有很多报红。
-
最后一步,在你应用的APPdelegate里面导入#import
同时把你应用的APPid拷贝进来 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; [self.window makeKeyAndVisible]; UINavigationController *nac = [[UINavigationController alloc]initWithRootViewController:[[RegisterViewController alloc]init]]; self.window.rootViewController = nac; [Bmob registerWithAppKey:@"你的APPid"]; return YES; }
http://docs.bmob.cn/ios/developdoc/index.html?menukey=develop_doc&key=develop_ios#index_(7%A1%06
好,我们导入完成之后就可以开始使用第三方工具了,再次点击
官方文档好吧,这个傲娇的链接后面有半个括号不让我用链接,体谅一下。然后找到用户管理。
里面有注册用户的方法,它使用的类名是BmobUser,可以点进去看一下,因为文档可能有的时候过时它使用了新的方法属性来代替了这个属性,我们这里直接拷贝
BmobUser *bUser = [[BmobUser alloc] init];
[bUser setUserName:@"小明"];
[bUser setPassword:@"123456"];
[bUser setObject:@18 forKey:@"age"];
[bUser signUpInBackgroundWithBlock:^ (BOOL isSuccessful, NSError *error){
if (isSuccessful){
NSLog(@"Sign up successfully");
} else {
NSLog(@"%@",error);
}
}];
我们运行就可以直接创建了一个小明的用户,密码是123456。当然不能固定的创建,然后我们创建3个TextField,一个是账号,一个是密码,一个是邮箱,来获取注册人的3个信息,要设置邮箱的时候记得进入你的应用里面,打开邮箱验证,才能实现。
好,我们把上面那些代码给删掉,没用的东西,然后进入你的注册页面
BmobUser *bUser = [[BmobUser alloc] init];
bUser.username = self.UserNumber.text;
bUser.email = self.Email.text;
[bUser setPassword:self.passworld.text];
[bUser signUpInBackgroundWithBlock:^ (BOOL isSuccessful, NSError *error){
if (isSuccessful){
NSLog(@"注册成功");
} else {
NSLog(@"注册失败可能有重复用户,错误信息:%@",error);
}
}];
通过这三个方法来设置用户的账号名,密码名,邮箱,我的三个TextField设置的都是属性,我们来做一个简单的判断,比如输入的值不能为空,然后如果注册成功,就写一个Alert提示框来提示一下用户注册成功,如果注册失败,就提示一下可能有重复用户等,如果想要账号的一些格式,都可以对对应的TextField的格式进行判断。注册成功,提示请到邮箱进行验证,然后返回登录。
然后是登录页面,登录页面其实只有一句方法,其他都是一些做的判断
[BmobUser loginWithUsernameInBackground:self.UserNumber.text password:self.passworld.text block:^(BmobUser *user, NSError *error) {
//登陆后返回的用户信息
NSLog(@"%@",user.email);
if (user!=nil) {
NSLog(@"登陆成功");
//跳转控制器
}else{
NSLog(@"没有该用户");
}
}
如果遗忘了密码,来进行找回密码操作,这里我们直接在设置一个找回密码的控制器。
在这里我们设置两个TextField,分别是用户名和邮箱名。来进行审核,如果审核通过,bmob会给他的邮箱发一封邮件,让它重置密码,如果审核不通过,就提示错误。
- (void)backPass
{
//获得到当前用户
BmobUser *bUser = [BmobUser getCurrentUser];
//确认账号名正确
bUser.username = self.UserNumber.text;
if (bUser) {
//进行操作
//bmob中重置密码的方法
[BmobUser requestPasswordResetInBackgroundWithEmail:self.email.text];
[BmobUser requestPasswordResetInBackgroundWithEmail:bUser.email];
UIAlertController *alertcontroller = [UIAlertController alertControllerWithTitle:@"提示" message:@"请进入邮箱验证" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *alert = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
[self presentViewController:alertcontroller animated:YES completion:^{
}];
[alertcontroller addAction:alert];
}else{
//对象为空时,可打开用户注册界面
UIAlertController *alertcontroller = [UIAlertController alertControllerWithTitle:@"提示" message:@"账号或邮箱不正确" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *alert = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
[self presentViewController:alertcontroller animated:YES completion:^{
}];
[alertcontroller addAction:alert];
}
}
然后可以看到bmob已经给你发送了一封邮件
点开就可以重设密码。
然后我们看一下BMOB是如何给手机发短信,进行验证码验证的。
好,让我们再次打开官方文档,点击短信服务。
首先,他告诉我们,如果你要使用短信服务的时候,请点击你的应用,然后在短信里面设置一个短信的格式
设置好模板,我们返回继续看文档
-
里面有一个可以直接给用户发短信的方法,验证码格式就是你在云端写的一个模板,要传的参数,就是你具体要发送给哪个手机用户的字符串。好,我们就先试试能不能发短信。
UITextField *field = [[UITextField alloc]initWithFrame:CGRectMake(100, 200, 200, 45)]; field.tag = 100; field.placeholder = @"请输入手机号"; field.borderStyle = UITextBorderStyleRoundedRect; field.clearButtonMode = YES; [self.view addSubview:field]; UITextField *smsField = [[UITextField alloc]initWithFrame:CGRectMake(100, 350, 200, 45)]; smsField.placeholder = @"请输入验证码"; smsField.tag = 101; smsField.borderStyle =UITextBorderStyleRoundedRect; smsField.clearButtonMode = YES; smsField.hidden = YES; smsField.alpha = 0; [self.view addSubview:smsField];
在这里我们最好把这个发送方法放在一个按钮的触发方法里,不然他没办法在输入完成之后获得这个电话号码
我送你们个按钮吧。。
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor = [UIColor colorWithRed:0.522 green:1.000 blue:0.846 alpha:1.000];
button.highlighted = YES;
[button setTitle:@"发送验证码" forState:UIControlStateNormal];
button.frame = CGRectMake(100, 280, 100, 45);
[self.view addSubview:button];
[button addTarget:self action:@selector(request:) forControlEvents:UIControlEventTouchUpInside];
好,我们把发送短信的方法放进去。
- (void)request:(UIButton *)sender
{
UITextField *field = [self.view viewWithTag:100];
UITextField *smsField = [self.view viewWithTag:101];
//请求验证码
[BmobSMS requestSMSCodeInBackgroundWithPhoneNumber:field.text andTemplate:@"你在BMOB里面设置的短信模板的名字" resultBlock:^(int number, NSError *error) {
if (error) {
NSLog(@"%@",error);
} else {
//获得smsID
UIButton *button = [self.view viewWithTag:103];
[UIView animateWithDuration:1 animations:^{
button.hidden = NO;
smsField.hidden = NO;
button.alpha = 1;
smsField.alpha = 1;
} completion:^(BOOL finished) {
}];
}
}];
}
输完手机号之后点击确认就可以给手机发送一条固定的短信,内容都是定义好的(不要发着玩,只有100条,后面要收费的)。
如果输入手机有误,就提示手机号不存在。
那接下来我们看手机验证码,bmob系统会在后台把你在输入框里填写的验证码和后台发送的验证码进行比较,来判断,所以设置一个验证码的输入框,在这里来进行比较。
UIButton *enable = [UIButton buttonWithType:UIButtonTypeCustom];
enable.backgroundColor = [UIColor colorWithRed:0.522 green:1.000 blue:0.846 alpha:1.000];
enable.highlighted = YES;
enable.hidden = YES;
enable.alpha = 0;
[enable setTitle:@"确认" forState:UIControlStateNormal];
enable.frame = CGRectMake(100, 430, 100, 45);
[self.view addSubview:enable];
[enable addTarget:self action:@selector(enable:) forControlEvents:UIControlEventTouchUpInside];
- (void)enable:(UIButton *)sender
{
UITextField *field = [self.view viewWithTag:100];
UITextField *smsField = [self.view viewWithTag:101];
//验证
[BmobSMS verifySMSCodeInBackgroundWithPhoneNumber:field.text andSMSCode:smsField.text resultBlock:^(BOOL isSuccessful, NSError *error) {
if (isSuccessful) {
NSLog(@"成功");
LoginViewController *nac = [[LoginViewController alloc]init];
[self.navigationController pushViewController:nac animated:YES];
} else {
NSLog(@"%@",error);
}
}];
}
这样我们就能做个简单的验证码判断了,如果要使用到验证身份,比如我长时间没有登录淘宝了,或者我在异地登录的时候,可以设置给用户设置的绑定的手机号发送一个验证码来进行验证登录,判断身份,或者验证码申请注册账号里面都可以来做一些判断。
然后给大家附上demo,自己随便写的,不要嫌弃丑陋
这里是链接