码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发 - 第05篇 - 项目 - 04 - OAuth授权 & 首页

时间:2016-08-10 14:27:31      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

1、存储帐号信息


1.1 基本实现


由于一旦授权成功,新浪返回的accessToken是同一个值(针对同一个第三方应用,同一个账号),为避免每次都重新登录,应该讲accessToken存储起来。

实现:先检测沙盒里面是否存在accessToken,若无,则意味从来没有登陆过,加载登录界面,一旦成功登录,就将获得的accessToken存进沙盒,下次进来就不需要再进行登录,直接从沙盒中取出accessToken,进入首页,获取用户数据。

1>在发送请求,成功获取accessToken方法后,将返回的JSON(AFN自动解析成字典),字典保存到沙盒中


技术分享


2>在程序运行的时候,根据是否存在上述保存的帐号信息,判断是否需要登录界面


技术分享


3> 在手机开发中,授权成功后的回调地址一般是不需要的,需要拦截网络请求,在UIWebView代理方法中拦截,即在获取利用code获取accessToken方法之后,禁止加载回调地址


技术分享


4>授权成功后,切换窗口根控制器为WBTabBarViewController或者新特性控制器(第一次登陆)


技术分享


1.2 存在问题


1> 上述代码很多和appDelegate中的代码重复

2> 代码不严谨,还没有判断accessToken是否已经过期

3> 上述保存的帐号信息,均是直接对字典进行操作,需要通过key去取值,需要封装成模型


1.3 添加帐号模型


1> 根据access_token、expires_in、uid,添加帐号字典,并提供类方法,字典转模型

2> 将请求成功后返回的字典,转成模型,再存入沙盒


技术分享


3>在程序运行时,判断沙盒中是否存在帐号信息,取出模型


技术分享


4> 注:自定义对象需要存入沙盒、从沙盒中取出,需要遵循NSCoding协议!!!


技术分享


5>在网络请求的时候添加蒙版MBProgressHUD


技术分享


并且在请求成功/失败获取accessToken后隐藏。


2、封装帐号存储


专门对帐号模型的保存、获取进行封装,处理帐号相关业务

注:在帐号模型中添加获取accessToken的时间,用于判断以后accessToken是否过期


技术分享


技术分享


3、封装控制器切换


1.2节中已经指出,上述代码在授权成功切换控制器和程序运行切换控制器中的代码存在很多重复,需要将代码抽取出来,将切换控制器封装到UIWindow的分类当中。


技术分享


注:使用的是对象方法,对UIWindow对象进行操作


技术分享


技术分享


4、首页 - 获得用户昵称


技术分享


使用Foundation+Log,查看打印数据。

1:需要将昵称储存,在设置- (void)setupNav方法中,先取出沙盒中的昵称,再去发网络请求,看昵称是否改变,存储到HWAccount模型中

2HWAccount中的存储时间不应该放在HWAccountTool

+(void)saveAccount:(HWAccount *)account方法中,而应该放在字典转模型

+(instancetype)accountWithDict:(NSDictionary *)dict方法中

3encodeWithCoderinitWithCoder两个方法中也要写昵称属性


5、首页 - 封装标题按钮


5.1 使用imageEdgeInsets、 titleEdgeInsets说明


1:首页导航栏的titleView中文字和图片的间距,不能用UIEdgeInsetsMake固定死,因为用户的昵称会改变,文字的长度也会改变

2:什么情况下建议使用imageEdgeInsetstitleEdgeInsets

如果按钮内部的图片、文字固定,用这2个属性来设置间距,会比较简单

标题宽度(乘上scale系数,保证retina屏幕上的图片宽度是正确的)

CGFloattitleW = titleButton.titleLabel.width * [UIScreen mainScreen].scale;

CGFloatimageW = titleButton.imageView.width * [UIScreen mainScreen].scale;

CGFloatleft = titleW + imageW;

titleButton.imageEdgeInsets= UIEdgeInsetsMake(0, left, 0, 0);


5.2 自定义HWTitleButton


技术分享


1:在这里只需要修改文字和图片的x即可!

2:下面的方法会引发死循环


技术分享


此时在HWHomeViewController的setupNav方法中只需要这么做即可


技术分享


6、加载微博数据


技术分享


技术分享


注:使用SDWebImage需要对内存警告做处理


技术分享


7、微博数据 - 字典转模型


7.1 基本实现


1> HWUser


技术分享


技术分享


2> HWStatus


技术分享


技术分享


3>在HWHomeViewController中对网络返回的字典转换成模型数组,并在tableView代理方法中使用模型


技术分享


4>在setupUserInfo方法中获取用户昵称也使用用户模型


技术分享


7.2 MJExtension框架 --- 重要


问题:上述字典转模型的方法比较繁琐,而且又有模型嵌套。

解决方法:利用MJExtension框架(底层用runtime实现),可以快速实现字典/模型相互转换,还可以实现字典数组直接转模型数组等很多快捷功能!!!

1> 导入框架

2> 删除原先的字典转模型方法

3>修改如下


技术分享


8、下拉刷新


UIRefreshControl– 下拉刷新控件


技术分享


技术分享


iOS开发 - 第05篇 - 项目 - 04 - OAuth授权 & 首页

标签:

原文地址:http://blog.csdn.net/nsryan/article/details/52107741

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!