每當開發一個應用需要社交分享的應用時,總是心里咯噔一下:到底什么時候分享能加上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的回調處理》
