swift 单独集成QQ分享

基于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(静态库)拖入到工程中

swift 单独集成QQ分享_第1张图片
 

4.添加静态库(SDK中还需要手动导入.bundle文件,在这里不用了,系统已经自动找到了)

添加SDK依赖的系统库文件。分别是”Security.framework”,“libiconv.dylib”,“SystemConfiguration.framework”,“CoreGraphics.Framework”、“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”。

swift 单独集成QQ分享_第2张图片

5.在Build Settings->Linking配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc

swift 单独集成QQ分享_第3张图片

6.配置UrlScheme   tencent+你的appID

swift 单独集成QQ分享_第4张图片

7.配置白名单(这里我看有的需要配置20几个白名单,可能跟需求的是登录还是分享有关.大家可以根据自己的需求去网上找,我只是添加了这几个可以实现分享了

(注意:在info里边有些需要配置bundledisplayname,我这里没有设置也通过,需要配置ATS允许http访问)

swift 单独集成QQ分享_第5张图片

8.使用桥接文件导入头文件

#import  

#import

#import

#import

#import


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空间,其他的只能分享给好友,否则会分享不成功)请参考以下图片

swift 单独集成QQ分享_第6张图片

分享文本实例

//判断文本是否超长  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字节


如果以后有集成登录的话,再接着给大家分享

你可能感兴趣的:(swift 单独集成QQ分享)