由于 AFNetworking 3.0抛弃了
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager
这三种类, 由于很长时间没用AFNetworking做登录注册险些掉坑, 网上也净是用这三种老的类型做登录注册的方法, 所以更新一下笔记, 希望后来者看到这篇文章.
PS: 此文不谈TextField Label的铺设 直接上有关AFNetworking的新类和基本逻辑干货.
一. 注册
首先老规矩 先导入AFNetworking的头文件
#import
// 如果你是手动导入的AFNetworking则是
// #import "AFNetworking.h"
现在一般都是手机号做用户名注册, 所以只用手机号注册的情况
首先判断你的手机号格式是否正确
- (BOOL)judgeMobileNumber:(NSString *)mobileNum{
// 正则表达式
NSString *mobileStr = @"^1(3[0-9]|4[57]|5[0-35-9]|7[01678]|8[0-9])\\d{8}$";
NSPredicate *judgeMobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
return [judgeMobile evaluateWithObject:mobileNum];
}
然后判断密码长度是否合适
- (BOOL)judgePassword:(NSString *)password{
if ([password length] > 4 && [password length] < 12) {
return YES;
} else{
return NO;
}
}
准备工作都做好之后下面干货
AFHTTPSessionManager 这个类是3.0用的新类
这个是注册按钮的点击方法
- (void)clickRegisterBtn{
NSString *domainStr = @"你的接口";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];
//往字典里面添加需要提交的参数
[parametersDic setObject:@"你的账号" forKey:@"username"];
[parametersDic setObject:@"你的密码" forKey:@"password"];
if ([self judgeMobileNumber:[parametersDic objectForKey:@"username"]] == YES && [self judgePassword:[parametersDic objectForKey:@"password"]]) {
// 涉及到用户私密信息用POST请求
[manager POST:domainStr parameters:parametersDic progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功");
// 成功则返回登录界面
[self.navigationController popViewControllerAnimated:YES];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失败");
}];
} else {
// 账号密码的格式错误则弹出提示框
// 初始化提示框;
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"" message:@"账号或密码格式错误" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// 点击按钮的响应事件;
}]];
//弹出提示框;
[self presentViewController:alert animated:true completion:nil];
}
}
这样你的注册功能就基本逻辑就OK了
二. 登录
首先依然要先导入头文件
#import
点击登录按钮触发
- (void)clickLoginBtn{
NSString *domainStr = @"后台给你的接口";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];
//往字典里面添加需要提交的参数
[parametersDic setObject:@"账号" forKey:@"username"];
[parametersDic setObject:@"密码" forKey:@"password"];
// 涉及到用户隐私, 依然要用POST
[manager POST:domainStr parameters:parametersDic progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功");
// AFNetworking 自带JSON解析 后台返回字典, 用字典接收
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
[self presentViewController:[self tabBarControllerRoot] animated:YES completion:^{
// 跳转到首页
}];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失败");
}];
}
网上有的一些用NSData接收然后转成JSON这种做法会报错, 现在AFNetworking自带JSON解析, 所以直接用返回值对应类型的值去接受就可以了.