尽管一个人拥有多个设备已是大势所趋,但许多人仍将他们的所有重要文件存储在一台 PC 或存储设备上,并且不能从他们的其他设备访问这些文件。这些文件与一个“位置”关联,该位置可以是台式 PC、便携式计算机或 USB Key。如果没有该位置的访问权限,您将无法访问您的文档或照片。不仅访问文件会非常困难(有时甚至根本不可能),与不同网络上的其他人共享文件也同样棘手。
现在,云的出现使人们可以从几乎任何位置访问其内容(并且非常方便!)。文件存放在单个位置,可从世界上任意位置中任何连接到 Internet 的设备进行访问。通过将文件的单个副本放置在云中,共享照片和实时就文档开展 协作也变得更加轻松。但是,云尚未成为访问内容的主流用法。
在 Build 大会的开幕致辞中,Chris Jones 谈到了每个 Windows 8 客户如何获得 SkyDrive:每个人都拥有一个云端,可以在那里集中存储个人的重要文件,并且可即时访问和随时共享这些文件。大会中有些发言介 绍了 Windows 8 开发人员如何通过 Live Connect 和 Live SDK 为其应用程序提供云支持。当应用程序与云结合使用时,Metro 风格应用程序就可以使用 Live 云通过 Windows Live ID 启用单一登录,并在用户允许的情况下访问 SkyDrive 上的文档、 照片和视频等个人数据。
如果您正考虑为 Windows 8 开发 Metro 风格的应用程序,本博文将向您演示如何启用单一登录并访问 SkyDrive 上的用户数据,从而使您的 Metro 风格应用程序更加个性化 – 当然是在用户同意的情况下。
将应用程序连接到 Live 云
作为一名开发人员,当您准备构建世界上的下一个优秀应用程序时,无论在哪个平台上,都会重复遇到两类问题:
- 为用户启用注册和登录功能。用户不喜欢被迫登录到网站和应用程序,而开发人员知道用户登录后,对其应用程序的参与度和忠诚度会增加。登录功能使您能够对用户的体验进行个性化设置,并让您的应用程序记住 用户的数据和自定义项。
- 轻松地将用户的内容纳入您的应用程序以增强您的体验。当您考虑到用户将其照片分散在各种不同的设备和云中时,要求用户设置个人资料图片这类看起来简单的任务也会瞬间变得复杂起来。
在 Windows 8 中,我们为我们自己的应用程序(如“照片”和“邮件”)解决了这两个问题,而且您的 Metro 风格应用程序也能够使用该同一平台和技术。具体而言,我们是通过如下方式解决上述问题的:
- 用户基于云的标识现在是操作系统的一项基本要素,获得用户的单一登录许可的应用程序和网站普遍可以访问该标识。这意味着,您的应用程序可以继承用户及其标识的已登录状态,因此您不必担心会出现单独的身份验证过 程。这对于方法 2 的实现尤其重要。
- 我们允许使用行业标准协议的应用程序访问 Live 云中的用户内容,这些协议包括:用于身份验证和授权的 OAuth,作为在访问 SkyDrive 和 Hotmail 时所返回数据的有效负载的 JSON,以及用于实现与 Windows Live Messenger 的互操作性的 XMPP。此外,我们还提供了 Windows 8 开发人员预览版的 Live SDK(通过与 Visual Studio 11 Express 集成),以使 WinRT 的开发更轻松。
用户首次将您的应用程序连接到其 Windows Live ID 后,在使用 Windows Live ID 登录的任何 Windows 8 PC 上,该用户都将始终拥有无缝的单一登录体验。这同样适用于您的网站,如果他们使用 Windows Live ID 登录到其 PC 或者登录到支持 Windows Live ID 的任何网站(如 Hotmail 或 SkyDrive),他们也将获得单一登录体验。
通过 Windows Live ID 使用单一登录和将 SkyDrive 内容集成到 Metro 风格应用程序的最简单方法是利用 Live SDK。
这并不意味着您的应用程序需要使用其中任一服务—是否使用它们完全由开发人员决定。不要求 Windows 8 应用程序使用 Live ID 登录或使用任何基于云的特定存储。这些只是提供给应用程序开发人员的服务,供其选择 使用。
在应用程序中使用 Live SDK
首先,如果您尚未在 PC 上安装 Windows 8 开发人员预览版和 Live SDK 开发人员预览版,则需要先安装它们。这还 将安装 Microsoft Visual Studio 11 Express for Windows 开发人员预览版。其次,您需要访问 Windows Push Notifications and Live Connect 应用程序管理网站以配置您的 Metro 风格应用程序访问 Live 云。按照网站上的步骤操作,注册您的应用程序以使用 Live Connect。
将应用程序配置为使用 Live Connect 后,需要添加对 Live SDK 的引用。Live SDK 可采用 C#、JavaScript 和 VB 语言开发。您可以通过以下方法将其添加到您的项目中:右键单击相关项目并依次选择“添加 引用”和 [Extension SDKs](扩展 SDK),然后从列表中选择 Live SDK 对应的条目,如下所示:
在 JavaScript 应用程序,您只需要添加对 Default.html 的以下脚本引用:
<script src="ms-wwa:///LiveSDKHTML.5.0/js/wl.js"
></script>
在 C# 中,您应该添加以下引用才能在代码中利用 Live SDK:
using Microsoft.Live;
在 VB 中,只需使用以下导入语句:
Imports Microsoft.Live
这只是在为 Windows 8 构建 Metro 风格应用程序时我们如何支持您采用所选语言进行编程的一个很好的示例。
在 Metro 风格应用程序中使用 Windows Live ID
为了在应用程序中利用单一登录 (SSO) 功能,您需要在应用程序中的某个位置放置一个登录按钮。如果用户已使用 Windows Live ID 登录到 PC 中,当用户单击该登录按钮时,他们会自动登录;否则系统会要求他们登 录。之后,会要求用户同意您的应用程序访问他们的数据,例如他们的 SkyDrive 照片。您只需添加登录按钮,系统会自动为您处理此工作流程。请注意,您的客户仍需要确认是否登录您的应用程序,而不是自动登录,这是一个重要 的设计考虑事项。
下面是登录按钮的示例 HTML 代码(注意,这只是一个 DIV,需要进一步配置)。
<div id="signinbutton" style="width: 251px; margin-left: auto; margin-top: 40%; height: 64px; top: 0px;"></div>
向页面中添加登录按钮后,必须挂接该按钮,因为示例 HTML 所做的只是在该页面上为其分配空间。我们需要使用您的应用程序所需的作用域配置该登录按钮。作用域定义应用程序有权访问的内容以及用户必须同意 提供的内容。为了访问 SkyDrive 数据,您的应用程序需要使用下面两个作用域:
- wl.signin - 该作用域允许自动登录到您的应用程序。
- wl.skydrive - 该作用域授予对用户的 SkyDrive 的专辑和照片的访问权限(注意:如果您计划向 SkyDrive 中上载内容,您的应用程序应使用 wl.skydrive_update)。
下面是用于初始化的示例 JavaScript 代码,假设您已经在页面上创建了 ID 为“signinbutton”的登录按钮:
function init() { WL.init(); WL.ui({ name: "signin", element: "signinbutton", scope: ["wl.signin", "wl.skydrive"], }); }
下面是用于处理登录的示例 JavaScript 代码:
WL.Event.subscribe("auth.login", onLoginComplete); function onLoginComplete() { var session = WL.getSession(); if (!session.error) { signedInUser(); } }
当用户单击登录按钮时,系统会征询他们的同意以允许您的应用程序访问他们的数据。如上所述,如果用户使用 Windows Live ID 登录到 PC,则单一登录将会生效,用户无需再次登录。而是会直接转到此征询同意屏幕:
从您的应用程序访问 SkyDrive 内容
用户为您的应用程序授予对其数据的访问权限后,系统会向您的应用程序返回 OAuth 2.0 访问令牌,然后应用程序可使用这些令牌对 Live 云进行 RESTful API 调用。下面是 JavaScript 中用于访问照片的代码 的内容:
function downloadPicture(folderId) { var path = folderId + "/files" // Submit request WL.api({ path: path, method: "GET" }, onEnumerateFolderComplete) };
通过上述大量调用,应用程序可以将 SkyDrive 内容嵌入到其体验中,例如 PowerPoint 幻灯片、视频、Excel 电子表格或者只是一些简单的照片,如下面的示例应用程序所示。
如您所见,将单一登录和 SkyDrive 中的用户数据集成到应用程序中只需要使用 Live SDK 编写几行代码即可。您的应用程序会更加个性化,并且可以充分利用云中的用户照片或文档。可从此处下载本博文中显示的示例应用程序的完整源代码。
有关使用 Live SDK 在应用程序中启用单一登录并利用 SkyDrive API 的详细信息,请观看 BUILD 大会上 Dare Obasanjo 的发言使用 Live 服务增强应用程序功能和 Steve Gordon 的发言 SkyDrive API 的完整开发人员指南。还可以通过访问 http://dev.live.com 并下载 Live SDK 开发人员预 览版来了解更多信息。