Live Connect可以让各种客户端访问Live账号、获取好友列表、访问One Drive的文件等,官方地址在此:http://msdn.microsoft.com/zh-cn/live/ff519582

贴几个有用的地址,实在是太难找了:

Live SDK下载:http://msdn.microsoft.com/zh-CN/live/ff621310

应用管理地址:https://account.live.com/developers/applications/index

Github上的代码:https://github.com/liveservices/,https://github.com/liveservices/LiveSDK

MSDN代码示例:http://code.msdn.microsoft.com/SkyDrive-Photo-API-sample-f06778ae

作用域和权限说明,感觉这个是比较重要的:http://msdn.microsoft.com/zh-cn/library/live/hh243646.aspx

在Windows Phone中使用的代码示例:http://msdn.microsoft.com/zh-cn/library/live/hh826550.aspx

一、使用前的准备

对于Windows Phone应用来说,首先需要在应用管理添加应用。URL貌似不填也没关系。需要注意的是,在API设置里一定,“移动或桌面客户端应用”一定要选择“是”,才能使用OAuth2.0验证流程。根域、重定向URL根据需要填写。我需要的只是获取用户身份,访问One Drive文件,因此没填。

二、使用方式

基本上使用有两种方式,SDK里提供了现成的登陆控件,可以直接用,如果不用这个控件的话也可以自己写登陆过程。

使用控件的方式可参考http://msdn.microsoft.com/zh-cn/library/live/hh826550.aspx的代码示例,拖一个SignInButton进来,设置好SessionChanged事件就可以了,不需要管Click事件,点击的时候控件自己会调用相应的处理程序。

如果自己写的话,可以采用这里的方式:http://lancelarsen.com/persisting-skydrive-login-on-windows-phone-8-via-livesdk/ 主要代码如下:

  1. private static readonly string[] _scopes =
  2. new[] {
  3. "wl.signin",
  4. "wl.basic" };
  5.  
  6. private LiveConnectClient _connection;
  7. private LiveLoginResult _login;
  8.  
  9. public LiveLogin()
  10. {
  11. this.Loaded += this.OnLoaded;
  12. }
  13.  
  14. private async void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
  15. {
  16. //----------------------------------------------------------------------
  17. // Login to skydrive
  18. //----------------------------------------------------------------------
  19. await SkydriveLogin();
  20. }
  21.  
  22. private async Task SkydriveLogin()
  23. {
  24. try
  25. {
  26. //----------------------------------------------------------------------
  27. // Initialize our auth client with the client Id for our specific application
  28. //----------------------------------------------------------------------
  29. LiveAuthClient authClient = new LiveAuthClient("**your client id here**");
  30.  
  31. //----------------------------------------------------------------------
  32. // Using InitializeAsync we can check to see if we already have an connected session
  33. //----------------------------------------------------------------------
  34. _login = await authClient.InitializeAsync(_scopes);
  35.  
  36. //----------------------------------------------------------------------
  37. // If not connected, bring up the login screen on the device
  38. //----------------------------------------------------------------------
  39. if (_login.Status != LiveConnectSessionStatus.Connected)
  40. {
  41. _login = await authClient.LoginAsync(_scopes);
  42. }
  43.  
  44. //----------------------------------------------------------------------
  45. // Initialize our connection client with our login result
  46. //----------------------------------------------------------------------
  47. _connection = new LiveConnectClient(_login.Session);
  48. }
  49. catch (Exception ex)
  50. {
  51. //TODO: Add connection specific exception handling
  52. }
  53. }

注意一下作用域与权限,一般来说wl.signin wl.basic这两个是必须的,我在第一次用的时候发现即使用户登录了,下次打开应用还需要再次点击授权一次,很麻烦,后来发现必须要加上wl.offline_access这个作用域,下次登陆就默认是登陆状态了。

三、参考文章

http://social.msdn.microsoft.com/Forums/live/en-US/6df1f31d-a22c-469c-b9f4-5c79e0882701/persisting-session-on-windows-phone?forum=messengerconnect

http://igrali.com/2012/12/11/live-connect-sdk-for-windows-phone-8authenticating-and-basic-info/

