标签:
本文转载请注明出处 —— polobymulberry-博客园
目前i博客园App已经更新到2.0.0版本了,使用了最新的博客园Web API。相比于第一个版本,添加了很多新的功能,也修改了很多功能。整体来说改动比较大,代码也比较混乱。所以趁着清明假期,把代码好好整理了一番。目前基本的架构已成型(当然,后期还需要不断优化),但App基本功能方面还有很多需要添加的,后面会集中把App功能完善。
上面简单介绍了下目前App的情况,回到开源的话题来。开源这个App源码其实是我从一开始就有的愿景,不过当初代码很混乱,所以一直拖啊拖,中间也有很多实验室的事情,不过我一直也没放弃过要开源的这个想法。开源对我来说利大于弊的:
之前版本的i博客园请移步《博客园第三方客户端-i博客园正式发布App Store》。因为换了新的Web API,所以增加了很多新功能,比如文库、登录等等。
博客 | 新闻 | 文库 |
我-登录 | 我-非登录 | |
整体代码是按功能模块来划分的,而每个功能模块是按MVC来的(下面会介绍)。这里我一共分为7个模块:1.博客(Blog) 2.新闻(News) 3.文库(知识库Library) 4.闪存(暂时未实现,Flash) 5.我(Me) 6.引导页(Guide) 7.主要(Main)
博客的内容主要包括两部分,一个是首页,另一个精选。
首页部分使用的是简单的tableView,每个cell的类型就是放在BlogHomeTableViewCell目录下的ICBlogHomeTableViewCell。其中动态计算cell高度是使用了UITableView+FDTemplateLayoutCell这个库。精选部分使用了自定义collectionViewLayout,名叫ICBlogPickedCollectionViewLayout。另外,这两个部分放在了一个scrollView(ICBlogScrollView)中。
首页 | 精选 |
至于每个Blog的内容呈现,我使用的是KINWebBrowser库,而非使用从服务器端获取的JSON数据来解析,因为JSON解析的效果很差,还不如直接用Web浏览器显示好看。使用KINWebBrowser时,你只需双击页面,即可放大到最佳阅读模式,使用UIWebView无法做到这一点。
新闻的内容主要包括三个部分:最新(ICNewsNewestTableView)、推荐(ICNewsRecommendTableView)、热门(ICNewsHotTableView)。
三者都使用了tableView,放在一个scrollView(ICNewsScrollView)中。每个tableViewCell都是ICNewsTableViewCell类型。个人比较喜欢简洁风格。
不过新闻的内容显示,我是自己解析JSON数据进行排版的。自定义了一个ContentHTMLTemplateWithArgs的宏函数来构建HTML数据。
基本同新闻,不过tableViewCell使用的是ICLibraryTableViewCell。
这一块后面会重点做一下,因为这是用户交流比较重度的一部分。
这一块做的比较久,UI相对来说比较复杂,另外也涉及到OAuth的知识。OAuth部分推荐dudu的OAuth系列博客。
Me这一块其实是由两个两部分组成,一个是登录部分,一个是个人中心部分。
**登录部分**
1.获取用户名和密码
2.将用户名和密码使用openssl进行rsa加密
3.再利用grant_type为password的OAuth认证方式来登录。
**个人中心**
我的博客和我的收藏都很简单,就是简单的tableView,连cell都没自定义。
设置部分功能就比较杂:
①清除缓存使用的是SDWebImage,异步清除,代码如下:
ICLog(@"size count : %ld",[[SDImageCache sharedImageCache] getSize]); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{ ICLog(@"清除成功"); ICLog(@"size count : %ld",[[SDImageCache sharedImageCache] getSize]); cell.textLabel.text = [self getCacheSize]; }]; });
②关于部分是使用了CNPPopupController,之所以这个简单的功能也使用第三方库,是因为我还没想好怎么做这种弹窗后背景模糊的效果,后面会更换成自己的库。
③评价就很简单了,不赘述了。
④退出账号其实就是删除了本地存储的账号信息文件。
请参考我之前的博客《博客园第三方客户端-i博客园正式发布App Store》,此处就不赘述了。
这部分内容很多,所以我分开来说,至于这里Helper和Tool有什么区别,大家请无视,本人经验尚浅,还回答不了。
存放的是openssl的rsa加密的算法。具体可以参见博客《RSA加密》。
这个存放的东西就比较多了。我一直很认同田伟宇的一句话,category是典型的化继承为组合的方法。而且这里我尽量不会把强业务放在category中,我觉得category应该放一些弱业务的东西。
将dataSource从ViewController中分离,做到light View Controller。参考文章《更轻量的 View Controllers》。
**ICControllerTool**
主要是解决第一次安装,或者更新App后,应该先启动引导界面的问题。
**ICNetworkTool**
在AFNetworking上面分装了一层,不过此处我觉得设计的不是很好。暂时先这样,后面尝试下离散型API调用。
**ICOAuthTool/ICClientCredentialsOAuthTool**
因为网络请求的时候会用到各种access_token,比如grant_type为client credentials和grant_type为password/refresh_token的access token就不一样。
因此我定义了这两个Tool来管理相对的请求。对应的Model就是ICOAuth和ICClientCredentialsOAuth。
3.2.7.5 Controller
**ICLeftMenuViewController/ICLeftSideMenu**
因为使用了RESideMenu,所以ICLeftSideMenu其实就是RESideMenu的子类,而ICLeftMenuViewController其实就是RESideMenu的LeftMenuViewController。
放AppDelegate和main。
ICLeftMenuHeaderView其实就是ICLeftSideMenu上的这个:
GitHub:https://github.com/polobymulberry/iCnblogs
因为有些地方涉及到隐私,所以我会将代码进行脱敏(ClientID和ClientSecret)。大家下载以后不一定能直接运行。如果你感兴趣的话,可以去博客园申请一个ClientID和ClientSecret。
感谢博客园的管理员的帮助和指导。
标签:
原文地址:http://www.cnblogs.com/polobymulberry/p/5349559.html