基于xcode8.3.1 ?適配ios10以上系統(tǒng)
1.首先在騰訊開放平臺注冊自己的app,拿到appID和appKey(沒有審核不通過的也可以測試)
2.下載最新的完整版的SDK http://wiki.open.qq.com/wiki/IOS_API調用說明#1._iOS_SDK.E7.8E.AF.E5.A2.83.E6.90.AD.E5.BB.BA??
也同時下載iOS SDK環(huán)境搭建和iOS SDK API使用說明(特別說明:僅供參考版本太舊了)
3.將SDK里邊的TencentOpenApi_IOS_Bundle.bundle和TencentOpenAPI.framework(靜態(tài)庫)拖入到工程中

4.添加靜態(tài)庫(SDK中還需要手動導入.bundle文件,在這里不用了,系統(tǒng)已經自動找到了)
添加SDK依賴的系統(tǒng)庫文件。分別是”Security.framework”,“l(fā)ibiconv.dylib”,“SystemConfiguration.framework”,“CoreGraphics.Framework”、“l(fā)ibsqlite3.dylib”、“CoreTelephony.framework”、“l(fā)ibstdc++.dylib”、“l(fā)ibz.dylib”。

5.在Build Settings->Linking配置區(qū),給“Other Linker Flags”配置項添加屬性值“-fobjc-arc”

6.配置UrlScheme ? tencent+你的appID

7.配置白名單(這里我看有的需要配置20幾個白名單,可能跟需求的是登錄還是分享有關.大家可以根據自己的需求去網上找,我只是添加了這幾個可以實現(xiàn)分享了
(注意:在info里邊有些需要配置bundledisplayname,我這里沒有設置也通過,需要配置ATS允許http訪問)

8.使用橋接文件導入頭文件
#import ?<TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiinterface.h>
#import <TencentOpenAPI/QQApiInterfaceObject.h>
#import <TencentOpenAPI/TencentOAuthObject.h>
#import<TencentOpenAPI/sdkdef.h>
9.在appdelegate里邊實現(xiàn)以下的方法
func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return TencentOAuth.handleOpen(url)
}
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
return TencentOAuth.handleOpen(url)
}
10.在點擊分享按鈕的里邊創(chuàng)建授權 ?這里如果只是分享的話delegate可以設置為nil
? ?1. ? ?_ = TencentOAuth.init(appId: tencentID, andDelegate: nil)
(在分享以前首先判斷用戶是否安裝了qq或者版本是否支持)
QQApiInterface.isQQInstalled()
QQApiInterface.isQQSupportApi()
? ?2. 創(chuàng)建需要分享的文本 ?圖片 ?新聞 ?視頻 ??
(只有新聞和視頻,音頻才能分享到qq空間,其他的只能分享給好友,否則會分享不成功)請參考以下圖片

分享文本實例
//判斷文本是否超長 ?qq規(guī)定不能超過1530個字符
if txt.length >= Int(1530) {
? ? ? ? let end = txt.endIndex
? ? ? ?let sub = txt.index(end, offsetBy: 1500 - txt.length)
? ? ? ?txt = txt.substring(to:sub) + "..."
}
? ?let txtObj = QQApiTextObject(text: txt)
? ?txtObj?.cflag = UInt64(kQQAPICtrlFlagQZoneShareForbid)
? ? let req = SendMessageToQQReq(content: txtObj)
? ? let res = QQApiInterface.send(req)
? ? handleSendResult(sendResult: res)
}
//處理分享后的結果
func handleSendResult(sendResult:QQApiSendResultCode){
var message = ""
switch(sendResult){
case EQQAPIAPPNOTREGISTED:
message = "App未注冊"
case EQQAPIMESSAGECONTENTINVALID, EQQAPIMESSAGECONTENTNULL,
EQQAPIMESSAGETYPEINVALID:
message = "發(fā)送參數(shù)錯誤"
case EQQAPIQQNOTINSTALLED:
message = "QQ未安裝"
case EQQAPIQQNOTSUPPORTAPI:
message = "API接口不支持"
case EQQAPISENDFAILD:
message = "發(fā)送失敗"
case EQQAPIQZONENOTSUPPORTTEXT:
message = "空間分享不支持純文本分享,請使用圖文分享"
case EQQAPIQZONENOTSUPPORTIMAGE:
message = "空間分享不支持純圖片分享,請使用圖文分享"
default:
message = "發(fā)送成功"
}
print(message)
}
分享圖片實例
展示圖片不能大于5MB,預覽圖片不能大于1MB
?我試過了使用UIImagePNG方法轉成data不行, 使用UIImageJPEG的格式是可以
if let data = UIImageJPEGRepresentation(img, 1)? {
//預覽圖片不能大于1MB
if data.count >= 1048576? {
if let scaleData = UIImageJPEGRepresentation(img, 0.5)? {
preData = scaleData
}
}
let imgObj = QQApiImageObject(data: data, previewImageData: preData, title: tit, description: des)
//這里解釋一下cflag就是分享到哪里的限制 ?
/*
enum
{
kQQAPICtrlFlagQZoneShareOnStart = 0x01, ?//只有qq空間
kQQAPICtrlFlagQZoneShareForbid = 0x02, ?//除了qq空間
kQQAPICtrlFlagQQShare = 0x04, ? //qq所有的 ?默認的
kQQAPICtrlFlagQQShareFavorites = 0x08, //收藏
kQQAPICtrlFlagQQShareDataline = 0x10,? //數(shù)據線
};
*/
imgObj?.cflag = UInt64(kQQAPICtrlFlagQZoneShareForbid)
let req = SendMessageToQQReq(content: imgObj)
let res = QQApiInterface.send(req)
handleSendResult(sendResult: res)
}
還有其他的限制要求大家要注意:
URL地址,必填,最長512個字符
標題,最長128個字符
簡要描述,最長512個字符
預覽圖像數(shù)據,最大1M字節(jié)
如果以后有集成登錄的話,再接著給大家分享