美文网首页
swift 单独集成QQ分享

swift 单独集成QQ分享

作者: jackguo | 来源:发表于2017-07-13 10:49 被阅读0次

    基于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字节


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

    相关文章

      网友评论

          本文标题:swift 单独集成QQ分享

          本文链接:https://www.haomeiwen.com/subject/lyxwhxtx.html