iOS开发笔记-基于AFNetworking 3.0的登录 注册

由于 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解析, 所以直接用返回值对应类型的值去接受就可以了.


重点一 : AFHTTPSessionManager, 是3.0之后用的新类, 取代了AFHTTPRequestOperationManager
重点二 : 这只是基础逻辑, 一些其他需要判断的东西根据实际情况来看
重点三 : responseObject 是返回的数据, 别对着task干使劲
重点四 : 返回值自带JSON解析, 不要用什么NSData去接收了

你可能感兴趣的:(iOS开发笔记-基于AFNetworking 3.0的登录 注册)