每当开发一个应用须要社交分享的应用时,老是内心咯噔一下:到底何时分享能加上QQ和微信?除了WP8.0版本的微信SDK,官方彷佛从未正面发布过适应时代发展的QQ SDK,就连后台,也没有一个能够建立WP应用的入口(其实WP QQ团队很早就已经在开发WP版的QQ SDK,只是网站那边一直没人管上线这事,具体你也懂)。html
吐槽完毕。windows
做为一个长期以来,致力于散播温暖,散播但愿的小清新无公害WP开发者,今天又要给广大WP开发者传播但愿了。博主拿到了非正式版的QQ SDK,而且作了一些封装,仅供学习交流。开始咱们今天的主题”QQ SDK“,如下以Win10 UWP做为例子说明使用方法。api
博主拿到的SDK是散件,本身写了个nuget合成一个神装。因为SDK是C++写的,须要将你的项目设置成x8六、x64或ARM进行调试,这个nuget做用就是实如今你进行架构切换时,在build过程当中自动引用正确的dll。微信
经过nuget下载并安装QQ SDK,连接:https://www.nuget.org/packages/ConnectQQSDK/1.4.0架构
或者在控制台输入PM> Install-Package ConnectQQSDKapp
QQ SDK的做用是使咱们在本身的代码里能将QQ客户端呼起来,并做相应的操做。async
注意:引用完成后,须要先Unload一下项目再从新Reload,或者重启一下VS。学习
到QQ互联官网:http://connect.qq.com/ 建立应用,得到一个AppId网站
QQ SDK使用文件类型关联和协议关联混合模式来进行应用间互调通讯,那么须要进入Package.appxmanifest文件进行相关配置。ui
在<Applications>节点中的<Application>节点下,添加一个<Extensions>节点,分别添加windows.fileTypeAssociation和windows.protocol两个声明:
<Extensions> <uap:Extension Category="windows.fileTypeAssociation"> <uap:FileTypeAssociation Name="test"> <uap:SupportedFileTypes> <uap:FileType ContentType="application/qqsdkconnect">.qc-xxxxxxxxxx</uap:FileType> </uap:SupportedFileTypes> </uap:FileTypeAssociation> </uap:Extension> <uap:Extension Category="windows.protocol"> <uap:Protocol Name="qc-xxxxxxxxxx" /> </uap:Extension> </Extensions>
注意:把其中的xxxxxxxx替换成你本身的AppId。
至于何时经过文件类型,何时经过协议进行互调,咱们在下一讲会具体说明。
在App.cs的OnLaunched和OnActivated方法的适当位置进行初始化,SDK提供一个静态的QQSDK实例进行管理,调用其Initialize方法初始化,传递第3步获取的AppId做为参数:
QQSDK.Instance.Initialize("xxxxxxxxxx");
QQSDK类的ShareToQQ方法用来分享数据到QQ客户端,支持分享到QQ好友、群、讨论组等,如图:
ShareToQQ有两个重载方法:ShareToQQ(ShareToQQDefaultModel model) 和 ShareToQQ(ShareToQQImageModel model),分别表示分享图文消息和分享纯图片消息。
首先看ShareToQQDefaultModel,分享图文消息
public sealed class ShareToQQDefaultModel : __IShareToQQDefaultModelPublicNonVirtuals { public ShareToQQDefaultModel(); public byte[] ImageData { get; set; } public string ImageUrl { get; set; } public ShareToQQKeyType KeyType { get; set; } public string Summary { get; set; } public string TargetUrl { get; set; } public string Title { get; set; } }
字段含义很少解释,注意其中ImageUrl和ImageData,前者用于图片连接数据,后者用于图片流数据,调用时两者不要同时设置。
private async void ShareButton_OnClick(object sender, RoutedEventArgs e) { await QQSDK.Instance.ShareToQQ(new ShareToQQDefaultModel { KeyType = ShareToQQKeyType.Default,
Title = "test title", Summary = "test summary", ImageUrl = "http://ww2.sinaimg.cn/square/b50ea691gw1eu9a1mwyt9j20b408c752.jpg", TargetUrl = "http://news.qq.com/" }); }
再看ShareToQQImageModel,分享纯图片消息
public sealed class ShareToQQImageModel : __IShareToQQImageModelPublicNonVirtuals { public ShareToQQImageModel(); public string ImageLocalPath { get; set; } public ShareToQQKeyType KeyType { get; set; } }
注意:这里ImageLocalPath只能传ApplicationData.Current.LocalFolder下的图片...
private async void ShareButton_OnClick(object sender, RoutedEventArgs e) { await QQSDK.Instance.ShareToQQ(new ShareToQQImagetModel { KeyType = ShareToQQKeyType.Image, ImageLocalPath = "test.jpg" }); }
在没有QQ SDK以前,若是想要获取QQ用户的受权,只能走OAuth去获取受权,本身实现起来其实也是比较费工夫的,相信大部分开发者都有这方面的经验,能够参考官方文档:http://wiki.connect.qq.com/%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96access_token
然而这不是咱们今天要讨论的内容,有了QQ SDK,就能经过QQ客户端来获取受权了。
QQSDK类的Login和Logout能够实现获取受权和终止受权,固然前提是你在QQ互联建立应用时须要申请一下一些Open API的权限,如"get_simple_userinfo", "get_simple_userinfo,get_vip_info", "all"等,更多开放API权限列表请参考官方文档:
http://wiki.connect.qq.com/api%E5%88%97%E8%A1%A8
调用方法以下,Login方法传入一个AuthorizeRequestData对象,且须要指定ApiScope:
private async void LoginButton_OnClick(object sender, RoutedEventArgs e) { await QQSDK.Instance.Login(new AuthorizeRequestData { ApiScope = "get_simple_userinfo" }); }
至于受权结果的回调处理,咱们留待下一讲。
固然,若是受权过时了,能够再调用一下QQSDK类的ReAuth方法刷新Token,这里再也不具体讲了。
QQ SDK还支持调用Open API,再也不须要手动去封装了。QQSDK类提供Request方法来调用Open API,须要传入一个OpenAPIRequestData对象。
public sealed class OpenAPIRequestData : __IOpenAPIRequestDataPublicNonVirtuals { public OpenAPIRequestData(); public string ApiName { get; set; } public HttpMethod Method { get; set; } public string[] Params { get; set; } }
其中ApiName指Open API的名字,更多API请参考官方文档:http://wiki.connect.qq.com/api%E5%88%97%E8%A1%A8
好比获取QQ会员信息:
private async void GetVipInfoButton_OnClick(object sender, RoutedEventArgs e) { var result = await QQSDK.Instance.Request(new OpenAPIRequestData { ApiName = "get_vip_info", Method = HttpMethod.HttpGet });
// ToDo: 处理result }
本文仅用于学习交流,转载请注明出处:http://www.cnblogs.com/zhxilin/p/4661910.html
下一讲,咱们来谈谈如何处理SDK的回调结果:《【Win10 UWP】QQ SDK(二):SDK的回调处理》