一。專案背景
沒流量,然後還想看部落格。所以想要純文字的,方便閱讀的,就想到了 RSS
試過一些 RSS 訂閱 app,有些重要源無法解析,例如 FEX 週刊、奇舞週刊、國外站點等等。另外,對於沒有提供 RSS 的網頁,也沒有辦法訂閱,所以決定自己搓一個:
-
抓取展示 RSS 最新 10 條(包括目錄摘要和 post 內容)
-
夜間模式(當時經常在晚上看)
當時會點安卓,偷懶採用安卓殼包著 WebView 容器的方式實現,看上了 WebView 在內容排版上的巨大優勢
現在已經搬到了 iOS,長這樣子:
[caption id="attachment_1390" align="alignnone" width="625"]
rsshelper_ios[/caption]
二。安卓 Hybrid App
把 WebView 作為容器,所有內容都是離線頁面,沒有服務,靠安卓跨域,沒有持久儲存(sqlite),甚至連基本的記憶體快取都沒有
遇到一些問題:
-
XML 解析,用 jsoup
-
執行緒通訊(抓取 HTML 和 RSS 並解析的過程在子執行緒)
-
跨域,由安卓來請求,繞過去了
-
安卓與 JS 雙向通訊(包括 JS 介面注入和 WebView 歷史棧管理)
靠這樣一個很弱的玩具找到了第一份實習工作,當時前端基礎不好,除了個人部落格首頁(首頁是自己做的,內容等都是 wordpress)外,拿不出能看的專案,Java 僅限於安卓玩具和 SSH 配出來的 Hello World,這個小玩具可能是作為加分項了吧(猜測)
自己用了半年的樣子,後來知道了有更合適的方式:ionic 之類的依賴 Cordova 實現的跨平臺方案
三。ionic 應用
2 個月的前期準備(跟著計劃走,學了一點 PHP,一些 angular),花 1 周時間做好了:
-
PHP 服務現場抓取 RSS/HTML
-
記憶體快取 + 本地快取,簡單過期策略
-
簽名釋出,正規安卓應用
遇到一些問題:
-
JSONP 跨域,接 angular
-
simplexml_load_file原生模組解析 XML -
splash 閃屏、inappbrowser 外掛版本相容性
相比純手寫的安卓應用,ionic 開發遇到了更多問題,而且更難解決,很多奇怪的問題無法定位,只能 google
四。PHP 服務更新
simplexml_load_file 原生模組很脆弱,遇到不合法的 XML/HTML 就報錯,而且從 XML 角度解析 RSS 要手動相容各種 feed 格式,例如 RSS 2.0、Atom 1.0 等等
RSS 換過 simplexml,也不支援某些不規範的 feed 格式,後來 RSS 換用原生 XMLReader,HTML 用 DiDom,基本穩定
結構也做過拆分重構:
-
引入 Composer 模組管理器
-
把 HTML 解析規則配置化
但奇舞週刊,FEX 週刊之類的 feed 無法解析,在 PHP 生態沒有找到更好的 RSS 解析方案
五。服務遷移至 node
原 PHP 伺服器無法支援 HTTPS(廉價虛擬主機限制),改用 HTTPS 順便用 node 重寫,發現了生態的巨大作用:
-
RSS 解析使用 feedparser
-
HTML 解析使用 cheerio
feedparser 能解析各種奇怪的不規範的 XML(似乎有糾錯容錯處理),cheerio 也沒遇到奇怪的問題(BOM 頭導致亂碼之類的),比之前 PHP 沒有選擇好太多了,繁榮的生態反過來推動語言的發展
添上了一些本該有的支援:
-
定時抓取
-
服務端記憶體快取
服務功能還比較簡單,但目前抓取部分算是穩定了
六。打包 iOS 真機安裝
安卓打包釋出在之前有說過:[ionic 開發跨平臺 App 常見問題](/articles/ionic 開發跨平臺 app 常見問題/#articleHeader9),環境要求比較麻煩
iOS 打包需要 OSX 環境以及 Xcode,目前真機除錯已經不需要99 刀認證的開發者帳號,但上架 App Store 還是要交錢
0. 環境
- OSX @10.12.x:
支援構建 ios10.x 應用,低版本的只能構建 ios9.x 應用
- Xcode @8.x:
支援構建 ios10.x 應用,Xcode 7.x 只能構建 ios9.x 應用
注意:Xcode 版本升級依賴 OSX 系統版本升級,OSX 10.9 無法從 App Store 安裝/更新 Xcode 8
1. 安裝 iOS 模擬器支援,並新增平臺
npm install -g ios-sim
ionic platform add ios
2. 構建
ionic build ios
3. 模擬器執行
ionic emulate ios
4. 真機安裝
cd <path/to>/myapp/platforms/ios
# Open myapp.xcodeproj with Xcode
# USB connect the device
# Click Product>Destination>device name
# Click the triangle button(Build and run the current scheme)
注意:Xcode 需要配置開發者帳號,不用付費認證,只要是合法的 apple id 即可。啟動應用會提示不受信任,需要去設定裡信任開發者
七。專案地址
Github:https://github.com/ayqy/RSSHelper
事實上 ionic 的第一個版本就已經放上去了,但那時候還只是一個簡單脆弱沒有設計的應用,現在稍好一些,變得簡單健壯了,下一步填充功能,支援自主訂閱、使用者管理之後,就是小型工具應用了
有一些後續的計劃,總有一天會完成:
-
UE Optimizing
-
UI Style & Theme
-
Interaction
-
-
Function Enhancement
-
Login & User Management
-
Constom catelogy list
-
History & Favorite
-
Feedback
-
後話
除了 WebView,另一個與筆者有不解之緣的關鍵字是貝塞爾曲線
永遠做不完的文字識別專案中第一次聽到貝塞爾曲線,Web Audio 製作曲線頻譜時找到了計算控制點的可靠方法,畢業的安卓塗鴉應用核心也是貝塞爾曲線
像一片羽毛落在水上泛開的漣漪,真正花了時間的東西,總會有奇怪的用處
暫無評論,快來發表你的看法吧