WPH202 Windows Phone 開發應用實戰 董大偉 光岩資訊技術總監、Microsoft MVP 光岩資訊
Windows Phone 8 企業佈署與管理功能 在開場之前…. 今天你不會聽到 Windows Phone 8 的開發介紹 Windows Phone 8 企業佈署與管理功能 或任何 Windows Phone 8 流言的確認
但你應該要知道Windows Phone 8 Windows Phone 7 應用程式可繼續執行 與Windows 8 共享核心 共享驅動程式, 安全性, 網路層, 影像與多媒體 三種解析度(WVGA, WXGA, 720p) 支援NFC 分享, 電子錢包, In-App-Purchases(IAP) 可透過C#/VB, Native C/C++, HTML5 browser control 開發 公司專屬應用程式
但你應該要知道Windows Phone 8 提供語音辨識API App to App Communication 支援Micros SD Card 使用IE 10瀏覽器 提供相機及 Lenses API 可下載離線地圖 內建整合Skype
Windows Phone 開發 除非你的要開發的App有用到上述功能, 我們仍建議採用Windows Phone OS 7.1 架構開發. Windows Phone 7.5 與Windows Phone 8 採用一樣的介面設計邏輯與操作方式
你應該要知道的其他事項… 因為這次我不是最後一場,所以不能Delay,時間一到,我們就停。 在大會光碟中,會有本場次完整的影片和相關的範例。 如果你是偷渡進來的,在 David's部落格,從下周開始,會有部分影片和片段的內容… 位於http://blog.StudyHost.com
我們要談的是…開發/應用/實戰 行動裝置與雲端運算的整合 使用Windows Azure Toolkit Azure Storage存取 Microsoft 帳號整合(身分驗證) Push Notification發送 使用Windows Azure Mobile Service SQL Azure data access In-App Advertising, In-App purchase Porting to Windows Store App Windows Phone開發的未來
WHY??? 行動裝置好端端的幹嘛要扯到雲端?
手機與雲端運算 賣錢的App幾乎都有後端 身分驗證也需要後端 重要的運算邏輯最好放在後端 行動裝置商業應用十之八九也都有後端 推送訊息也需要後端 連廣告都需要後端… …
手機與雲端運算 後端 雖不一定非得要是 雲端 但… 6/16,18,20 $1,000,000
何謂雲端運算? 雲端運算 ≠ Web Solutions 雲端運算 ≠ ASP(Application Services Provider) 雲端運算 ≠ VM(Virtual Machine) 雲端運算 ≠ AJAX技術或類似的UI技術 這些應用程式 需要多久的時間? 洩漏公司的機密
永不斷線的服務、沒有限制的可用資源、較低的營運成本 這才是行動裝置後端服務需要的 何謂雲端運算? 雲端運算的必要特徵(NIST:美國國家標準及技術研究所) On-demand self-service : 可依需求自助調整 Broad network access:可透過標準網路通訊方式提供各平台使用 Resource pooling:有大量可自由分配運用的實體或虛擬的資源。 Rapid elasticity:高彈性使用(可迅速擴充或縮減資源的運用) 。 Measured service:使用狀態的可量測性。 National Institute of Standards and Technology 美國國家標準及技術研究所 http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf 永不斷線的服務、沒有限制的可用資源、較低的營運成本
架構圖 WP與雲端運算之間的關係… 了解Windows Azure之後… 辨識(大量運算) 股票 氣象 交通 訊息(通訊) 影音 身分驗證 這些應用程式 需要多久的時間? 訊息(通訊) 影音 身分驗證
Windows Azure目前提供的服務 Web Role - 建立提供Windows Phone使用的Web Services Worker Role - 建立提供Windows Phone使用的Routine Jobs Azure Storage - 作為Windows Phone大型資料存取來源 SQL Azure -作為Windows Phone結構化資料存取來源 Azure Mobile Service -直接提供您資料存取、驗證、推播訊息服務
WP7有哪些典型的雲端應用情境? WP存取blob, table...等Storage (App需要存取大量圖片、影像、或多媒體檔案…etc) WP存取SQL Azure (App需要存取資料表…etc) WP登入Web Role(ASP.NET) (ex, 身分驗證、識別、加值資料存取) Worker Role的Routine Jobs (ex, Push Notification Process) … 這些應用程式 需要多久的時間?
架構圖 WP與雲端運算(資料存取) SQL Azure DB 這些應用程式 需要多久的時間? Web Role storage
架構圖 WP與雲端運算(身分驗證) ASP.NET Membership Web Role DB Azure ACS 這些應用程式 需要多久的時間? Azure ACS
架構圖 WP與雲端運算(訊息服務、動態磚更新) DB Windows Azure storage SQL Azure Worker Role Microsoft Push Notification Service DB 這些應用程式 需要多久的時間? Windows Azure storage SQL Azure Worker Role 建立基本WorkerRole-WP7 Push Notification訊息發送 WindowsAzureProject2
開發技術架構圖 WP可透過哪些技術存取雲端? ADO.NET EF Web Role LinqToSql ADO.NET SQL Azure REST API/WS DB JSON/XML 這些應用程式 需要多久的時間? .NET Fx 4.0 REST API Windows Azure storage
我們有Windows Azure Toolkit for Windows Phone 7(WAT) 從Windows Phone存取Cloud 要熟悉SQL、XML、SOAP... 要學會REST API、JSON... 得明白ADO.NET EF, LinqToSql, Linq... 會操作oAuth、ASP.NET Membership... 必須擅長Silerlight、WCF Services... … 我們有Windows Azure Toolkit for Windows Phone 7(WAT) & Azure Mobile Service 這些應用程式 需要多久的時間? NO, 我們不會如此殘忍…
關於Windows Azure Toolkit
WAT是什麼??? Windows Azure Toolkit 簡化您由WP7存取Windows Azure Storage (blob, table, queue), SQL Azure …等機制的應用程式開發套件組。 包含您需要的Class Libraries(類別庫)、Project Template…等資源。 以及透過這些Project Template所開發出來的應用程式展示範例。 這些應用程式 需要多久的時間?
透過WAT我們可以… 輕鬆完成帳號登入功能 (包含透過ACS與Yahoo, Google, Windows Live整合) 輕鬆建立Push Notification的機制與後台管理功能 支援Windows Azure Storage的存取 支援SQL Azure的存取 透過AspNetProvider建構雲端服務網站 … 這些應用程式 需要多久的時間?
下載WAT for Windows Phone 位於http://watwp.codeplex.com/ 這些應用程式 需要多久的時間?
安裝WAT for Windows Phone 執行WATWindowsPhone.exe 完成後會看到(C:\WindowsAzure\WATWindowsPhone) 這些應用程式 需要多久的時間?
安裝WAT for Windows Phone 出現安裝畫面 這些應用程式 需要多久的時間?
安裝WAT for Windows Phone 相依性套件不少,若有缺、請逐一安裝 這些應用程式 需要多久的時間?
安裝WAT for Windows Phone 相依性套件都裝了,才能繼續下一步… 這些應用程式 需要多久的時間?
安裝WAT for Windows Phone 主要就是這個安裝動作… 這些應用程式 需要多久的時間?
Let's Do It… 這些應用程式 需要多久的時間?
建立blob帳號與Container 這些應用程式 需要多久的時間?
在WP7中存取blob 使用Windows Azure Toolkit for WP7 使用WindowsPhoneCloud.StorageClient 位於C:\WindowsAzure\WATWindowsPhone\Binaries //建立credentials StorageCredentialsAccountAndKey credentials = new StorageCredentialsAccountAndKey( StorageAccount, StorageKey); //建立CloudBlobClient CloudBlobClient BlobClient = new CloudBlobClient(BlobEndpoint, credentials); 這些應用程式 需要多久的時間? 這邊提供Storage帳號與Key
在WP7中存取blob //決定要連結的Container 這邊提供ContainerName //決定要連結的Container var mycontainer = BlobClient.GetContainerReference(ContainerName); string fileName = System.DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".bmp"; var blob = mycontainer.GetBlobReference(fileName); //進行上傳動作 blob.UploadFromStream(fs, (ret) => { //顯示結果訊息 }); 這些應用程式 需要多久的時間? 透過API以非同步方式上傳
Demo:在WP7中存取blob 使用WAT套件 建立blob Container 在WP7中存取blob(上傳照片) private void UploadFile2Blob(System.IO.Stream fs) { //建立credentials StorageCredentialsAccountAndKey credentials = new StorageCredentialsAccountAndKey( StorageAccount, StorageKey); //建立CloudBlobClient CloudBlobClient BlobClient = new CloudBlobClient(BlobEndpoint, credentials); //決定要連結的Container var mycontainer = BlobClient.GetContainerReference(ContainerName); string fileName = System.DateTime.Now.ToString("yyyyMMdd-HHmmss")+".bmp"; var blob = mycontainer.GetBlobReference(fileName); //進行上傳動作 blob.UploadFromStream(fs, (ret) => //顯示訊息 Dispatcher.BeginInvoke(() => { aRock.Phone.SysTray.Hide(this); aRock.Phone.Dialog.NotifyDialog.ShowToastMessage("完成"); }); aRock.Phone.SysTray.ShowWords(this, "上傳檔案中..."); } static string BlobEndpoint = "http://test01.blob.core.windows.net"; //Blob連接位置 static string ContainerName = "mycontainer2"; //預設container (請先建立此container) static string StorageAccount = "test01"; //帳號 //Key static string StorageKey = "vyOy2STbjGRS8YLIs0gOo1KV38J9GEDCMyRSTcR6Sd7/LHrjZT84/gQzwtYD9w=="; private void TakePicture() Microsoft.Phone.Tasks.CameraCaptureTask cc = new Microsoft.Phone.Tasks.CameraCaptureTask(); cc.Completed += (ss, arg) => { UploadFile2Blob(arg.ChosenPhoto); }; cc.Show(); 董大偉 David@aRock.com.tw 光岩資訊 技術總監 台灣微軟MSDN講座講師 WP7AccessBlobTest WP7直接存取blob.wmv
Demo 在WP7中存取blob
建立類似上面這樣的Signature,以限制存取時間和權限 在WP7中存取blob(with SAS) 如果你擔心不安全 可透過Shared Access Signature機制 透過時間戳章、存取設定等參數來建立SAS,限制blob可存取對象與範圍 http://forwp7test20120917.blob.core.windows.net/container1/1336920569_Bible.png?sr=c&si=PolicyKey&sig=suAZnVb40JKR8X8RfzDmXVCVZqQRuwTaTus44rkfik0%3D 這些應用程式 需要多久的時間? 建立類似上面這樣的Signature,以限制存取時間和權限
Demo:在WP7中存取blob(SAS) 在用戶端透過SAS抓取blob private void UploadFile2Blob(System.IO.Stream fs) { //建立credentials StorageCredentialsAccountAndKey credentials = new StorageCredentialsAccountAndKey( StorageAccount, StorageKey); //建立CloudBlobClient CloudBlobClient BlobClient = new CloudBlobClient(BlobEndpoint, credentials); //決定要連結的Container var mycontainer = BlobClient.GetContainerReference(ContainerName); string fileName = System.DateTime.Now.ToString("yyyyMMdd-HHmmss")+".bmp"; var blob = mycontainer.GetBlobReference(fileName); //進行上傳動作 blob.UploadFromStream(fs, (ret) => //顯示訊息 Dispatcher.BeginInvoke(() => { aRock.Phone.SysTray.Hide(this); aRock.Phone.Dialog.NotifyDialog.ShowToastMessage("完成"); }); aRock.Phone.SysTray.ShowWords(this, "上傳檔案中..."); } static string BlobEndpoint = "http://test01.blob.core.windows.net"; //Blob連接位置 static string ContainerName = "mycontainer2"; //預設container (請先建立此container) static string StorageAccount = "test01"; //帳號 //Key static string StorageKey = "vyOy2STbjGRS8YLIs0gOo1KV38J9GEDCMyRSTcR6Sd7/LHrjZT84/gQzwtYD9w=="; private void TakePicture() Microsoft.Phone.Tasks.CameraCaptureTask cc = new Microsoft.Phone.Tasks.CameraCaptureTask(); cc.Completed += (ss, arg) => { UploadFile2Blob(arg.ChosenPhoto); }; cc.Show(); 董大偉 David@aRock.com.tw 光岩資訊 技術總監 台灣微軟MSDN講座講師 範例位置 WP7AccessBlobTestWithSAS
Demo 在WP7中存取blob(with SAS)
使用Windows Phone Cloud Application Template WAT中一套完整的行動裝置與雲端運算整合應用專案範本 省去開發服務端(伺服器端)應用程式的時間 提供用戶端(手機端)應用程式存取範例
使用Windows Phone Cloud Application Template 透過這套Project Template,可直接支援… Azure Blob, Table, Queue存取 支援Push Notification Single Sign On身分整合驗證
Demo:使用專案範本 建立Windows Phone Cloud Application 存取blob、Table 使用Push Notification 董大偉 David@aRock.com.tw 光岩資訊 技術總監 台灣微軟MSDN講座講師 WAT Project Template.wmv
在WP7中存取blob、Table 使用Push Notification Demo 在WP7中存取blob、Table 使用Push Notification
行動裝置用戶身分驗證需求 確認用戶端身分 計費、試用、權限 避免自行維護帳戶資訊 麻煩、安全性、個資法 這些應用程式 需要多久的時間?
關於Azure ACS Windows Azure Access Control Service 支援WP7(使用WAT) 用以實現Single Sign On 這些應用程式 需要多久的時間?
Demo:使用專案範本 建立Windows Phone Cloud Application 建立AppFabric , 建立NameSpace 使用Windows Azure ACS 董大偉 David@aRock.com.tw 光岩資訊 技術總監 台灣微軟MSDN講座講師 WAT Project Template - 2.ACS.wmv 身分驗證
Demo 使用Windows Azure ACS
關於Azure Mobile Service
何謂Windows Mobile Service 微軟三周前公布的Azure新服務 透過Azure雲端運算技術,提供穩定可靠、立即可用的行動裝置服務 省去開發人員撰寫雲端服務的時間 功能包含: 便利的遠端資料庫存取 身分驗證(authorize users) 推播訊息(Push notifications to users) http://weblogs.asp.net/scottgu/archive/2012/08/28/announcing-windows-azure-mobile-services.aspx 三周前公布
何謂Windows Mobile Service 申請Mobile Services
關於Windows Mobile Service 目前提供Windows 8(Windows Store App)可直接使用的SDK 目前尚未直接提供WP7, WP8…等SDK 但是… 由於採用REST API與JSON架構,因此我們可以…
使用Windows Mobile Service Azure Mobile Service Exposes Data In The Following Format: 1. GET https://[服務名稱].azure-mobile.net/tables/[資料表]/ – 取得所有資料 2. GET https://[服務名稱].azure-mobile.net/tables/[資料表]?$filter – 取得特定資料 3. POST https://[服務名稱].azure-mobile.net/tables/[資料表]/ – 新增一筆資料 4. PATCH https://[服務名稱].azure-mobile.net/tables/[資料表]/編號 – 更新指定編號的資料 5. DELETE https://[服務名稱].azure-mobile.net/tables/[資料表]/編號 –刪除指定編號的資料
使用Windows Mobile Service 會使用到的相關技術 透過Web Client呼叫REST API 透過DataContractJsonSerializer處理JSON序列化
使用Windows Mobile Service 建立資料表的相對應類別,例如: public class TodoItem { public int id { get; set; } [System.Runtime.Serialization.DataMember()] public string text { get; set; } public bool complete { get; set; } } 注意id欄位是必須的
使用Windows Mobile Service 透過DataContractJsonSerializer處理JSON資料 從JSON轉為物件 位於System.Runtime.Serialization public static object JsonToObj(string json, Type type) { try object obj; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)); DataContractJsonSerializer ser = new DataContractJsonSerializer(type); obj = ser.ReadObject(ms); ms.Close(); return obj; } catch (Exception ex) MessageBox.Show(ex.Message + " JSON:" + json); return null;
使用Windows Mobile Service 從物件轉為JSON public static string ObjectToJson(object obj, Type type) { try //Create a stream to serialize the object to. MemoryStream ms = new MemoryStream(); // Serializer the User object to the stream. DataContractJsonSerializer ser = new DataContractJsonSerializer(type); ser.WriteObject(ms, obj); byte[] json = ms.ToArray(); ms.Close(); return Encoding.UTF8.GetString(json, 0, json.Length); } catch (Exception ex) MessageBox.Show(ex.Message); return string.Empty;
使用Windows Mobile Service 使用WebClient呼叫REST API 更新一筆資料 //Update WebClient wc = new WebClient(); wc.Headers["Content-Type"] = "application/x-www-form-urlencoded"; wc.Headers["X-ZUMO-APPLICATION"] = key; wc.UploadStringCompleted += (ss, arg) => { if (arg.Error == null) { aRock.Phone.Dialog.NotifyDialog.ShowToastMessage("OK"); refresh(); } else { MessageBox.Show(arg.Error.Message); }; wc.UploadStringAsync( new Uri("https://DavidTest.azure-mobile.net/tables/TodoItem/" + item.id), "PATCH", JsonHelper.ObjectToJson(item, typeof(TodoItem))); 記得要給Key 透過DataContractJsonSerializer處理序列化
Demo:使用Windows Azure Mobile Service 建立SQL Azure Server & Database 建立Mobile Service, 建立資料表 透過Azure Portal維護資料表 建立WP7用戶端 使用REST API+JSON Parsing 進行資料CRUD 董大偉 David@aRock.com.tw 光岩資訊 技術總監 台灣微軟MSDN講座講師 UsingMobileServiesViaWP7 MobileServiceTest
在WP7使用Windows Azure Mobile Service Demo 在WP7使用Windows Azure Mobile Service WP7_AzureMobileServiceCS
關於 Windows Phone開發的未來
未來WP8的特性與… 以WP7.1方式開發的App,可以相容於WP8的執行環境 除非使用到新的API,否則您的App均可使用WP7.1 SDK進行(繼續)開發 關於WP8的後續相關議題…
Porting to Windows Store App 關於 Porting to Windows Store App
您可能也關心 手上辛苦開發的Windows Phone App,要如何在Win8上使用? 如何同時開發WP7, WP8, Windows Store App? 15:10 ~ 16:20
立即啟動!免費開發人員帳戶!! Windows Store / Windows Azure / Windows Phone 擁有 MSDN 訂閱 「取得代碼」後進行註冊 http://aka.ms/startmsdn 優惠內容: Windows Store / Windows Phone – 啟用後12個月, 完全免費! Windows Azure – 訂閱期間, 每月固定的免費使用量!
Q&A