你好,我是Andy Rich,C++团队的QA。 上周,C++团队在CoPurExx上发布了C++ REST SDK(代号为“CasabrAca”)。 http://casablanca.codeplex.com ). 这篇博客文章将使用C++ REST SDK来连接Windows商店应用程序到Windows Live服务。 本例演示了如何获取有关用户相册的信息,但也可以应用于其他liverestapi。
先决条件
要将Windows应用商店应用程序连接到Live服务,您需要:
- Windows应用商店开发人员帐户(请在此处注册: http://msdn.microsoft.com/en-US/windows ). 请注意,您需要提供一张信用卡才能开立开发人员帐户(MSDN订户有资格获得 一次性12个月开发商账户 .)
- 与Windows开发人员中心中的Windows应用商店应用程序关联的Visual Studio项目。 为了连接到Live,您的应用程序将需要一个真正的商店签名密钥和包标识,因此您必须完成商店提交过程的前几个步骤,并将您的项目与该应用程序相关联,即使您只是在尝试该功能。我在下面概述了“设置应用程序”中所需的步骤。
- 这个 C++静态SDK 对于Visual Studio 2012(快速版或完整版)
设置应用程序
要在Windows开发人员中心的仪表板中创建新应用程序,请单击“提交应用程序”。 (这将开始提交过程,但您的应用程序还不需要准备好提交!) 你将被要求保留一个名字;这可能会在以后更改,所以现在不必担心为你的应用程序找到完美的名称。
接下来,在应用程序的仪表板条目中单击“高级功能”,然后选择“保存” 您希望确保高级功能步骤在仪表板中显示为“完成”。
接下来,您需要将您的visualstudio项目与您在开发人员帐户上创建的应用程序条目相关联。 为此,在visualstudio中右键单击您的项目,然后选择Store->associateanappwiththestore。 系统将提示您登录到开发人员帐户,然后显示您已启动的应用程序列表;选择合适的,单击“下一步”,然后单击“关联”
它是 至关重要的 如果您完成此步骤,如果没有正确的软件包标识和商店签名密钥,Live Services将拒绝您应用程序的所有登录请求。
最后,右键单击您的项目并选择“引用”,然后单击“添加新引用” 选择Windows->Extensions并选中“C++REST Extension SDK for Windows应用商店应用程序”旁边的复选框,然后单击“确定”。 这将为您的项目添加C++ REST SDK的必要的包含/ LIBs。 (如果在对话框中找不到必要的引用,请确保已安装 合适的SDK 然后尝试重新启动Visual Studio。)
登录Live
让我们努力登录Live。 这是通过使用Windows运行时(WinRT)OnlineIdAuthenticator API来实现的,它为用户提供了跨多个应用程序的一致且可信的登录视图。 用户的同意将与您的应用程序一起缓存,因此只有用户第一次在特定计算机上访问您的应用程序时,才会出现“登录/同意”对话框,除非登录过期或用户注销。
在源文件中包括
使用 命名空间 平台::集合; 使用 命名空间 Windows::Security::Authentication::OnlineId; 使用 命名空间 并发性;
此代码将使用OnlineIdAuthenticator将用户登录到Live:
汽车 认证= 裁判 新的 联机身份验证程序 ();
汽车 请求= 裁判 新的 OnlineIdServiceTicketRequest服务请求 ( “wl.signin wl.basic wl.photos” , “授权” );
汽车 请求u vec= 裁判 新的 矢量 < OnlineIdServiceTicketRequest服务请求 ^>();
请求u vec->追加(请求);
创建u任务(auth->AuthenticateUserAsync(请求u vec, 凭证提示类型 :: 需要提示 ))
。然后([]( 用户身份 ^ 识别号 ){
汽车 票= 识别号 ->票证->获取(0);
//令牌是全局std::wstring 令牌=标准: 垫圈 (票证->值->数据()); });
我们首先创建OnlineIdAuthenticator对象,然后创建登录Windows Live的请求。 在本例中,我们请求wl.signin、wl.basic和wl.photos范围。 您可以查看Windows Live作用域的完整列表(以及它们允许您的应用程序访问的内容) 在这里 .
OnlineIdAuthenticator允许您同时提交多个登录请求,但就我们的目的而言,一个登录请求就足够了。 但是,为了匹配AuthenticateUserAsync函数的参数,我们需要在单个元素向量(request vec)中传递请求。
AuthenticateUserAsync可能会接管用户的屏幕以显示登录提示并获得用户的同意,因此这自然是一个异步操作。 在上面的代码中,我们使用PPL任务继续来检查用户同意后的登录票证。 请注意,我们不会处理用户未同意或身份验证失败(例如,由于不正确的应用程序关联)的错误情况。 应该使用基于任务的延续来处理这些情况,以捕获错误并进行适当的处理。 要了解有关使用PPL的更多信息,我建议 这篇文章 .
当用户已登录并同意您的应用程序访问其信息时,将回调继续。 有趣的是 用户身份 返回给您的信息实际上不可用(除非您是“Microsoft应用程序合作伙伴”)。 但是,此时我们关心的唯一属性是UserIdentity中包含的票证集合中的安全令牌。
T成功登录后返回的令牌在后面的步骤中是必需的,因此需要存储在某个地方以便以后访问。 在上述示例中,令牌被存储在全局变量中;在完整的应用程序中,这将更合适地存储在成员变量中,并针对并发访问和竞争条件进行保护。
了解实时REST端点
了解liverest端点在正确使用时返回的内容以及 实时交互SDK 在这里会很有帮助。 要使用交互式SDK,您需要单击页面右上角的小“登录”链接,然后使用Windows Live帐户登录。 对于下面的演练,您应该使用在用户的SkyDrive中存储了一些图片的帐户。
登录后,展开“SkyDrive API”,选择“相册、照片、视频和标签”,然后选择右侧的“休息”。 请求路径将预加载“/me/albums”,这将获得登录用户的相册列表。 如果单击“Run”按钮,交互式SDK将调用liverestapi,并在“Response”部分显示API调用的结果。
liverestapi返回的文本格式为 JSON(JavaScript对象表示法) . 这是一种返回结构化数据的简单web标准格式,许多不同的语言和框架都能够解析这些数据。 Windows运行时(通过Windows::数据::JSON命名空间)和C++ REST API(通过Web::JSON命名空间)都有能力解析JSON到对象层次结构中,这些对象层次结构可以在代码中被检查和操作。 在这个例子中,我们将使用C++ REST API的JSON解析。
通过查看交互式SDK中的响应结构,我们可以了解Live REST API如何返回有关用户相册的信息:
{ //顶层对象
“数据” : [ //数组,每个相册1个元素
{ //对象,数组中的第一个元素
“身份证” : “<文件夹id>” ,
“从” :
{ //包含两个成员的对象:
“姓名” : “<专辑所有者的友好名称>” ,
“身份证” : “<所有者id>”
},
“姓名” : “<专辑的友好名称>” ,
“描述” : “<专辑的友好描述>” ,
“父项id” : “<父文件夹id>” ,
“大小” : 405466,
“评论计数” : 0,
“注释u已启用” : 是的 ,
“计数” : 26,
“链接” : “<指向相册的直接URL>” ,
“类型” :