在WP7中使用Silverlight開發DropBox應用
這篇文章的標題很有趣,WP7是手機、Silverlight是開發技術、DropBox是雲端服務應用...如果你對資訊技術(特別是開發技術)有興趣且持續關注,會發現這三個(類)名詞最近常常似有若無的連結在一起。(以後有機會再分享感觸...)
使用WP7手機好一陣子了,比較特別的地方是,WP7手機沒有檔案系統的概念,而是比較偏向雲端資料儲存機制,也因此,如果你需要Sync PC上的檔案,比較理想的方式是將檔案從PC Sync到雲端(例如Dropbox或是Skydrive),然後再透過手機去讀取...
不過要完成這樣的工作,就得跟雲端服務相關的API打交道了,也就是說,開發人員想要去存取於位於雲端上的檔案,可需要透過該服務提供的API。
DropBox雖然起步不算早,但在檔案存取上已經算是一個典範了。因為這樣,最近開始有ㄧ些機會需要利用silverlight開發技術來存取用戶位於DropBox上的檔案。基本上,API不算複雜,可以參考底下位置:
http://www.dropbox.com/developers
我很喜歡這種簡單好用的API,沒有太多詭譎之處,就很直接了當。如果你是開發人員,想要寫可以存取DropBox的手機或Web應用程式,請參考底下網頁:
http://www.dropbox.com/developers/quickstart
動作是:
先取得一個Developer Key(當然,你先要註冊DropBox帳號,然後進入底下頁面:https://www.dropbox.com/developers/apps )即可在該頁面上申請一個App:
申請完App之後,你會取得一組App Keys和Secret Code,這很重要,寫程式的時候會用到。
接著,就可以來寫程式存取DropBox了,但請先注意,你申請的App目前是開發階段,所以你在測試時只能存取自己的DropBox,程式寫完測試好之後,還得跟DropBox申請Production Key替換掉程式中開發階段的Key,才能正式Release你的應用程式。
要如何透過程式碼存取Dropbox呢?
Silverlight開發人員可以參考底下這組 SDK:
https://github.com/dkarzon/DropNet
下載後請reference幾個.dll,分別是:
DropNet.WindowsPhone.dll
Newtonsoft.Json.Silverlight.dll
RestSharp.WindowsPhone.dll
主要的組件是DropNet.WindowsPhone.dll,其他兩個組件是配合做Rest存取與Json的剖析用的。
接著,你就可以透過底下的程式碼登入:
請特別注意 LoginAsync 的第三個參數,該參數是Action,簡單的說就是一個Call back Method,你可以直接把Login後的動作寫在裡面。例如,我們在成功當入後取得用戶的資訊和public檔案清單。
我們來看public檔案清單的部分:
分享
使用WP7手機好一陣子了,比較特別的地方是,WP7手機沒有檔案系統的概念,而是比較偏向雲端資料儲存機制,也因此,如果你需要Sync PC上的檔案,比較理想的方式是將檔案從PC Sync到雲端(例如Dropbox或是Skydrive),然後再透過手機去讀取...
不過要完成這樣的工作,就得跟雲端服務相關的API打交道了,也就是說,開發人員想要去存取於位於雲端上的檔案,可需要透過該服務提供的API。
DropBox雖然起步不算早,但在檔案存取上已經算是一個典範了。因為這樣,最近開始有ㄧ些機會需要利用silverlight開發技術來存取用戶位於DropBox上的檔案。基本上,API不算複雜,可以參考底下位置:
http://www.dropbox.com/developers
我很喜歡這種簡單好用的API,沒有太多詭譎之處,就很直接了當。如果你是開發人員,想要寫可以存取DropBox的手機或Web應用程式,請參考底下網頁:
http://www.dropbox.com/developers/quickstart
動作是:
先取得一個Developer Key(當然,你先要註冊DropBox帳號,然後進入底下頁面:https://www.dropbox.com/developers/apps )即可在該頁面上申請一個App:
申請完App之後,你會取得一組App Keys和Secret Code,這很重要,寫程式的時候會用到。
接著,就可以來寫程式存取DropBox了,但請先注意,你申請的App目前是開發階段,所以你在測試時只能存取自己的DropBox,程式寫完測試好之後,還得跟DropBox申請Production Key替換掉程式中開發階段的Key,才能正式Release你的應用程式。
要如何透過程式碼存取Dropbox呢?
Silverlight開發人員可以參考底下這組 SDK:
https://github.com/dkarzon/DropNet
下載後請reference幾個.dll,分別是:
DropNet.WindowsPhone.dll
Newtonsoft.Json.Silverlight.dll
RestSharp.WindowsPhone.dll
主要的組件是DropNet.WindowsPhone.dll,其他兩個組件是配合做Rest存取與Json的剖析用的。
接著,你就可以透過底下的程式碼登入:
//建立dropNetClient if(dropNetClient==null) dropNetClient = new DropNet.DropNetClient("你的AppKey", "你的Secret Code"); //Login dropNetClient.LoginAsync(DropBox使用者帳號, DropBox使用者密碼, (para1) => { if (para1.Content.IndexOf("error")>0) { Dispatcher.BeginInvoke(() => { MessageBox.Show("Login fail, please make sure account & password is correct and try again, you can edit your account & password in the setting page."); }); return; } //成功登入後, 取得用戶資訊 GetUserinfo(); //取得Public目錄清單 GotoPath("Public"); }
請特別注意 LoginAsync 的第三個參數,該參數是Action,簡單的說就是一個Call back Method,你可以直接把Login後的動作寫在裡面。例如,我們在成功當入後取得用戶的資訊和public檔案清單。
我們來看public檔案清單的部分:
void GotoPath(string path) { //Get Folder Info dropNetClient.GetMetaDataAsync(path, (para1) => { //DataBinding listBox1.Dispatcher.BeginInvoke(() => { //取得目錄與檔案 listBox1.ItemsSource = para1.Data.Contents; }); } ); }請注意在程式碼當中,DropBox API的呼叫都是以非同步的方式來進行,並且在另一個執行緒,因此你會看到有很多的Dispatcher...,而回傳的資料會在para1.data.contents,直接透過Silverlight的DataBinding技術Bind到listBox1上,呈現出的效果如下:
That's all, 就這樣,即可透過Silverlight存取DropBox,當然,這樣只是開始,還有許許多多其他的功能,如果改天有機會再詳述囉...
分享
留言
使用Silverlight 3 compile的部分.dll,是可以用在WP7的, WP7的runtime支援大部分SL3的namespace...