IOS博客项目搭建

授权流程图:

原有的代码有许多重复的地方,这里可以对原有的代码进行重构,对账号的有关操作可以抽出一个工具类:

1// 2//  IWAccountTool.h 3//  ItcastWeibo 4// 5//  Created by kaiyi on 16-4-6. 6//  Copyright (c) 2016年 itcast. All rights reserved. 7// 8// 账号管理工具类 9 10#import <Foundation/Foundation.h> 11@class IWAccount; 12@interface IWAccountTool : NSObject 13 14// 存储账号信息 15+(void)saveAccount:(IWAccount *)account; 16 17/** 18 *  返回存储的账号 19 */ 20+(IWAccount *)account; 21@end 22 23// 24//  IWAccountTool.m 25//  ItcastWeibo 26// 27//  Created by kaiyi on 16-4-6. 28//  Copyright (c) 2016年 itcast. All rights reserved. 29// 30#import "IWAccount.h" 31#import "IWAccountTool.h" 32#define IWAccountFile [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"account.data"] 33 34@implementation IWAccountTool 35+(void)saveAccount:(IWAccount *)account{ 36    // 先判断有无存储账号信息 37   // NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 38    // NSString *file = [doc stringByAppendingPathComponent:@"account.data"]; 39     40    // 初始化保存时间 41    // account.expiresTime = [NSDate date]; 42     43    // 获取当前时间 44    NSDate *now = [NSDate date]; 45    account.expiresTime = [now dateByAddingTimeInterval:account.expires_in]; 46    [NSKeyedArchiver archiveRootObject:account toFile:IWAccountFile]; 47} 48 49/** 50 *  返回存储的账号 51 */ 52+(IWAccount *)account{ 53     54    // 先判断有无存储账号信息 55    IWAccount *account = [NSKeyedUnarchiver unarchiveObjectWithFile:IWAccountFile]; 56     57    // 判断账号是否过期 58    NSDate *now = [NSDate date]; 59     60    // NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending 61    if([now compare:account.expiresTime] == NSOrderedAscending){ 62        return account; 63    }else{  // 过期 64        return nil; 65    } 66} 67 68@end

在IWOAuthViewController.m控制器中,可以调用accountTool.h工具类,这样代码会更简洁:

1/** 2 *  通过code换取一个accessToken 3 redirect_uri true string 回调地址,需需与注册应用里的回调地址一致。 4 */ 5-(void)accessTokenWithCode:(NSString *)code 6{ 7    // 发送POST请求给新浪,通过code换取一个accessToken 8    // 发送请求一般用别人封装好的请求框架,如ASI,AFN(项目中使用这个) 9    // ASI:HTTP终结者,已经被淘汰 10    // AFN(AFNetworking)\AFN 11     // 1.创建请求管理对象 12    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; 13     14    // 说明服务器返回的为JSON 15     mgr.responseSerializer = [AFJSONResponseSerializer serializer]; 16     17    // 2.封装请求参数 18    NSMutableDictionary *params = [NSMutableDictionary dictionary]; 19    params[@"client_id"] = @"26999********"; 20     21    params[@"client_secret"] = @"737ea9bf13***********"; 22     23    params[@"grant_type"] = @"authorization_code"; 24     25    params[@"code"] = code; 26     27    params[@"redirect_uri"] = @"http://digtime.cn"; 28     29     30    // 3.发送请求,参数用字典封装,请求成功后服务器端响应一个对象responseObject 31    [mgr POST:@"https://api.weibo.com/oauth2/access_token" parameters: params 32      success:^(AFHTTPRequestOperation *operation, id responseObject) { 33          // IWLog(@"请求成功:%@", [responseObject class]);从字典中取出数据 34           35          // 4.先将字典转为模型(创建model,IWAccount.h 取数据放数据非常方便) 36          IWAccount *account = [IWAccount accountWithDict:responseObject]; 37           38           39          // 通过返回的数据,判断授权是否过期,如果过期,则重新授权,打开登陆页面 40          // 5.存储模型数据---存储accessToken信息 ---归档 41          // 5.1获取沙盒路径 42          NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 43          // 5.2 拼接文件路径 44          NSString *file = [doc stringByAppendingPathComponent:@"account.data"]; 45          [NSKeyedArchiver archiveRootObject:account toFile:file]; 46           47          // 5.3 Account.h 需要遵守 NSCoding协议,哪些属性需要归档,哪些需要解档 48          // 5.4 然后需要在IWAppDelegate.m中当应用加载完后,需要判断用户以前是否有登陆成功过,沙盒里边有数据,然后判断沙盒数据授权信息是否有过期,如果没有过期则直接进入微博 49           50          // 5.存储模型数据 51          [IWAccountTool saveAccount:account]; 52           53          // 6.新特性\去首页 54          [IWWeiboTool chooseRootController]; 55         56    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 57        IWLog(@"请求失败:%@", error); 58 59    }]; 60     61}

多抽工具类的好处:

①、业务逻辑分明(把这一段业务逻辑放到最应该处理的类中做)

②、屏蔽业务细节(别人不需要关心业务逻辑怎么实现,如果代码改了,只需修改业务逻辑内部的东东)

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

tomcat、netty以及nodejs的helloworld性能对比

最近闲来无事,对tomcat、netty以及nodejs的性能对比比较有兴趣,于是自行测试了一下。测试环境:!(http://static.oschina.net/uploads/space/2013/0405/160739_fycm_1021320.png)测试工具:ApacheJMeter2.9测试代码:1.tomcat下的js

swing开发测试工具

要项目测试需要,使用swing编写个工具,给需要的人,留下代码:)界面如下:!(http://static.oschina.net/uploads/space/2016/1102/224313_1MMG_559291.png)用java写界面,真费事,使用delphi,分分钟的事情。特点:1、给JTextArea增加行数显示2、给

15道非常经典的Java面试题

试题如下:!(http://static.oschina.net/uploads/space/2016/0729/022902_IBMr_121944.jpg)!(http://static.oschina.net/uploads/space/2016/0729/022923_Exeo_121944.jpg)!(http://static.o

AngularJS 学习笔记 (六) 基本概念和用法 之 Service与Provider

1、使用$http服务!(http://static.oschina.net/uploads/space/2016/0623/092916_7mPM_199513.gif)HTML代码:!(http://static.oschina.net/uploads/space/2016/0623/093044_Y

POI

!(http://static.oschina.net/uploads/space/2016/0120/131416_Dswb_1444646.png)!(http://static.oschina.net/uploads/space/2016/0120/131416_cIpL_1444646.jpg)ApachePOI是Apache(