【原】博客園第三方客戶端-i博客園App開源

【原】博客園第三方客戶端-i博客園App開源

本文轉載請註明出處 —— polobymulberry-博客園html


1.前言


目前i博客園App已經更新到2.0.0版本了,使用了最新的博客園Web API。相比於第一個版本,添加了不少新的功能,也修改了不少功能。總體來講改動比較大,代碼也比較混亂。因此趁着清明假期,把代碼好好整理了一番。目前基本的架構已成型(固然,後期還須要不斷優化),但App基本功能方面還有不少須要添加的,後面會集中把App功能完善。git

上面簡單介紹了下目前App的狀況,回到開源的話題來。開源這個App源碼實際上是我從一開始就有的願景,不過當初代碼很混亂,因此一直拖啊拖,中間也有不少實驗室的事情,不過我一直也沒放棄過要開源的這個想法。開源對我來講利大於弊的:github

  1. 雖然我不是什麼大牛,開源的代碼也不是什麼牛逼的項目。可是我以爲成爲大牛老是有過程的,我但願我寫博客或者開源代碼能夠記錄下這些過程。不少牛人,好比說郭曜源大神(YYKit),等項目成熟了再一塊兒發佈出來。可是我觀念不同,我以爲開源代碼也是一個產品,若是從作產品的思惟來講,很重要的一點就是迭代開發,當我完成產品的基本功能後,我就應該去上線,和用戶交流,再繼續迭代開發下一版本的產品。目前我以爲個人代碼總體架構差很少了,因此我以爲能夠放到GitHub上了。
  2. 開源代碼的目的主要仍是爲了想更多的人蔘與進來,本質也是爲了督促本身學習。目前App功能還不完善,我的的力量也有限,但願能有更多的人加入進來,衆人拾柴火焰高。
  3. 另外將本身的代碼暴露出來,讓你們批評指正,也是加強本身技術的有效途徑。若是有幸能獲得大神指點,那就一日千里了,哈哈(作夢吧你)!其實我以爲本身以前一直矇頭作本身的事,不和外界交流,這樣很差,容易成爲井底之蛙。
  4. 最後一個也是比較重要的——知足個人虛榮心(你們不要吝嗇,多給我點小星星。哈哈,我就是這麼不要臉!不要臉!要臉!臉!)

2.新版本i博客園App效果


以前版本的i博客園請移步《博客園第三方客戶端-i博客園正式發佈App Store》。由於換了新的Web API,因此增長了不少新功能,好比文庫、登陸等等。算法

博客 新聞 文庫
博客 新聞 文庫
我-登陸 我-非登陸  
我-登陸 我-非登陸  

3. i博客園代碼結構簡介


3.1 代碼總體結構

image

總體代碼是按功能模塊來劃分的,而每一個功能模塊是按MVC來的(下面會介紹)。這裏我一共分爲7個模塊:1.博客(Blog)  2.新聞(News) 3.文庫(知識庫Library) 4.閃存(暫時未實現,Flash) 5.我(Me) 6.引導頁(Guide) 7.主要(Main)瀏覽器

3.2 各模塊介紹

3.2.1 博客

image

博客的內容主要包括兩部分,一個是首頁,另外一個精選緩存

首頁部分使用的是簡單的tableView,每一個cell的類型就是放在BlogHomeTableViewCell目錄下的ICBlogHomeTableViewCell。其中動態計算cell高度是使用了UITableView+FDTemplateLayoutCell這個庫。精選部分使用了自定義collectionViewLayout,名叫ICBlogPickedCollectionViewLayout。另外,這兩個部分放在了一個scrollView(ICBlogScrollView)中。服務器

首頁 精選
image image

至於每一個Blog的內容呈現,我使用的是KINWebBrowser庫,而非使用從服務器端獲取的JSON數據來解析,由於JSON解析的效果不好,還不如直接用Web瀏覽器顯示好看。使用KINWebBrowser時,你只需雙擊頁面,便可放大到最佳閱讀模式,使用UIWebView沒法作到這一點。網絡

3.2.2 新聞

image

新聞的內容主要包括三個部分:最新(ICNewsNewestTableView)、推薦(ICNewsRecommendTableView)、熱門(ICNewsHotTableView)。架構

三者都使用了tableView,放在一個scrollView(ICNewsScrollView)中。每一個tableViewCell都是ICNewsTableViewCell類型。我的比較喜歡簡潔風格。異步

image

不過新聞的內容顯示,我是本身解析JSON數據進行排版的。自定義了一個ContentHTMLTemplateWithArgs的宏函數來構建HTML數據。

3.2.3 文庫

image

基本同新聞,不過tableViewCell使用的是ICLibraryTableViewCell。

image

3.2.4 閃存(暫時未實現)

這一塊後面會重點作一下,由於這是用戶交流比較重度的一部分。

3.2.5.我

image

這一塊作的比較久,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,之因此這個簡單的功能也使用第三方庫,是由於我還沒想好怎麼作這種彈窗後背景模糊的效果,後面會更換成本身的庫。

image

③評價就很簡單了,不贅述了。

④退出帳號其實就是刪除了本地存儲的帳號信息文件。

3.2.6 引導頁

image

請參考我以前的博客《博客園第三方客戶端-i博客園正式發佈App Store》,此處就不贅述了。

3.2.7 主要(Main)

image

這部份內容不少,因此我分開來講,至於這裏Helper和Tool有什麼區別,你們請無視,本人經驗尚淺,還回答不了。

3.2.7.1 Vender

image

存放的是openssl的rsa加密的算法。具體能夠參見博客《RSA加密》。

3.2.7.2 Category

image

這個存放的東西就比較多了。我一直很認同田偉宇的一句話,category是典型的化繼承爲組合的方法。並且這裏我儘可能不會把強業務放在category中,我以爲category應該放一些弱業務的東西。

3.2.7.3 Helper

image

將dataSource從ViewController中分離,作到light View Controller。參考文章《更輕量的 View Controllers》。

3.2.7.4 Tool

image

**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

image

**ICLeftMenuViewController/ICLeftSideMenu**

由於使用了RESideMenu,因此ICLeftSideMenu其實就是RESideMenu的子類,而ICLeftMenuViewController其實就是RESideMenu的LeftMenuViewController。

3.2.7.6 Other

image

放AppDelegate和main。

3.2.7.7 View

image

ICLeftMenuHeaderView其實就是ICLeftSideMenu上的這個:

image

4.開源的相關事項


4.1 開源地址

GitHub:https://github.com/polobymulberry/iCnblogs

4.2 開源後的工做

  • 閃存部分
  • 目前其餘部分只能查看,還不能評論,刪除
  • 搜索部分
  • 分享功能
  • refresh token不起做用
  • 還有不少,想到了我就加到GitHub頁面上……

4.3 開源注意事項

由於有些地方涉及到隱私,因此我會將代碼進行脫敏(ClientID和ClientSecret)。你們下載之後不必定能直接運行。若是你感興趣的話,能夠去博客園申請一個ClientID和ClientSecret。

5. 感謝


感謝博客園的管理員的幫助和指導。

相關文章
相關標籤/搜索