http://stackoverflow.com/questions/10946629/wp7-how-to-store-liveconnectsession-during-tombstoning

http://stackoverflow.com/questions/13212120/windows-phone-live-sdk-api-get-new-session-object-after-restarting-the-app

四、实践

我的目的是,用户可以不必登陆即可浏览,但如果要发布评论的话必须登陆Live账号,用户登录一次后,下次打开应用应该就可以直接获取用户信息而不必再次登陆了。

首先在App.xaml.cs里添加一个静态变量,用来保存当前Live连接,也可以直接保存获取到的用户信息

  1. /// <summary>
  2. /// live client
  3. /// </summary>
  4. public static LiveConnectClient CurrentLiveConnectClient { get; set; }

在程序运行时先看看当前的连接状态,如果已经登陆过了,则设置当前的Live连接,否则就什么也不用做了,等需要用户登录操作的时候再提示:

  1. try
  2. {
  3. string[] _scopes = new string[] { "wl.signin", "wl.basic", "wl.offline_access", "wl.skydrive", "wl.skydrive_update" };
  4. LiveAuthClient authClient = new LiveAuthClient("your client id");
  5. LiveLoginResult _login = await authClient.InitializeAsync(_scopes);
  6. #region 如果要强制用户为登陆状态则使用以下代码
  7. //if (_login.Status != LiveConnectSessionStatus.Connected)
  8. //{
  9. // _login = await authClient.LoginAsync(_scopes);
  10. //}
  11. //App.CurrentLiveConnectClient = new LiveConnectClient(_login.Session);
  12. #endregion
  13. if(_login.Status == LiveConnectSessionStatus.Connected)
  14. {
  15. //如果为登陆状态 则设置LiveConnectClient供以后调用 否则就等到需要用户登录的时候再提示登陆
  16. App.CurrentLiveConnectClient = new LiveConnectClient(_login.Session);
  17. }
  18. }
  19. catch (Exception ex)
  20. {
  21. System.Diagnostics.Debug.WriteLine(ex.Message);
  22. }

然后在需要用户登录操作的地方,放上一个登陆按钮,设置SessionChanged事件

  1. private async void btnSignin_SessionChanged(object sender, LiveConnectSessionChangedEventArgs e)
  2. {
  3. if (e.Status == LiveConnectSessionStatus.Connected)
  4. {
  5. if (App.CurrentLiveConnectClient == null)
  6. {
  7. App.CurrentLiveConnectClient = new LiveConnectClient(e.Session);
  8. }
  9. LiveOperationResult operationResult = await App.CurrentLiveConnectClient.GetAsync("me");
  10. try
  11. {
  12. dynamic meResult = operationResult.Result;
  13. if (meResult.first_name != null &&
  14. meResult.last_name != null)
  15. {
  16. infoTextBlock.Text = "Hello " +
  17. meResult.first_name + " " +
  18. meResult.last_name + "!";
  19. }
  20. else
  21. {
  22. infoTextBlock.Text = "Hello, signed-in user!";
  23. }
  24. }
  25. catch (LiveConnectException exception)
  26. {
  27. this.infoTextBlock.Text = "Error calling API: " +
  28. exception.Message;
  29. }
  30. }
  31. else
  32. {
  33. infoTextBlock.Text = "Not signed in.";
  34. }
  35. }

我这里保存的是LiveConnectClient,貌似直接保存用户信息更方便一些,随便了。等写完这个文章再改。

还可以在VM里设置评论框和登陆区域的显示方式,比如绑定到某个属性上,如果登陆了则显示评论框,没登陆显示登陆按钮。

