借助 Live SDK 将单一登录和 SkyDrive 引入您的 Windows 8 应用程序

借助 Live SDK 将单一登录和 SkyDrive 引入您的 Windows 8 应用程序

借助云,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 PreviewVisual 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,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,128)">@"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.source,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图:提供一种方法顺序访问一个聚合对象中的每个元素,而又不想暴露该对象的内部表示。应用:STL标准库迭代器实现、Java集合类型迭代器等模式结构:心得:迭代器模式的目的是在不获知集合对象内部细节的同时能对集合元素进行遍历操作
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。(2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的N
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定义一系列算法,把他们封装起来,并且使他们可以相互替换,使算法可以独立于使用它的客户而变化。应用:排序的比较方法、封装针对类的不同的算法、消除条件判断、寄存器分配算法等。模式结构:心得:对对象(Context)的处理操作可
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个作用于某对象结构中的各元素的操作,它使你在不改变各元素的类的前提下定义作用于这些元素的新操作。应用:作用于编译器语法树的语义分析算法。模式结构:心得:访问者模式是要解决对对象添加新的操作和功能时候,如何尽可能不修改对象的类的一种方
命令模式(Command)命令模式(Command)[Action/Transaction]意图:将一个请求封装为一个对象,从而可用不同的请求对客户参数化。对请求排队或记录请求日志,以及支持可撤消的操作。应用:用户操作日志、撤销恢复操作。模式结构:心得:命令对象的抽象接口(Command)提供的两个
生成器模式(Builder)生成器模式(Builder)意图:将一个对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 应用:编译器词法分析器指导生成抽象语法树、构造迷宫等。模式结构:心得:和工厂模式不同的是,Builder模式需要详细的指导产品的生产。指导者(Director)使用C
设计模式学习心得《设计模式:可复用面向对象软件的基础》一书以更贴近读者思维的角度描述了GOF的23个设计模式。按照书中介绍的每个设计模式的内容,结合网上搜集的资料,我将对设计模式的学习心得总结出来。网络上关于设计模式的资料和文章汗牛充栋,有些文章对设计模式介绍生动形象。但是我相信“一千个读者,一千个
工厂方法模式(Factory Method)工厂方法模式(Factory Method)[Virtual Constructor]意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实力化延迟到子类。应用:多文档应用管理不同类型的文档。模式结构:心得:面对同一继承体系(Produc
单例模式(Singleton)单例模式(Singleton)意图:保证一个类只有一个实例,并提供一个访问它的全局访问点。应用:Session或者控件的唯一示例等。模式结构:心得:单例模式应该是设计模式中最简单的结构了,它的目的很简单,就是保证自身的实例只有一份。实现这种目的的方式有很多,在Java中
装饰者模式(Decorator)装饰者模式(Decorator)[Wrapper]意图:动态的给一个对象添加一些额外的职责,就增加功能来说,比生成子类更为灵活。应用:给GUI组件添加功能等。模式结构:心得:装饰器(Decorator)和被装饰的对象(ConcreteComponent)拥有统一的接口
抽象工厂模式(Abstract Factory)抽象工厂模式(Abstract Factory)[Kit]意图:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。应用:用户界面工具包。模式结构:心得:工厂方法把生产产品的方式封装起来了,但是一个工厂只能生产一类对象,当一个工厂需要生
桥接模式(Bridge)桥接模式(Bridge)[Handle/Body]意图:将抽象部分与它的实现部分分离,使他们都可以独立的变化。应用:不同系统平台的Windows界面。模式结构:心得:用户所见类体系结构(Window派生)提供了一系列用户的高层操作的接口,但是这些接口的实现是基于具体的底层实现
适配器模式(Adapter)适配器模式(Adapter)[Wrapper]意图:将类的一个接口转换成用户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。应用:将图形类接口适配到用户界面组件类中。模式结构:心得:适配器模式一般应用在具有相似接口可复用的条件下。目标接口(Targ
组合模式(Composition)组合模式(Composition)意图:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。应用:组合图形、文件目录、GUI容器等。模式结构:心得: 用户(Client)通过抽象类(Component)提供的公用接口统一
原型模式(Prototype)原型模式(Prototype)意图:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。应用:Java/C#中的Clonable和IClonable接口等。模式结构:心得:原型模式本质上就是对象的拷贝,使用对象拷贝代替对象创建的原因有很多。比如对象的初始化构
什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强烈推荐。原文截图*************************************************************************************************************************原文文本************
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。