【Win10 UWP】QQ SDK(一):SDK基本使用方法
每当开发一个应用需要社交分享的应用时,总是心里咯噔一下:到底什么时候分享能加上QQ和微信?除了WP8.0版本的微信SDK,官方似乎从未正面发布过适应时代发展的QQ SDK,就连后台,也没有一个可以创建WP应用的入口(其实WP QQ团队很早就已经在开发WP版的QQ SDK,只是网站那边一直没人管上线这事,具体你也懂)。
吐槽完毕。
作为一个长期以来,致力于散播温暖,散播希望的小清新无公害WP开发者,今天又要给广大WP开发者传播希望了。博主拿到了非正式版的QQ SDK,并且做了一些封装,仅供学习交流。开始我们今天的主题”QQ SDK“,以下以Win10 UWP作为例子说明使用方法。
1. 安装ConnectQQ SDK
博主拿到的SDK是散件,自己写了个nuget合成一个神装。由于SDK是C++写的,需要将你的项目设置成x86、x64或ARM进行调试,这个nuget作用就是实现在你进行架构切换时,在build过程中自动引用正确的dll。
通过nuget下载并安装QQ SDK,链接:https://www.nuget.org/packages/ConnectQQSDK/1.4.0
或者在控制台输入PM> Install-Package ConnectQQSDK
QQ SDK的作用是使我们在自己的代码里能将QQ客户端呼起来,并作相应的操作。
注意:引用完成后,需要先Unload一下项目再重新Reload,或者重启一下VS。
2. 申请QQ互联应用Id
到QQ互联官网:http://connect.qq.com/ 创建应用,获得一个AppId
3. 配置Package.appxmanifest文件
QQ SDK使用文件类型关联和协议关联混合模式来进行应用间互调通信,那么需要进入Package.appxmanifest文件进行相关配置。
在<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。
至于什么时候通过文件类型,什么时候通过协议进行互调,我们在下一讲会具体说明。
4. 初始化SDK
在App.cs的OnLaunched和OnActivated方法的适当位置进行初始化,SDK提供一个静态的QQSDK实例进行管理,调用其Initialize方法初始化,传递第3步获取的AppId作为参数:
QQSDK.Instance.Initialize("xxxxxxxxxx");
5. 调用SDK的分享方法
(1) 分享到QQ
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"
});
}
(2) 登录授权
在没有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,这里不再具体讲了。
(3) 调用Open API
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的回调处理》
【Win10 UWP】QQ SDK(一):SDK基本使用方法的更多相关文章
- 【Win10 UWP】QQ SDK(二):SDK的回调处理
上一讲,我们介绍了QQ SDK的使用方法,请看<[Win10 UWP]QQ SDK(一):SDK基本使用方法> 一. 回调的基本形式 从前面的介绍中我们知道,我们的应用和QQ客户端之间需要 ...
- 【Win10 UWP】微信SDK基本使用方法和基本原理
上回讲到,作为一个长期散播温暖,散播希望的小清新无公害WP开发者,继QQ SDK之后,又把UWP微信SDK这茬了结了,仅供学习交流. 1.安装微信SDK for UWP 微信官方此前明确说明短时间内暂 ...
- QQ登录-第三方SDK的接入总结(搜索 qq互联)
由于项目的需要,使用了[QQ登录]SDK 的相关功能! 1.集成[QQ登录]SDK [QQ登录]SDK下载地址: http://wiki.open.qq.com/wiki/website/SD ...
- 分享QQ第三方登陆SDK
主要是考虑到QQ的PHP SDK写的真是太烂了,纯属是普及API知识,而不是到手就可以部署的类库..反正自己都写了一个了,就拿出来分享下.. 什么也不多说,直接上代码. Qq_sdk.php < ...
- QQ登录-第三方SDK的接入总结
由于项目的需要,使用了[QQ登录]SDK 的相关功能! 1.集成[QQ登录]SDK [QQ登录]SDK下载地址: http://wiki.open.qq.com/wiki/website/SD ...
- Win10 UWP版《芒果TV》v2.4.0直播超女,芒果台综艺一网打尽
Win10 UWP版<芒果TV>直播超女,芒果台综艺一网打尽 Win10版UWP<芒果TV>自2015年9月登录商店以来,一直在持续更新,积极改进,拥有芒果台视频的独家点播和直 ...
- win10 uwp 使用 Border 布局
在 UWP 写一个界面需要将元素排列,在排列元素的时候有特殊的元素叫容器.容器的意思是元素里面包含元素,在 UWP 用到的容器有很多,也可以自己写一个.简单的容器是 Border 边框控件,如控件说的 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- Win10 UWP开发系列:实现Master/Detail布局
在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...
随机推荐
- apache相关
http://hw1287789687.iteye.com/blog/2212292 http://enable-cors.org/server_apache.html http://blog.sin ...
- C#之Winform中treeview控件绑定数据库
private DataSet ds; private SqlDataAdapter sqlDataAdapter1; private int maxnodeid; private void Form ...
- SWFTools参数
CMD: d:\SWFTools>pdf2swf -o c:\2.swf -s flashversion=9 -s languagedir=c:\xpdf\xpdf-cinese-simplif ...
- python学习笔记3-celery分布式任务处理器
celery是用python写的一个异步的任务框架,功能非常强大,具体的说明可以查看官网,这里主要提供点demo让你迅速使用该框架 1.环境安装 默认安装好了redis pip install c ...
- Looping Techniques
[Looping Techniques] 1.When looping through dictionaries, the key and corresponding value can be ret ...
- 将C语课设传到了Github和Code上 2015-91-18
一直听说Git好使,以前捣鼓过没弄成,现在考完试了终于可以静下心来研究研究. 哎,我要是当时做课设的时候就用Git,也能省下不少事呢. 使用的Git教程,刚看个开头: 廖雪峰的Git教程 http:/ ...
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
[Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...
- (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- css加阴影
box-shadow: 1px 1px 3px 1px rgba(0,0,0,0.1); -webkit-box-shadow: 1px 1px 3px 1px rgba(0,0,0,0.1); -m ...
- java核心知识点学习----并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器
多线程并发就像是内功,框架都像是外功,内功不足,外功也难得精要. 1.进程和线程的区别 一个程序至少有一个进程,一个进程至少有一个线程. 用工厂来比喻就是,一个工厂可以生产不同种类的产品,操作系统就是 ...