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

来源:http://www.cnblogs.com/polobymulberry/archive/2016/04/03/5349559.html
-Advertisement-
Play Games

【原】博客園第三方客戶端-i博客園App開源 本文轉載請註明出處 —— polobymulberry-博客園 1.前言 目前i博客園App已經更新到2.0.0版本了,使用了最新的博客園Web API。相比於第一個版本,添加了很多新的功能,也修改了很多功能。整體來說改動比較大,代碼也比較混亂。所以趁著 ...


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

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


1.前言


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

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

  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. 感謝


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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 之前說要整理這塊內容,分享給大家,工作原因,直到現在,趕上清明宅在家裡,趕緊整理出來與大家分享。 精靈圖(CSS sprite) 所謂精靈圖,其實就是把幾張圖拼成一張圖。從而在低併發的瀏覽器上達到快速傳輸並呈現內容的目的(減少請求)。 在用到這些圖片的時候,需要引用整張圖片然後設定坐標到需要的那張小 ...
  • 轉自:http://kb.cnblogs.com/page/534571/ 一直都聽說DOM很慢,要儘量少的去操作DOM,於是就想進一步去探究下為什麼大家都會這樣說,在網上學習了一些資料,這邊整理出來。 首先,DOM對象本身也是一個js對象,所以嚴格來說,並不是操作這個對象慢,而是說操作了這個對象後 ...
  • 在"setTimeout那些事兒"中,說到JavaScript是單線程。也就是同一時間只能做同一事情。 也好理解,作為瀏覽器腳本語言,如果JavaScript不是單線程,那麼就有點棘手了。比如,與用戶交互或者對DOM進行操作時,在一個線程上修改某個DOM,另外的線程刪除DOM,這時瀏覽器該如何抉擇呢 ...
  • AngularJS $scope裡面的$watch(),$digest()和$apply()是AngularJS的核心函數,學習AngularJS必須理解這幾個函數。 在綁定$scope中的變數到view的時候,AngularJS自動在內部創建一個"Watch"。"Watch"用於監聽Angular ...
  • <a>元素的作用是可以創建一個鏈接,鏈接對應4個狀態:未訪問,已訪問,滑鼠懸停,滑鼠點擊瞬間。 為了給鏈接的4個狀態應用樣式,引入偽類的概念。 什麼是偽類呢?簡單點說,就是你沒定義這個類,但它確實作為一個類來使用。(這些類確實存在,瀏覽器在後臺會向這些類增加和刪除元素) 我在看《CSS設計指南》時, ...
  • 我們知道無論什麼時候只要創建了一個函數,就會為該函數創建一個prototype屬性,這個屬性指向函數的原型對象,預設情況下所有原型對象都會自動獲得一個constructor(構造函數)屬性,這個屬性包含了一個指向prototype屬性所在函數的指針。當調用構造函數創建一個新實例後,該實例內部就會包含 ...
  • 三欄式佈局是眾多網頁的常規佈局之一,我們在採用三欄式佈局時所提出的要求一般是左欄與右欄定寬,中間部分寬度自適應,中間部分作為內容主體,我們需要將其放在左欄與右欄之前來達到優先渲染的效果。 2006年Matthew Levine在《A LIST APART》上發表了一篇名為 "《In Search o ...
  • 前言:本篇隨筆會經常更新,隨著本人對佈局的深入學習,會不斷補充新的知識、新的使用技巧、新的認識等等。 1、Autoresizing(在代碼中使用) 先簡單的看看下麵的代碼,以及左邊運行出來的效果,然後後面就會對iPhone模擬器進行旋轉,再看看效果,然後結合代碼中的autoresizingMask屬 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...