基于xcode8.3.1 适配ios10以上系统
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环境搭建和iOS SDK API使用说明(特别说明:仅供参考版本太旧了)
3.将SDK里边的TencentOpenApi_IOS_Bundle.bundle和TencentOpenAPI.framework(静态库)拖入到工程中
4.添加静态库(SDK中还需要手动导入.bundle文件,在这里不用了,系统已经自动找到了)
添加SDK依赖的系统库文件。分别是”Security.framework”,“libiconv.dylib”,“SystemConfiguration.framework”,“CoreGraphics.Framework”、“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”。
5.在Build Settings->Linking配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc”
6.配置UrlScheme tencent+你的appID
7.配置白名单(这里我看有的需要配置20几个白名单,可能跟需求的是登录还是分享有关.大家可以根据自己的需求去网上找,我只是添加了这几个可以实现分享了
(注意:在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里边实现以下的方法
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.在点击分享按钮的里边创建授权 这里如果只是分享的话delegate可以设置为nil
1. _ = TencentOAuth.init(appId: tencentID, andDelegate: nil)
(在分享以前首先判断用户是否安装了qq或者版本是否支持)
QQApiInterface.isQQInstalled()
QQApiInterface.isQQSupportApi()
2. 创建需要分享的文本 图片 新闻 视频
(只有新闻和视频,音频才能分享到qq空间,其他的只能分享给好友,否则会分享不成功)请参考以下图片
分享文本实例
//判断文本是否超长 qq规定不能超过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 = "发送参数错误"
case EQQAPIQQNOTINSTALLED:
message = "QQ未安装"
case EQQAPIQQNOTSUPPORTAPI:
message = "API接口不支持"
case EQQAPISENDFAILD:
message = "发送失败"
case EQQAPIQZONENOTSUPPORTTEXT:
message = "空间分享不支持纯文本分享,请使用图文分享"
case EQQAPIQZONENOTSUPPORTIMAGE:
message = "空间分享不支持纯图片分享,请使用图文分享"
default:
message = "发送成功"
}
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, //数据线
};
*/
imgObj?.cflag = UInt64(kQQAPICtrlFlagQZoneShareForbid)
let req = SendMessageToQQReq(content: imgObj)
let res = QQApiInterface.send(req)
handleSendResult(sendResult: res)
}
还有其他的限制要求大家要注意:
URL地址,必填,最长512个字符
标题,最长128个字符
简要描述,最长512个字符
预览图像数据,最大1M字节
如果以后有集成登录的话,再接着给大家分享
网友评论