iOS 開發筆記 - 登入 註冊 (網上較少的 AFNetworking 3.0)

FrigidCrow發表於2017-03-24

最近沒更新iOS的了, 直接更新點實用的東西, 下次更新AFNetworking的封裝, 讓大家直接就用, 不至於那麼麻煩.


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

相關文章