美文网首页iOS软件开发iOS分享的demoiOS学习
iOS开发笔记-基于AFNetworking 3.0的登录 注册

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

作者: _寒鸦 | 来源:发表于2016-09-23 14:47 被阅读881次

    由于 AFNetworking 3.0抛弃了

    AFURLConnectionOperation
    AFHTTPRequestOperation
    AFHTTPRequestOperationManager

    这三种类, 由于很长时间没用AFNetworking做登录注册险些掉坑, 网上也净是用这三种老的类型做登录注册的方法, 所以更新一下笔记, 希望后来者看到这篇文章.

    PS: 此文不谈TextField Label的铺设 直接上有关AFNetworking的新类和基本逻辑干货.

    一. 注册

    首先老规矩 先导入AFNetworking的头文件

    #import <AFNetworking.h>
    // 如果你是手动导入的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 <AFNetworking.h>
    

    点击登录按钮触发

    - (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去接收了

    相关文章

      网友评论

      • Roader:没有加密过程?
        _寒鸦:@Roader 这只是简单的逻辑,加密的话放进POST,进一步的话打成MD5的话也可以

      本文标题:iOS开发笔记-基于AFNetworking 3.0的登录 注册

      本文链接:https://www.haomeiwen.com/subject/ljetyttx.html