GiGaMaskTime/GIGA/Modules/LogIn/Controller/GiGaUserLoginVC.m

418 lines
15 KiB
Objective-C

//
// GiGaUserLoginVC.m
// GIGA
//
// Created by lianxiang on 2018/8/20.
// Copyright © 2018年 com.giga.ios. All rights reserved.
//
#import "GiGaUserLoginVC.h"
#import "UINavigationBar+Custom.h"
#import "PassWordResetVC.h"
#import "GiGaRegistViewController.h"
#import "GiGaUserDefault.h"
#import "WXApi.h"
#import "GiGaNetManager.h"
#import "WeiIXinApiManager.h"
#import "GiGaBaseAPiRequest.h"
#import "GiGaUser.h"
#import "GiGaServerConfig.h"
#import "GIGAMBHUDHelper.h"
#import "GiGaHelper.h"
#import "GiGaUserManager.h"
#import "NSTimer+Convenience.h"
@interface GiGaUserLoginVC ()
@property (weak, nonatomic) IBOutlet UIImageView *userImagView;
@property (weak, nonatomic) IBOutlet UITextField *acountTextField;
//0.9+ 改成code
@property (weak, nonatomic) IBOutlet UITextField *passwordTextField;
@property (weak, nonatomic) IBOutlet UIButton *loginBtn;
@property (weak, nonatomic) IBOutlet UIButton *weiXinLoginBtn;
@property (weak, nonatomic) IBOutlet UIButton *registBtn;
@property (weak, nonatomic) IBOutlet UIButton *secretBtn;
@property(nonatomic,strong) NSTimer*timer;
@property(nonatomic) NSInteger time;
@end
@implementation GiGaUserLoginVC
- (void)viewDidLoad {
[super viewDidLoad];
_time = 60;
if (@available(iOS 11.0, *)) {
self.backScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
// Fallback on earlier versions
}
// Do any additional setup after loading the view from its nib.
[self setUpX];
[self textFieldUI];
[self.view bringSubviewToFront:self.weiXinLoginBtn];
[self.registBtn addTarget:self action:@selector(registBtnAction) forControlEvents:UIControlEventTouchUpInside];
[self.loginBtn addTarget:self action:@selector(loginBtnAction:) forControlEvents:UIControlEventTouchUpInside];
[self.weiXinLoginBtn addTarget:self
action:@selector(weiXinLoginAction) forControlEvents:UIControlEventTouchUpInside];
[self.secretBtn addTarget:self action:@selector(secretBtnAction:) forControlEvents:UIControlEventTouchUpInside];
NC_ADD_TARGET_NAME_OBJECT(self, @selector(WeiXinLongIn:), kWeiXinAuthrization_Success, nil)
NC_ADD_TARGET_NAME_OBJECT(self, @selector(userRegistSuccsessNoti:), kUserRegistSucccess, nil)
if (![WXApi isWXAppInstalled]) {
self.weiXinLoginBtn.hidden = YES;
}
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController.navigationBar setClearNav];
}
-(void)dealloc{
NC_REMOVE_NAME(self, kWeiXinAuthrization_Success,nil);
}
-(void)setUpX{
UIButton *rightBtn = [UIButton buttonWithType:UIButtonTypeCustom];
rightBtn.frame = CGRectMake(0, 0, 40, 40);
[rightBtn setImage:[UIImage imageNamed:@"btn_back"] forState:UIControlStateNormal];
[rightBtn addTarget:self action:@selector(rightBtnAction) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightBtn];
}
-(void)textFieldUI{
UIView *acountView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
UIImageView *acountViewIcon = [[UIImageView alloc] initWithFrame:CGRectMake(15,9, 12, 22)];
acountViewIcon.image = [UIImage imageNamed:@"ic_number"];
[acountView addSubview:acountViewIcon];
self.acountTextField.leftView = acountView;
self.acountTextField.leftViewMode = UITextFieldViewModeAlways;
// NSAttributedString *passholderText = [[NSAttributedString alloc] initWithString:@"密码" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14],NSForegroundColorAttributeName:[UIColor redColor]}];
// self.passwordTextField.attributedPlaceholder = passholderText;
UIView *passView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
UIImageView *passViewIcon = [[UIImageView alloc] initWithFrame:CGRectMake(12,13.5, 18, 13)];
passViewIcon.image = [UIImage imageNamed:@"ic_note"];
[passView addSubview:passViewIcon];
self.passwordTextField.leftView = passView;
self.passwordTextField.leftViewMode = UITextFieldViewModeAlways;
self.loginBtn.layer.masksToBounds = YES;
self.loginBtn.layer.cornerRadius = self.loginBtn.frame.size.height / 2;
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] init];
NSTextAttachment *attch = [[NSTextAttachment alloc] init];
attch.image = [UIImage imageNamed:@"ic_wechat"];
attch.bounds = CGRectMake(0,-4, 12.9, 12.5);
NSAttributedString *imastr=[NSAttributedString attributedStringWithAttachment:attch];
[attri appendAttributedString:imastr];
NSAttributedString *titleStr = [[NSAttributedString alloc] initWithString:@" 微信账号登录" attributes:@{NSFontAttributeName:[UIFont fontWithName:@"PingFangSC-Semibold" size:10],NSForegroundColorAttributeName:[UIColor colorWithRed:187/255.0 green:187/255.0 blue:187/255.0 alpha:1/1.0]}];
[attri appendAttributedString:titleStr];
[self.weiXinLoginBtn setAttributedTitle:attri forState:UIControlStateNormal];
}
-(void)rightBtnAction{
[self dismissViewControllerAnimated:YES completion:nil];
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (IBAction)forgetPassBtn:(id)sender {
PassWordResetVC *passVC= [[PassWordResetVC alloc] init];
[self.navigationController pushViewController:passVC animated:YES];
[self.navigationController.navigationBar setBackgroundImage];
}
#pragma mark - 去注册
-(void)registBtnAction{
GiGaRegistViewController *registVC = [[GiGaRegistViewController alloc] init];
[self.navigationController pushViewController:registVC animated:YES];
}
#pragma mark 手机号登录 验证码登录
-(void)loginBtnAction:(UIButton *)btn{
if (self.acountTextField.text.length == 0) {
GIGA_ShowToast(@"请输入手机号");
return;
}
if (![GiGaHelper isPhoneNumber:self.acountTextField.text]) {
GIGA_ShowToast(@"请输入正确手机号");
return;
}
if (self.passwordTextField.text.length == 0) {
GIGA_ShowToast(@"密码不能为空");
return;
}
if (self.passwordTextField.text.length == 0) {
GIGA_ShowToast(@"请输入验证码");
return;
}
[self loginWithAction:btn];
}
-(void)loginWithAction:(UIButton *)btn{
// NSDictionary *weixinInfoDic = [GiGaUserDefault getWeiXinAccessToenDic];
NSString *wechatCode = [GiGaUserDefault getWeiXinCode];
if (wechatCode==nil) {
wechatCode = @"";
}
NSDictionary *params = nil;
params = @{
@"mobile":self.acountTextField.text,
@"code":self.passwordTextField.text,
@"wechatCode":wechatCode,
};
//[GIGAMBHUDHelper messageAddto:self.view title:@"登录中..."];
[self.view makeToastActivity:CSToastPositionCenter];
//NSString *baseapi = [GiGaServerConfig getMainUrl];
//NSString *url = [NSString stringWithFormat:@"%@%@",baseapi,kApiUserloginWithSMSCode];
// [GiGaNetManager userbodyRequest:url params:params completionHandler:^(NSURLResponse *response, NSDictionary *resDic, NSError * _Nullable error) {
// GILog(@"%@",resDic);
// [self.view hideToastActivity];
// GiGaAPIResult *result = [[GiGaAPIResult alloc] initWithDictionary:resDic];
// GILog(@"**登陆***\n code:%ld\n message:%@\n *******\n",result.code,result.message);
// if (result.success) {
// [self userloginSussecess:resDic];
// }else{
// GIGA_ShowToast(result.message);
// }
// }];
//[GIGAMBHUDHelper messageAddto:self.view title:@"登录中..."];
[self.view makeToastActivity:CSToastPositionCenter];
GiGaBaseAPiRequest *api = [GiGaBaseAPiRequest initWithRequestPath:kApiUserloginWithSMSCode method:RequestPostMethod parms:params];
[api requstDataWithResult:^(GiGaAPIResult *result) {
[self.view hideToastActivity];
GILog(@"**登陆***\n code:%ld\n message:%@\n *******\n",result.code,result.message);
if (result.success) {
[self userloginSussecess:result.dic];
}else{
GIGA_ShowToast(result.message);
}
}];
}
-(void)saveUserData{
//埋点
[MobClick endEvent:MobClick_UserLogin];
[GiGaUserDefault saveUserId:@"123"];
}
#pragma mark - 微信登录
// 授权
-(void)weiXinLoginAction{
if ([WXApi isWXAppInstalled]) {
SendAuthReq * req = [[SendAuthReq alloc] init] ;
req.scope = @"snsapi_userinfo";
req.state = @"wx_oauth2_authorization_state";
[WXApi sendReq:req];
}
}
//授权成功获取access_token(改服务器获取)
-(void)WeiXinLongIn:(NSNotification *)notification{
//保存code 首次授权微信登陆需要先绑定手机号(必须注册手机账号)
[GiGaUserDefault saveWeiXinCode:notification.object[@"code"]];
[self.view makeToastActivity:CSToastPositionCenter];
NSDictionary *param = @{
@"code":notification.object[@"code"]
};
[self gigaUploadweixinInfo:param];
// NSDictionary *param = @{
// @"appid":WXin_APPID,
// @"secret":WXin_APPSecret,
// @"code":notification.object[@"code"],
// @"grant_type":@"authorization_code"
// };
//
// [WeiIXinApiManager weixinAccessTokeRequstUrl:@"https://api.weixin.qq.com/sns/oauth2/access_token" parameters:param success:^(id response) {
// NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingAllowFragments error:nil];
// GILog(@"access_token back -->%@",dict);
// [GiGaUserDefault saveWeiXinaccesstokenInfoWithDic:dict];
// [self requstWeiXinUserinfo];
//
// } failure:^(NSError *err) {
// [self.view makeToast:err.localizedDescription];
// GILog(@"access_token err-->%@",err.localizedDescription);
// }];
}
//获取微信用户信息 (改由服务器请求获取)
-(void)requstWeiXinUserinfo{
NSDictionary *tokenDic = [GiGaUserDefault getWeiXinAccessToenDic];
NSDictionary *param = @{
@"openid":tokenDic[@"openid"],
@"access_token":tokenDic[@"access_token"],
};
[WeiIXinApiManager getWeiXinUserInfoUrl:@"https://api.weixin.qq.com/sns/userinfo" parameters:param success:^(id response) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingAllowFragments error:nil];
GILog(@"weixinUser info back -->%@",dict);
// [self gigaUploadweixinInfo:dict];
} failure:^(NSError *err) {
[self.view makeToast:err.localizedDescription];
GILog(@"weixin_userinfoApi err-->%@",err.localizedDescription);
}];
}
// 微信登陆
-(void)gigaUploadweixinInfo:(NSDictionary *)weiXinUserinfo{
[self.view makeToastActivity:CSToastPositionCenter];
NSString *url = [NSString stringWithFormat:@"%@%@",[GiGaServerConfig getMainUrl],kApiWeiChatLogin];
[GiGaNetManager requestMethod:RequestPostMethod Url:url params:weiXinUserinfo responseBlock:^(NSDictionary *responseDict, NSDictionary *responseHeaderFields, NSError *error) {
[self.view hideToastActivity];
if (!error) {
if ([responseDict[@"code"] integerValue] == 0) {
[self userloginSussecess:responseDict];
}else{
[self.view makeToast:responseDict[@"msg"] duration:2.0 position:CSToastPositionCenter];
}
}else{
[self.view makeToast:@"用户信息提交异常"];
GILog(@"上传微信用户信息error:\n%@",error.localizedDescription);
}
}];
}
//请求用户数据
-(void)userloginSussecess:(NSDictionary *)resDic{
//token 登陆标志
[GiGaUserDefault saveToken:resDic[@"token"]];
weakify(self);
[[GiGaUserManager shareUser] synsisUserInfo:^(GiGaUser *user) {
GILog(@"user.userId:%@",user.userId);
//埋点
[MobClick endEvent:MobClick_UserLogin];
GIGA_WIndowTost(@"登录成功!");
NC_POST_NAME_OBJECT(kUserLoginSuccessNoti, nil);
[weakSelf dismissViewControllerAnimated:YES completion:nil];
} userErrorMsgBlock:^(NSDictionary *errorCodemsg) {
if (errorCodemsg) {
NSString *msg = errorCodemsg[@"msg"];
if (msg) {
GIGA_ShowToast(msg);
}
}
}];
}
//接收注册成功通知
-(void)userRegistSuccsessNoti:(NSNotification *)noti{
self.acountTextField.text =(NSString *)noti.object;
}
//短信验证码按钮
-(void)secretBtnAction:(UIButton *)btn{
if (![GiGaHelper isPhoneNumber:self.acountTextField.text]) {
GIGA_ShowToast(@"请输入正确手机号");
return;
}
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
NSString *phoneNumber = self.acountTextField.text;
NSDictionary *param = @{
@"mobile":phoneNumber
};
GiGaBaseAPiRequest *api = [GiGaBaseAPiRequest initWithRequestPath:kApiIUserLoginSendCode method:RequestPostMethod parms:param];
[api requstDataWithResult:^(GiGaAPIResult *result) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
GILog(@"短信获取%@",result.message);
if (result.success) {
[self startTimer:btn];
}else{
GIGA_ShowToast(result.message);
}
}];
}
//短信登录 验证码倒计时
-(void)startTimer:(UIButton *)btn{
btn.userInteractionEnabled = NO;
if (_time>0) {
_timer = [NSTimer scheduledTimerWithTimeInterval:1 count:60 callback:^{
NSString *timeStr=[NSString stringWithFormat:@"%lds",(long)self->_time];
[btn setTitle:timeStr forState:UIControlStateNormal];
self->_time--;
if (self->_time==0) {
[self.secretBtn setTitle:@"发送短信" forState:UIControlStateNormal];
self->_time =60;
btn.userInteractionEnabled = YES;
}
}];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
}
@end