緣由
為什麼要做這款軟體(下文簡稱mini微博)呢?其實是一直有那麼一個想法,後來直到某次內部技術分享的時候,老大問大家在這段比較閑的時間內有沒有點什麼想法。有人提到想要做一些比較炫一點的東西,當時正值music+誕生,於是就冒出做精簡版微博的想法,也在後來的空閑時間中開始著手開發,一直弄弄,直到現在的版本。功能基本上已經全了,也不準備添加新的功能。
mini微博追求是跟隨系統一致的使用者體驗,目標是提供比系統人脈中的微博更好的使用者體驗,只有黑和白兩套系統主題,個人偏向於白色主題(需要將系統主題設定為Light)。
特色如下:
1. 訊息中心,查看各種訊息更加方便
2.微博廣場,無聊時看看大家在幹什麼
3.瀏覽、發送多圖
4.瀏覽分組微博,發送微博到指定分組
不要問我這款軟體跟官方用戶端有什麼區別,都是自己的孩子,相煎何太急。
可以看下 @陳驍 童鞋錄製的視頻,感謝他在百忙之中抽空錄製的視頻。
為什麼不做WP7.x的版本?
其實在著手開發mini微博的時候,一開始建立的項目就是7.1的專案檔,也開發了一個簡單的版本,包含精簡版微博必備功能(主資訊流、訊息中心、分組微博、搜尋功能、發布評論轉寄功能)。運行效果稍微比官方微部落格戶端流暢些,但體驗確實沒有想象中那麼好,官方微部落格戶端做了大量的最佳化工作,在一些低端的機器上也有不錯的使用者體驗,贊一個。
自從買了920之後,就有放棄開發7.x版本的想法了,將代碼遷移到wp8部署到920後,發現使用者體驗跟在HD7上完全是天壤之別,於是就更加堅定不做7.x版本的想法。(7.x的使用者勿怪,你們可以使用官方微部落格戶端,體驗也是相當不錯的)
產品經理?UI資源?
程式猿翻身做產品,自己的東西自己說了算,再也不用忍受產品的無理要求? 別當真,只是說說而已。
微博mini就我一人開發,什麼都自己說了算,嗯,在開發的時候怎麼簡單怎麼做,這種感覺真的很不錯。
Windows Phone的產品經理一般都是從Android和iOS上轉來的,他們對Android和iOS的設計理念已經有一定的思維定勢,所以你可以發現在Windows Phone Store裡面居然能找到跟iOS長的一模一樣的應用。
稍微吐槽下,有時候,產品經理的設計還不如一線的開發人員,程式猿常年與各種應用打交道,對Windows Phone應用設計有更多的想法和體會,所以有些時候看到不合理的設計時要據理力爭反抗下。豆瓣上看到的一篇有意思的我們都討厭產品經理,其實產品經理也挺不容易,在團隊中要面對各種角色的仇恨,開發、測試、UI,我就不繼續拉仇恨了。
關於UI資源,微博mini中借鑒了官方用戶端中優秀的頁面配置以及使用了一些圖片資源,更多的是來自 Modern UI Icons 的表徵圖和向量圖形。當然我也使用了Expression Design。
這裡介紹一些我常用的UI資源 : easyicon 、loveui、mobile-pattern、fanggeben 、dribbble、花瓣
一些開發體會
1、"幹掉"Appbar
ApplicationBar是獨立於三界之外的怪物,不能像UIElement一樣做綁定(雖然有第三方實現),而且Buttons、Menus在Insert新項時各種問題。
對於微博這類資訊瀏覽的應用來講,下面放一排Appbar總覺得佔用頁面空間,所以在mini微博中你很少看到Appbar,不要奇怪,因為作者很討厭它。
我選擇的替代方式是ios、android上的PathMenu,參考了js的radial menu實現方式,有興趣的懂JS的朋友可以看下源碼,實現起來其實不難。當然也有朋友在windows phone上實現了類似的效果並開源了:Awesome Menu
2、善用CustomMessageBox,少做頁面跳轉
在wp7.x後時代,微軟的官方Toolkit中增加了CustomMessageBox,我實在是太喜歡這個控制項了(雖然有一些已知的bug),也在微博mini中大量使用。 行動裝置 App應該讓使用者做最少的操作去完成一項任務。
3、使用WebBrowser作為大圖查看器
4、使用async類庫,可以在wp7、wp8、winrt之間共用代碼
5、網路請求使用壓縮(gzip壓縮大約為之前的六分之一)
網路請求如果伺服器支援壓縮傳輸,那麼我們用戶端需要用壓縮請求,可以使用SharpGIS.GZipWebClient
6、多使用系統佈景主題資源,如PhoneForegroundBrush
7、使用ProgressIndicator作為網路請求提示或長任務進度提示
曾經寫過部落格介紹了一個ProgressIndicator協助類 這也是mini微博中所有進度提示所使用的技術了。
8、使用LongListSelector替代ListBox
LongListSelector的虛擬化做得比ListBox好一些,而且滑動也更為流暢些。可以稍微封裝下LongListSelector變為一個滑動到底部自動載入的控制項。
9、網路請求用HttpClient
10、編寫簡單優雅的代碼
有些程式猿有時為了快速實現一個功能,隨意編寫大量代碼,然後運行一下能跑通了,於是繼續實現下一個功能,再來大量代碼。於是當所有功能完成後,他想著要重構,卻發現無從下手。在編寫代碼的時候需要避免這樣的習慣,我的做法是將功能分塊,然後逐個實現,每實現一個功能都會進行不同程度的代碼重構與Review,這樣儘早將代碼梳理,在後期編寫類似功能的時候,前面的代碼就不需要大量改動而能複用。
11、合理使用轉場動畫
曾經內部技術分享的時候分享過一次動畫專題,也將動畫效果運用到了實際的應用中(music+),在應用中增加一些轉場動畫會讓你的應用看起來更加流暢,更能讓使用者喜歡。當然在mini微博中使用了系統郵件發送成功後的動畫。
後記
由於很多客觀原因導致程式不能上傳到微軟市場,請大家見諒(嗯,我一開始就沒打算上傳到市場,自己夠用就行了),只能部分可以部署xap包的wp8手機才能用。
一些伸手黨也不要留言說:”能不能把原始碼發我一份?“, ”求開源“之類的話….
寫本文的目的僅僅是分享自己開發mini微博時的一些體會,給Windows Phone開發人員一點啟示,希望WP開發人員能開發出更多優質的應用。