因项目需要,必须接入QQ分享的SDK来实现分享到手机QQ的功能。期间遇到不少坑,特写此文,愿给需要的人一点帮助。
一 搭建环境
1.1 在腾讯开放平台网站下载好SDK,解压后按照使用说明文档(下载),将TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拷贝到应用开发的目录下,注意必须放在项目主文件夹的根目录下,否则会出错。然后将TencentOpenAPI.framework从保存的目录拖动到工程的FrameWorks虚拟目录下,
1.2 在弹出的对话框中勾选“Create groups for any added folders”,去掉“copy items into destination group’s folder(if needed)”,在Add to targets中选择要加入SDK的target之后点击finish。完成之后就将iOS SDK的framework文件加入了开发工程中。(这是说明文档原话)
依次选中:项目文件(xcodeproj后缀名文件)-> Build Phases->Link Binary With Libraries.点击右下角的加号(:heavy_plus_sign:)按钮,添加缺失的库文件。[本来想上个截图,但截了几张图上传时提示不符合要求,作罢]
经过验证,我加了下面这几项,与说明不一致,编译通过。
Security.framework
libiconv.2.dylib
SystemConfiguration.framework
CoreGraphics.Framework
CoreTelephony.framework
libstdc++.dylib
libz.dylib
TencentOpenAPI.framework
Security.framework,libiconv.2.dylib,SystemConfiguration.framework,CoreGraphics.Framework,CoreTelephony.framework,libstdc++.dylib,libz.dylib,TencentOpenAPI.framework。
依次选中:项目文件(xcodeproj后缀名文件)-> Build Phases->Copy Bundle Resources
.点击右下角的加号(➕)按钮,在弹出的对话框中选择左下角的“Add Other”,之后在弹出的文件浏览框中找到TencentOpenApi_IOS_Bundle.bundle,回车或单击“Open”确认选择。
4 修改工程配置属性
4.1 依次选中:项目文件(xcodeproj后缀名文件)-> Info->URL Types.
添加1个URL Type:
Identifier:tencent
URL Schemes:tencent+appId
其中的appId为在QQ互联注册登记的appId,如果是12345,则URL Schemes栏输入:tencent12345。
4.2 配置plist文件
这个一定得配置对,否则无法在分享到QQ后返回到自己的app。
仍然以上述appId为例,右键plist文件,选择“Open As”->“Source Code”,在
CFBundleURLTypes
与
之间添加如下代码
<dict>
<key>CFBundleTypeRolekey>
<string>Editorstring>
<key>CFBundleURLNamekey>
<string>tencentstring>
<key>CFBundleURLSchemeskey>
<array>
<string>tencent12345string>
array>
dict>
建议使用代码方式更改,笔者第一次使用可视化编辑器,tencent12345编辑到和CFBundleURLSchemes一级了,造成无法返回到app。因为这是个XML文件,编辑出错也不易发现。
二 QQ分享
demo中有示例代码,我添加一些demo和API说明中没有的注意事项:warning:。
2.1 必须保证缩略图不超过1MB。
+ (id)objectWithData:(NSData*)data previewImageData:(NSData*)previewImageData title:(NSString*)title description:(NSString*)description;
函数中previewImageData的大小不能超过1MB,否则出错。
2.2
QQApiFileObject对象(假设为fileObject)的cflag:
[fileObject setCflag:kQQAPICtrlFlagQQShareDataline];
即只能分享到“我的电脑”,不能分享给普通QQ好友。
+(id)objectWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageURL:(NSURL*)previewURL;
函数中url,title和description 3者均不能为空,否则不能分享。
这些在demo和API说明中都没有,出错还不知原因。
时间仓促,写得粗糙。若有帮助,莫大荣幸。
已将QQ分享API进行封装,方便分享图片、二进制数据及网址,请到此Github网址查看下载。