学习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.百度.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类中,可以:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbkjjk
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01