if (![QQApi isQQInstalled]) { self.QQLoginButton.hidden = YES; self.QQLoginLabel.hidden = YES; }

最后

如上便是应用软件完结挂号登陆以及前期自动登入的业务逻辑,具体的落实细节请访谈小编的GitHub项目代码查看:https://github.com/aapple/sm-coal-app

- saveUserInfoWithData:(NSDictionary *)dict { NSString *userID = dict[kUserId]; NSString *email = dict[kEmail]; NSString *mobile = dict[kMobile]; [HooNSUserDefaultSerialzer setObject:memberID forKey:kUserID]; [HooNSUserDefaultSerialzer setObject:email forKey:kEmail]; [HooNSUserDefaultSerialzer setObject:mobile forKey:kMobile];}

思路

1、客商点击登陆开关之后以模态页面包车型客车花样张开登入页面,为何要用模态页面吗?为了保险系统路由不乱,登入完之后仍可以回到客户登陆操作从前的页面;

展开登陆页面包车型地铁代码如下:

let modal = this.modalCtrl.create(AuthenticatePage)
永利皇宫 ,modal.present();

2、无论是注册过或许未有登记过的顾客,在报到页面只供给输入手机号,然后拿走验证码开关亮起,顾客点击获取验证码按键。获取验证码按键变灰以往最初倒数60秒。

3、后台接受到收获验证码的伸手以往判定该手提式有线电话机号是还是不是是第贰回登陆,要是是则自动注册,如不是则直接随机生成一个验证码之后调用短信接口向客户手机号发送短信;

4、客商抽出到验证码之后输入登入页面包车型地铁验证码输入框,然后点击登入;

5、后端对客户的手提式有线电话机号和验证码进行校验,假设校验通过则为报到成功,在重返的cookie中写入顾客的地方鉴定识别消息,cookie保藏期设置为1个月,那样的话一个月内展开应用软件就足以活动登陆了。

6、前端页面抽取登入成功的归来今后自动跳转,提醒登入成功。

7、顾客后一次展开应用程式时应用软件会延迟5秒自动向后台发送登陆央浼,后台推断cookie是还是不是满含客户身份校验消息,如含有则自动登入而且重回客商音讯,如不包括则不开展自动登入。

- verifedCodeButtonWithTitle:(NSString *)title andNewTitle:(NSString *)newTitle { WS; __block int timeout = kTimeout; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue); dispatch_source_set_timer(_timer,dispatch_walltime,1.0*NSEC_PER_SEC, 0); dispatch_source_set_event_handler(_timer, ^{ if(timeout<=0){ dispatch_source_cancel; dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf setTitle:title forState:UIControlStateNormal]; weakSelf.userInteractionEnabled = YES; }); }else{ int seconds = timeout; NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds]; dispatch_async(dispatch_get_main_queue(), ^{ [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1]; [weakSelf setTitle:[NSString stringWithFormat:@"%@",newTitle,strTime] forState:UIControlStateNormal]; [UIView commitAnimations]; weakSelf.userInteractionEnabled = NO; }); timeout--; } }); dispatch_resume;}

前言

以前几日开始将重要对APP的局部基本业务模块达成思路开展首要介绍,后天首先来介绍的是挂号登陆模块。注册登陆模块为啥首要吗?前日咱们所使用的95%之上的APP都以索要报到的,因为独有组建了账户种类,应用程式本事够悠久的前进。

6.任何。
其实为了越来越好的客户体验,大家还有或然会提供任何职能,如当众呈现密码选拔开关、从服务器读取邮箱格式提醒、错误字符考订、当然还应该有最注重的动画片效果。
有一些困了,脑子不太好使,就写这么多哈。再困也不会忘记希望我们关注一下小编的众生账号:丁丁的coding日记,作者梦想结交一些可望一齐念书iOS开采的心上人,并伙同调换iOS开采心得,通过大家的代码创设一些好的制品,成立三个细小的社会风气。

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeKeyboard:)]; tap.numberOfTapsRequired = 1; tap.numberOfTouchesRequired = 1; [self.view addGestureRecognizer:tap];

- closeKeyboard:sender{ [self.view endEditing:YES];}

5.手提式有线电话机找回密码,发送验证码按键的拍卖。这些行为也易于被产品忽略需求大家开采者主动想到,然后跟产品鲜明这么些要求,然后分明开关的触发后的一颦一笑,不然客商恐怕数次点击发送验证码,那会变成服务器负担,何况也许回到给客商多条短信,产生麻烦。上边这段代码能够兑现单击验证码开关,然后倒计时2分钟后重操旧业开关的可点击状态。

5.客户登入音讯和景观持久化。大家一般会有业务层管理登入的数码的有头有尾,并且使用单例,不过不可能依据单例记录用状态,因为顾客也许会脱离,所以须求从沙盒去读取顾客情形的字段是还是不是留存,如客商的ID,或许AccessToken。
上面这段代码,用来漫长化客户音信

#pragma mark - 登录按钮点击- login:(UIButton *)sender { if([self.userNameTextField.text isEmpty] || [self.passwordTextField.text isEmpty]){ [SVProgressHUD showErrorWithStatus:@"用户名或密码不能为空"]; }else{ __weak typeof weakSelf = self; [[HooUserManager manager] LoginWithUserName:self.userNameTextField.text andPassword:self.passwordTextField.text block:^(BmobUser *user, NSError *error) { __strong __typeofstrongSelf = weakSelf; if  { [SVProgressHUD showErrorWithStatus:@"登录失败"]; }else if{ [SVProgressHUD showSuccessWithStatus:@"登录成功"]; [strongSelf loginSuccessDismiss]; } }]; }} 
NSString *emailStr; NSString *phoneStr; NSString *passwordStr = weakSelf.passwordView.inputTextField.text; emailStr = weakSelf.accountView.inputTextField.text; if (![NSString validateEmail:emailStr] || !emailStr.length) { [weakSelf showErrorTipViewWithMessage:@"邮箱格式错误"]; return; } } else { phoneStr = weakSelf.accountView.inputTextField.text; if (phoneStr.length < 5) { [weakSelf showErrorTipViewWithMessage:@"手机长度错误")]; return; } if ([weakSelf.accountView.countryCode isEqualToString:@"+86"]) { if (![phoneStr isValidateMobileNumber]) { [weakSelf showErrorTipViewWithMessage:@"手机号码格式错误")]; return; } } } if (passwordStr.length < kPasswordMinLength) { [weakSelf showErrorTipViewWithMessage:ATLocalizedString(@"密码长度超过少于6个字符")]; return; } if (passwordStr.length > kPasswordMaxLength) { [weakSelf showErrorTipViewWithMessage:@"密码长度超过20个字符")]; return; }

5.对外开拓客商信息的接口。封装大家的模块。对外提供大家的接口,平常别的页面须求看清顾客是或不是登陆,也恐怕须要客商的独一标示符来央浼数据。这一块假设大家做的零乱,则轻松导致别的页面获得客户新闻的随便性,举个例子给他俩开拓了读取沙盒里读取顾客新闻的字段。大家相应在签到模块统一别的页面得到这几个客户音信的一言一动。

网站地图xml地图