在Windows Phone 8中使用Live Connect并保持登陆状态的更多相关文章

  1. ASP.NET 在 Windows Azure 环境中使用基于 SQLServer 的 Session

    Session 嘛,占一点儿服务器资源,但是总归比 ViewState 和 Cookie 安全点儿,所以还是要用的. Windows Azure 环境中的 Web 服务器经由负载均衡调度,根本无法保证 ...

  2. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  3. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  4. Windows 商店应用中使用 SharePoint REST API

    前面一篇我们介绍了 Office 365 REST API 的官方工具的使用,本篇我们来看一下 SharePoint REST API 本身的描述.结构和使用方法,以及一些使用经验. 首先来看看Sha ...

  5. Windows 商店应用中使用 Office 365 API Tools

    本篇我们介绍一个API 工具,用于在 Windows Store App 中使用 Office 365 API. 首先来说一下本文的背景: 使用 SharePoint 做过开发的同学们应该都知道,Sh ...

  6. 【转】深入Windows内核——C++中的消息机制

    上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图  Win32 ...

  7. 将自己写的windows服务加入到windows集群中

    最近发现windows集群能进行很多自定义,比如在集群中加入自己编写的服务. 能自定义的可不少,截个图: 本次演示中,只想用“通用服务”这个类型. 先列下步骤 编写一个记录时间的Windows服务,这 ...

  8. Windows 2012 R2中安装SharePoint 2013 sp1参考

    之前介绍过在window 2012中安装SharePoint 2013,这次,借着SharePoint 2013 sp1补丁发布之际,介绍下在window 2012 r2中安装SharePoint 2 ...

  9. 在Windows Server 2012 中安装 .NET 3.5 Framework

    问题 如今,仍然有许多程序和应用需要依靠.NET 3.5 framework 来运行.在Windows Server 2012中,微软提供了.NET 3.5 和.NET 4.5的安装选项以为你的应用程 ...

随机推荐

  1. 我YY的一个移动应用运营模式

    尽管自己也还是刚刚毕业不久的前端新人,但网上也不乏一些案例告诉我们有志不在年高,很多优秀的同龄人已经有了不错的成就,所以在切页面写onclick之余也在进行一些思考,前端程序员的出路到底在哪里? 一. ...

  2. Unity3D热更新全书-何谓热更新,为何热更新,如何热更新

    首先来赞叹一下中文,何谓为何如何,写完才发现这三个词是如此的有规律. 为何赞叹中文?因为这是一篇针对新手程序员的文字,是一节语文课. 然后来做一下说文解字,也就是 何谓热更新 热更新,每个程序员一听就 ...

  3. RSS与公众号

    这次怀念下曾经火热的RSS.RSS是我很喜欢的一种看信息学习的方式,但是这项技术随着谷歌reader产品的停止已经陨落了.之后再无给力的客户端,无法让人愉悦的使用.我也曾尝试用鲜果,有道等国内产品,由 ...

  4. EF架构~充血模型设置不被持久化的属性

    回到目录 在Poco实体中,一般只有属性没有方法,这在软件设计中称为贫血模型,而在DDD领域驱动设计中,比较提倡充血模型,即你的Poco实体中,即有属性,也有操作属性的方法,注意这里说的是操作属性的方 ...

  5. Mysql 事件(定时任务)

    mysql 创建任务(事件) 1.检查数据库事件是否开启,如果 event_scheduler 等于 NO表示开启 SELECT @@event_scheduler; SHOW VARIABLES L ...

  6. ToString()的各种用法(大全)

    常用例子: string str = ""; str = .ToString("N"); //生成 12,3456.00 str = .ToString(&qu ...

  7. Asp.Net回车键触发Button的OnClick事件解决方案

    在aspx页面有textbox文本框,还有三个button按钮.启用textbox的TextChanged事件和button的click事件. 问题: 现在在textbox文本框输入完数据按“回车”后 ...

  8. 邻接表无向图(二)之 C++详解

    本章是通过C++实现邻接表无向图. 目录 1. 邻接表无向图的介绍 2. 邻接表无向图的代码说明 3. 邻接表无向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywa ...

  9. ios见习之-UISearchbar+tableview实现自动搜索自带提示

    当做搜索时常常希望能在输入的时候出现搜索关键字,如下效果

  10. VS2013正则表达式应用示例

    VS2013正则表达式语法 在查找替换对话框中查看 VS2013语法可在查找替换对话框中查看,具体过程如下: 通过编辑->查找和替换->在文件中替换或者相应快捷键(Ctrl+Shift+H ...