借助云,Windows 8 的客户可在多个设备间无缝地开展工作和娱乐活动。通过使用 Microsoft 帐户登录 PC 和利用 SkyDrive 中的免费个人存储(详情请参阅博文借助 SkyDrive 和 Windows 8 将您的应用程序、文件、PC 和设备连接到云),您的应用程序、设置和个人文件将始终与您形影不离。作为一名应用程序开发人员,您可通过与 Metro 风格应用程序中的 Live SDK 集成,进而利用这些云功能。
Live SDK 提供了一组控件和 API,借助这些控件和 API,应用程序可利用 Microsoft 帐户集成单一登录 (SSO),并在 Consumer Preview 中访问来自 SkyDrive、Hotmail 和 Messenger 的信息。相应地,现在市面上还有面向 Windows Phone 的 SDK,该 SDK 也可提供一组类似的功能。
Live SDK 入门
首先,如果您尚未使用过 Live SDK,那么您需要在 PC 中安装 Windows 8 Consumer Preview、Visual Studio 11 试用版,以及 Live SDK 开发人员预览版。其次,您需要访问 Live Connect 应用程序管理站点来配置 Metro 风格应用程序,以访问我们的云服务。
配置完应用程序后,您需要为 Live SDK 添加一个引用。Live SDK 可用于 C#、JavaScript 和 Visual Basic 中的开发。Live SDK 当前并不支持 C++,但是您可下载完整代码示例 SkypadCpp,该示例中显示了从 C++ 应用程序中访问 SkyDrive 的方法。
如需为您的项目添加 Live SDK,请右键单击 [Project](项目),并选择 [Add Reference](添加引用)> [Extension SDKs](扩展 SDK)> Live SDK 的条目。
在 JavaScript 应用程序中,您只需将以下脚本引用添加至 default.html:
<script type="text/javascript" src="ms-appx:///LiveSDKHTML//js/wl.js"></script>
在 C# 中,添加以下引用:
using Microsoft.Live;
而在 Visual Basic 中,所需添加的是导入语句:
Imports Microsoft.Live
单一登录和简单登录悖论
应用程序与 Live SDK 集成的一个关键优势是其可获得利用 Microsoft 帐户进行单一登录 (SSO) 的功能。而应用程序所面临的一项关键难题是用户并不喜欢系统询问其是否需要注册新帐户,或系统在用户登录应用程序或网站时对其重复询问。但是由于现在应用程序了解用户信息,并可经过个性化设置以适应用户的特定需求和行为,因此当用户现在登录某应用程序或网站时,用户可获得经改进的用户体验。用户不喜欢执行的某项任务,但该任务又可显著改进其用户体验的根本矛盾被成为“简单登录悖论”。
Microsoft 的 Metro 风格应用程序和网站借助 Windows 8 用户利用其 Microsoft 帐户登录 PC 的事实而在 Windows 8 中避免了这一悖论。Microsoft 的应用程序(如 People、Mail 和 Messaging)和 Microsoft 的网站(如 Hotmail)都利用了 Microsoft 帐户,因此用户在登录其 PC 后无需再次登录这些应用程序和网站。这将为用户提供一个“零单击的登录体验”。
借助 Live SDK,您可类似地使用 Microsoft 帐户获得零单击登录应用程序和网站的体验。但是请记住,用户需要授予应用程序权限,以一次性访问其身份标识。
即使您已经拥有一个用户帐户系统,您仍可将您的身份标识系统连接至 Microsoft 帐户,从而为您的用户创建无缝的登录体验。如果您拥有一个 Metro 风格的应用程序或网站,那么用户的登录体验将更加卓越,这是因为当用户连接至您的应用程序或网站时,只要他们使用 Microsoft 帐户登录了其 PC,那么他们就无需再次登录应用程序和网站。
Live SDK 的一条原则是无论您是在构建一个 Web 应用程序或是一个 Windows 8 应用程序,您都需要编写相同的代码。也就是说,在您使用 JavaScript 编写的 Metro 风格应用程序和使用 Live SDK 的网站中,用户用于登录的 JavaScript 代码和用于访问配置文件信息的 JavaScript 代码将完全一致。下面的代码段只需稍加修改即可在 Web 或 Metro 风格应用程序中运行。Web 和 Metro 风格应用程序代码的区别在于 WL.init 调用需要在 Web 中指定一个客户端 ID,而在 Windows 8 中,该值将自动从操作系统所提供的当前应用程序的标识符中获取。
WL.init(); WL.getLoginStatus().then(function (response) { onSessionChange(response); }); function onSessionChange(response) { var session = WL.getSession(); if (!session) { WL.Event.subscribe("auth.login", onLoginComplete); WL.ui({ name: "signin", element: "signinbutton", scope: ["wl.signin", "wl.skydrive"], }); } else { greetUser(); } } function onLoginComplete() { var session = WL.getSession(); if (!session.error) { greetUser(); } }; function greetUser() { WL.api({ path: "/me", method: "get" } ).then( function (result) { document.getElementById("meName").innerText = "Welcome, " + result.name; getUserPicture (); });; }; function getUserPicture() { var session = WL.getSession(); var LiveConnectAPIUrl = "https://apis.live.net/v5.0"; document.getElementById("meImg").src = LiveConnectAPIUrl + "/me/picture?return_ssl_resources=true&access_token=" + session.access_token; document.getElementById("meImg").style.visibility = "visible"; }; ;
该代码示例将检查用户当前是否使用 Microsoft 帐户登录,如果用户已登录,系统则将欢迎该用户。在 Windows 8 中,该代码将检查用户是否登录 PC,而在 Web 中,该代码将检查用户是否登录了任何支持 Microsoft 帐户的网站(如 Hotmail 或 SkyDrive)。如果用户未登录,则该示例将创建一个登录按钮,提示用户授权应用程序登录 (WL.signin) 并读取对其 SkyDrive 的访问权限 (WL.skydrive)。当用户单击该按钮时,如果用户尚未使用 Microsoft 帐户登录 PC,且用户必须同意应用程序访问其个人信息时,则系统将提示用户登录。待信息确认后,greetUser() 和 getUserPicture() 方法将让应用程序访问用户的名称,并显示图片。
正如您可看到的,与 Live SDK 集成可让没有用户帐户系统的应用程序轻松地与 Microsoft 帐户无缝集成。此外,自身拥有身份标识系统的应用程序也可使用从用户的 Microsoft 帐户获取的信息而轻松启动登录进程。
利用 SkyDrive 和 Hotmail 将个人云引入您的应用程序
在 Windows 8 中,用户可使用 SkyDrive 和 People Metro 风格应用程序在 SkyDrive 中与其文件交互,或在 Hotmail 中与其联系人互动。这两个应用程序通过充当数据提供者,能以一种松散耦���的方式让其他 Metro 风格应用程序与它们轻松集成。
SkyDrive Metro 风格应用程序将充当文件选择器的提供者,也就是说,只要用户安装了 SkyDrive Metro 风格应用程序,那么使用文件选取器的所有应用程序同时将使用 SkyDrive 来作为保存或打开文件的位置。类似地,People 应用程序是联系人选择器的提供者,其可充当需要选择一个或多个用户联系人的应用程序的源。
通过选择器获取数据是一次性访问云中用户数据的方式,您无需在应用程序中与云数据深度集成。在其他情况下,例如在您的应用程序在用户的 SkyDrive 中某个特定类型的所有文件中提供了一项自定义的体验时,则需要与 Live SDK 集成。
正如 Live SDK JavaScript 可在网站或使用 JavaScript 编写的 Windows Metro 风格应用程序中运行一样,相同的规则同样适用于使用 XAML 编写并面向 Windows Phone 和 Windows 8 的应用程序。以下代码段几乎无需修改即可在上述两个平台中运行,除了两项关键的差别。第一项差别与 JavaScript 示例相同,在 Windows Phone 中,您必须为版本代码指定客户端 ID,而在 Windows 8 中,客户端 ID 将自动确定。其次,为在 Windows Phone 上创建异步的方法,您必须在 Windows Phone 上使用 Visual Studio 异步 CTP。
XAML 中的登录按钮
<Controls:SignInButton x:Name="btnSignIn" Content="SignInButton" HorizontalAlignment="Right" Height="46" Margin="-1,0,6,0" Width="157" Scopes="wl.signin wl.skydrive" SessionChanged="btnSignIn_SessionChanged" Visibility="Collapsed" />
C# 代码隐藏
private void btnSignIn_SessionChanged(object sender, Microsoft.Live.Controls.LiveConnectSessionChangedEventArgs e) { if (e.Status == LiveConnectSessionStatus.Connected) { App.Session = e.Session; LoadPhotos(); }else { btnSignIn.Visibility = Windows.UI.Xaml.Visibility.Visible; } } internal async void LoadPhotos () { LiveConnectClient client = new LiveConnectClient(App.Session); LiveOperationResult albumOperationResult = await client.Get("me/albums"); dynamic albumResult = albumOperationResult.Result; foreach (dynamic album in albumResult.data) { var group = new SkyDriveAlbum(album.id, album.name, album.name, @"ms- appx:///Assets/DarkGray.png", album.description); LiveOperationResult pictureOperationResult = await client.Get(album.id + "/files"); dynamic pictureResult = pictureOperationResult.Result; foreach (dynamic picture in pictureResult.data) { var pictureItem = new SkyDriveFileItem(picture.id, picture.name, picture.name, picture.source, picture.description, picture.description, group); group.Items.Add(pictureItem); } this.ItemGroups.Add(group); } }
该代码段创建了登录按钮,而且如果用户授予应用程序访问其数据的权限,那么该应用程序将检索 SkyDrive 中用户相册的元数据。您可编写类似的代码来访问用户 Hotmail 内的联系人和日历。
代码示例
您可前往 GitHub 中的 Live SDK 示例库下载本篇博文中的完整代码。该代码示例库同时包含从其他多个平台与 Live SDK 交互的代码示例。
后续步骤
我已经向您展示了应用程序将如何使用 Live SDK,来与所使用的技术与 Microsoft 自有 Metro 风格应用程序所使用的技术相同的云进行无缝集成。但是在您的应用程序内集成 Live SDK 这一领域之中仍有大量潜力等待开发。除了改进应用程序的注册和登录体验以外,您还可:
- 构建利用 SkyDrive 中免费存储的应用程序,来存储或访问用户在应用程序内创建的内容。
- 通过向用户的日历中添加活动,吸引他们返回您的应用程序和网站,从而保持用户对您应用程序的兴趣。
- 查找用户 Hotmail 联系人中同样使用您应用程序的用户
- 借助 Windows Live Messenger 网络,构建实时共享体验
欲了解有关 Live SDK 的更多信息,您可查阅我们的文档,下载 Live SDK,或在我们的论坛中提问。
--Live Connect 平台高级项目经理主管 Dare Obasanjo