学习HM微博项目第4天

步骤:OAuth授权01_加载登录界面 -> OAuth授权02_获得accessToken -> OAuth授权03_存储账号信息 -> OAuth授权04_封装账号存储 -> OAuth授权05_封装控制器的切换

OAuth授权01_加载登录界面

为了测试方便,暂时把window的根控制器固定设置为授权控制器,如下:

在HMOAuthViewController类(继承UIViewController)的viewDidLoad方法中,新建一个webView类,并用webView加载登陆界面(新浪提供的),如下:

 

APP的界面:

 

OAuth授权02_获得accessToken

在前文中已经加载登陆界面,输入账号信息后并点击登陆按钮后,通过-webView:shouldStartLoadWithRequest:navigationType:方法拦截url请求,并从中判断是否为回调地址,若是就利用code的请求标识(授权成功后的request token)换取一个accessToken。如下:

具体如何利用code的请求标识(授权成功后的request token)换取一个accessToken可看accessTokenWith:方法,如下:

注意:这里的网络请求用的是AFN框架,并且由于新浪返回的数据Content-Type是text/plain类型的原因,需要对AFN的AFJSONResponseSerializer做下修改。

授权成功后APP会进入回调地址的页面,这里的回调地址为www.baidu.com。如下:

OAuth授权03_存储账号信息

在授权成功后,利用code向新浪服务器发送请求,成功后会向返回账号的相关信息,这时候应该对账号信息进行存储,避免以后需要再次对应用进行授权。

在前文的发送请求代码中继续完善请求成功的代码,如下:

说明:
1.返回的账号字典数据要转换成数据模型进行存储,并且用归档的方式进行存储。
2.请求成功后APP应该切换窗口的控制器,而不能再进入回调地址的页面,所以要在-webView:shouldStartLoadWithRequest:navigationType:禁止加载回调地址,如下:

3.在请求成功后切换窗口的控制器需要对版本进行判断,另外APPDelegate类也需要修改下,之前暂时把window的根控制器固定设置为授权控制器,现在需要通过是否存储过账号信息对根控制器进行选择,如下:

4.HMAccount账号模型归档和解档要特别注意遵守NSCoding协议,否则会出现这样的错误信息: 

HMAccount.m的具体代码如下: 

HMAccount.h的具体代码如下:

 

OAuth授权04_封装账号存储

前文中,将返回的账号字典数据存进账号模型和存进沙盒的操作应该抽取出来并封装到HMAccount和HMAccountTool两个类中,如下:

 HMAccountTool.m的具体代码如下:

说明:
1.saveAccount:方法除了存储前文必要的账号信息,还需要存储获得账号存储的时间(accessToken的产生时间),以便以后授权过期提醒用户重新登录。
具体代码如下:

2.由于还要存储获得账号存储的时间(accessToken的产生时间),所以要对HMAccount做下修改,添加created_time属性,并对归档encodeWithCoder:方法和解档initWithCoder:方法做下修改。

3.在APPDelegate类中,可对之前的代码进行简化(直接通过HMAccountTool的account:方法取出HMAccount的账号数据),如下:

4.account方法中,如果账号过期,应该返回nil(即会重新返回登录界面),具体代码: 

 

OAuth授权05_封装控制器的切换

前文窗口的根控制器的切换在多处地方使用到,所以应该对其进行封装。这里,只需要做简单的版本判断来切换控制器,所以没必要特意新建一个类来封装,只要通过category对UIWindow进行扩展就可以,具体如下:

说明:
1.AppDelegate类的代码:

 

2.在HMOAuthViewController类中,可以:

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉亭下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值