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