zoukankan      html  css  js  c++  java
  • 【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的回调处理》

  • 相关阅读:
    Web APP开发技巧总结
    2015年 移动开发都有哪些热点?
    手机APP UI设计尺寸基础知识
    最新Android & iOS设计尺寸规范
    给iOS开发者的Android开发建议
    Android 应用开发推荐书单
    Android 你应该知道的学习资源 进阶之路贵在坚持
    一篇文章让你读懂iOS和Android的历史起源
    Android平台上最好的几款免费的代码编辑器
    Google 发布的15个 Android 性能优化典范
  • 原文地址:https://www.cnblogs.com/zhxilin/p/4661910.html
Copyright © 2011-2022 走看看