与C++休眠SDK连接

你好,我是Andy Rich,C++团队的QA。  上周,C++团队在CoPurExx上发布了C++ REST SDK(代号为“CasabrAca”)。 http://casablanca.codeplex.com ).  这篇博客文章将使用C++ REST SDK来连接Windows商店应用程序到Windows Live服务。  本例演示了如何获取有关用户相册的信息,但也可以应用于其他liverestapi。

null

先决条件

要将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>” ,

“类型” :

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享