豆郵windows客戶端(第三方)開發詳解

 

  「豆郵」,是社區網站「豆瓣」的一個相似私信的功能模塊。在豆瓣官網,「豆郵」曾一度被改成「私信」,但在遭到衆多豆瓣用戶的強烈反對以後又改了回來。然而,在豆瓣的移動客戶端上,仍稱呼爲「私信」。html

  豆郵的設定我想最初真的是當作郵件的形式來讓用戶之間交流的,可隨着移動端的普及,豆郵被不少用戶當成了即時通信軟件來使用,根本停不下來。前端

  「就不能加個微信qq之類的嗎?」web

  「不,那樣不文藝。」編程

  爲了將這種不良的風氣,額,發揚光大,我決定寫一款桌面軟件,好讓衆多豆瓣文藝青年,能夠邊工做邊聊天,不再用頻繁看手機了。json

--------------如下才是正文-------------  windows

1、豆瓣API

  1.使用Fiddler分析安卓客戶端所發出的請求。

  簡要步驟:開啓Fiddler的「容許遠程鏈接」,設置端口號,手機和電腦須要在同一個wifi網絡下,設置手機wifi的代理到電腦,此時,手機的全部http請求都可以在Fiddler中監聽到。以後開啓https的監聽,設置host過濾,只監聽豆瓣的api地址。api

  其中,在Composer標籤頁中能夠清楚的顯示請求的Url,header,body等信息,而且可以經過隨意修改這些數據進行調試,很是方便。瀏覽器

  以後,咱們便獲得了豆瓣的各類API接口,包括登陸與註銷、獲取用戶信息,聊天列表,聊天內容,關注列表,消息通知等。微信

  2.OAuth2.0 認證受權

  在使用用戶名和密碼登陸以後,會生成一個access token以及refresh token。access token 將做爲用戶登陸的惟一憑證,使用時將其賦值給header請求中的Authorization: Bearer便可。首次登陸後,咱們將access token保存到本地,使用戶下次能夠直接登錄而不須要從新輸入用戶名和密碼。網絡

  OAuth2.0將access token設計爲短效的,在必定時間內會過時。根據須要咱們可使用refresh token對access token進行刷新,造成新的憑據。具體方法是將請求中的grant_type的值更改成refresh_token便可。

2、使用WPF進行界面繪製

  1.使用XAML高仿了微信windows客戶端的界面。

  界面效果以下:

豆郵主界面

  2.使用web前端構建簡單的聊天窗口。

  聊天窗口使用了WPF自帶的WebBrowser控件,默認內核版本是IE7(能夠經過修改註冊表的方式換成更高版本的IE),天然不支持H5以及CSS3。討厭IE的同窗,可使用第三方的瀏覽器內核控件。以後本身動手寫一下CSS樣式以及JS交互,簡單測試一下兼容性問題就OK了。

  3.適配高分辨率屏幕

  WPF原生支持高分辨率,幸福滿滿。

  只是WebBrowser控件在高DPI的屏幕下,沒有按照系統默認進行縮放。還好IE支持zoom屬性,咱們經過必定的縮放比例來對網頁的body的zoom屬性進行設置。那如何肯定這一比例呢?通常來講96DPI對應100%,144DPI對應150%。OK,問題解決。

4、後臺邏輯

  1.多線程分離保證界面流暢

  務必將http請求服務放入後臺執行,任什麼時候候都不能讓界面去等待。本例中主要使用Task來進行處理。

  2.「即時」聊天體驗

  豆瓣API中有單獨監測消息提醒的接口,可返回未讀消息數量以及提醒版本號,咱們只需對該請求進行輪詢,並比較返回的版本號,就能夠作到對未讀消息進行提醒或顯示處理。

  3.MVVM數據綁定模式大大提高了編程體驗。

  用過的都說好。

5、待補充的功能

  1.發送和顯示emoji表情。

  2.搜素新用戶。

6、參考與感謝

  1.受如下文章啓發:

  【徹底開源】知乎日報UWP版(上篇):界面設計、官方API分析

  UWP開發之控件:用WebView作聊天框

  2.使用如下開源組件:

  Json.NET

7、開源發佈

  軟件在功能完善以後,將開放安裝包與源代碼,共同窗習交流。

相關文章
相關標籤/搜索