iOS BMOB-登录注册手机验证码、邮箱验证

在项目中很多时候需要登录注册功能,手机发送验证码,邮箱验证等功能,也有第三方登录的功能,第三方登录单独放在一章来说一下,这里先说一下其他的功能。
我们选用的第三方工具是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是一个很重要的东西,他可以和你的工程进行连接起来,要记好它。
  • 接下来要导入要使用到的系统框架
第一步.jpg
  • 然后我们来添加要使用的库,在官方文档里写的有我们需要引入哪些库
导入frameworks.png
  • Xcode更新之后dylib后缀的已经更新后缀为tbd的文件格式了,所以不要因为发愁找错文件,一定要导全才行,不然会有很多报红。

  • 最后一步,在你应用的APPdelegate里面导入#import <BmobSDK/Bmob.h>同时把你应用的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已经给你发送了一封邮件

忘记密码.png

点开就可以重设密码。

然后我们看一下BMOB是如何给手机发短信,进行验证码验证的。

  • 好,让我们再次打开官方文档,点击短信服务。

  • 首先,他告诉我们,如果你要使用短信服务的时候,请点击你的应用,然后在短信里面设置一个短信的格式

短信.png
  • 设置好模板,我们返回继续看文档

  • 里面有一个可以直接给用户发短信的方法,验证码格式就是你在云端写的一个模板,要传的参数,就是你具体要发送给哪个手机用户的字符串。好,我们就先试试能不能发短信。

      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,自己随便写的,不要嫌弃丑陋
这里是链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容