Windows Phone 雲應用開發實踐(二)
Windows Live SDK
什么是Windows Live SDK?
Windows Live ID SDK包含Windows Live API,使您的應用程序通過MSN連接通行網絡,輕松體驗微軟雲服務,諸如Hotmail、SkyDrive和Windows Live Messenger。
基於Windows Live SDK的"MSN連接"的價值對於開發者而言,能解決登錄難題,提高用戶活躍度;利用SkyDrive接口,零成本打造雲服務;還可以是您的應用程序占據日歷入口;導入用戶好友關系,傳播心情。微軟則通過Windows Live ID打造雲體驗平台,保證用戶跨平台享受同一使用體驗,讓Metro應用功能更豐富,讓Metro與我們的生活更加緊密。

圖 MSN連接
MSN連接支持的平台:Metro應用 (Window 8)、Web、Windows Phone。那么基於Windows Live SDK的"MSN連接"在Windows Phone平台能做什么呢?
- 使用MSN登陸
通過調用SDK的SignInButton,第三方Windows Phone客戶端可以輕松實現MSN賬號登錄功能。

圖 MSN登陸
在用戶登錄后,應用可以輕松獲取用戶的基本信息,包括姓名、頭像、用戶MSN好友信息、Email、生日、工作、性別、地址和電話等信息。應用還可以發布用戶動態信息,該動態會在Windows Phone的人脈(People Hub)以及MSN簽名檔上顯示。

圖 用戶動態信息發布至人脈
- 調用Hotmail接口
通過調用Hotmail接口,Windows Phone應用可以訪問用戶的日歷,實現讀/寫/更新/刪除日歷事件,訂閱公共日歷事件。

圖 天氣通應用將天氣信息顯示在手機屏保日歷上
- 調用SkyDrive接口
通過調用SkyDrive接口,Windows Phone應用可以讀取用戶儲存在SkyDrive上的文件,用戶可以在應用內直接處理他的文件(如給一張照片做后期效果);通過調用SkyDrive接口,Windows Phone應用還可實現數據、文件儲存在用戶的SkyDrive上,從而實現跨系統,跨平台得共享數據;通過調用SkyDrive接口,Windows Phone應用可以實現與用戶的好友共享文件,或者是協同處理文件,眾所周知,SkyDrive非常便於文件的共享和協作。
動手實踐——SkyDrive的雲端相冊
本節的主要內容是使用Windows Live SDK調用SkyDrive接口。在WebBrowser控件中登陸Windows Live,為應用程序獲得授權后,調用SkyDrive API訪問用戶存儲在雲端的圖片。
- 准備工作
配置開發環境
安裝Live Software Development Kit (SDK);
注冊應用
在開發之前請先到https://manage.dev.live.com注冊您的應用。在這個網站中,首先使用Windows Live賬號登陸,登陸結束后,點擊"Create Application",進入創建應用程序的頁面后輸入程序的名稱和默認語言,然后點擊"I accept",就會創建一個client ID和client secret識別應用程序以及使用Live Connect來獲取用戶數據。
特別說明:
如果你的redirect domain是主域名,你仍然可以在程序里使用子域名來做redirect domain。(比如你可以用http://luckyboy.com作為redirect domain來注冊,但是程序里你的回調頁面可以是iam.luckyboy.com)
- OAuth2.0基本原理
OAuth2.0的基本原理是:允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的網站(例如,視頻編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth2.0允許用戶授權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不需要分享他們的訪問許可或他們數據的所有內容。如需要了解更多內容,請瀏覽官方網站http://www.oauth.net/2/。
Live Connect服務提供了JavaScript API和REST API兩種調用方式,分別可以在前台或者后台進行使用。
用戶提示界面說明
當用戶首次使用Live Connect服務登錄到時,Live Connect服務顯示一個是否允許訪問的彈出對話框,這個對話框向用戶說明你的網站需要訪問用戶的哪些信息,若需要個性化這個對話框,請參考以下信息
| 顯示內容 |
屬性 |
| 1.網站logo |
在Basic Information 頁, Application logo image屬性中進行設置 |
| 2.網站域名 |
在API Settings 頁, Redirect Domain屬性中進行設置 |
| 3.網站名稱 |
在Basic Information 頁, Application name 屬性中進行設置 |
| 4.網站使用條款超鏈接 |
在Basic Information 頁, Terms of service URL 屬性中進行設置 |
| 在Basic Information 頁, Privacy URL 屬性中進行設置 |
以下是詳細說明圖片:


圖 詳細說明
實現OAuth2.0驗證的代碼如下:
Project: SkyDrive Photos Sample File: MainPage.xaml.cs
Remove
/// <summary>
/// The URI for the OAuth service's Authorize endpoint.
/// </summary>
private static readonly string OAuthAuthorizeUri = "https://oauth.live.com/authorize";
/// <summary>
/// Build the OAuth URI.
/// </summary>
/// <param name="scopes">The requested scopes.</param>
/// <returns>The OAuth URI.</returns>
private Uri BuildOAuthUri(string[] scopes)
{
List<string> paramList = new List<string>();
paramList.Add("client_id=" + HttpUtility.UrlEncode(MainPage.ClientId));
paramList.Add("scope=" + HttpUtility.UrlEncode(String.Join(" ", scopes)));
paramList.Add("response_type=" + HttpUtility.UrlEncode("token"));
paramList.Add("display=" + HttpUtility.UrlEncode("touch"));
paramList.Add("redirect_uri=" + HttpUtility.UrlEncode(MainPage.RedirectUri));
UriBuilder authorizeUri = new UriBuilder(MainPage.OAuthAuthorizeUri);
authorizeUri.Query = String.Join("&", paramList.ToArray());
return authorizeUri.Uri;
}
/// <summary>
/// Launch the OAuth flow.
/// </summary>
private void LaunchOAuthFlow()
{
this.loadingGrid.Visibility = Visibility.Visible;
this.authorizationBrowser.Navigating += this.OnAuthorizationBrowserNavigating;
this.authorizationBrowser.Navigated += this.OnAuthorizationBrowserNavigated;
this.authorizationBrowser.Navigate(this.BuildOAuthUri(this.scopes));
}
源代碼文件
- UserInfo.cs——表示JSON請求返回的用戶信息數據
- AlbumInfo.cs——表示JSON請求返回的用戶相冊數據
- MainPage.xaml.cs——應用程序的主要邏輯處理
