这个过程其实很简单,就是腾讯的文档真的不敢恭维!
如果只是想把一段文字,或一张图片分享到QQ(包括好友、群、讨论组、空间),那么你看文档会感觉到很无助,不知道从那里开始,并且地魔(demo)跑不起来!(ps,腾讯的员工是不是经常跳槽到微信?)
(1)首先,把TencentOpenAPI.framework、TencentOpenApi_IOS_Bundle.bundle导入工程中。
(ps,我在搜索资料时,看到有人说TencentOpenAPI.framework要放在工程根目录,我在Xcode6下试了一下,结果是不放根目录也行,同时Xcode6下,导入framework就好,其它操作都自动了,官方sdk文档好像好久没更新了,我又想吐槽?不要阻止我!what's up?)
(2)添加SDK依赖的系统库文件。
“Security.framework”、“libiconv.dylib”、“SystemConfiguration.framework”、“CoreGraphics.Framework”、“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”。
(3)在AppDelegate.h中 导入 头文件
#import
(4)在AppDelegate.m中向腾讯注册。(ps:只是集成分享功能,所以不用授权)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[TencentOAuth alloc] initWithAppId:QQKey andDelegate:nil]; //注册
}
【要特别注意以下3点:
1、上面代码中QQkey为APP ID,而不是APP KEY,并且与URL schemes不相同。
2、URL type 里的 URL schemes = tencent + appid。(因为微信、微博的两个值是相同的,所以要注意一下。)
3、这里delegate为空,因为没有授权,所以不用代理。
(5)重写AppDelegate 的handleOpenURL和openURL方法
- (BOOL)application:(UIApplication*)application openURL:(NSURL *)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{
return[TencentOAuth HandleOpenURL:url];
}
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return[TencentOAuth HandleOpenURL:url];
}
(ps:不用实现TencentSessionDelegate代理方法,手机QQ里分享时,会等到分享成功后,才会跳回原应用,所以不用监听发送情况)
(6)设置Bundle display name属性值。
如果是Xcode 6.0创建工程时,默认可能没有单独设置Bundle display name属性值。但是因为SDK需要用到Bundle display name的值,所以务必请检查确保这个属性存在,如果没有请添加上。如下图所示:
(ps:注意的是,这个名字会用在2个地方:1、应用显示的名字,2、分享到QQ界面时显示的“来自”小尾巴(到空间时,小尾巴是你注册腾讯appid时写的应用名字)
(7)在实现分享的ViewCotroller里加入头文件
#import
#import
(8)实现分享内容的代码(以分享图片为例)
//用于分享图片内容的对象
QQApiImageObject *imgObj = [QQApiImageObject objectWithData:imgData
previewImageData:previewImage
title:self.newsModel.title
description:@"由 桂林理工大学-校园通 转码"];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:imgObj];
//将内容分享到qq
QQApiSendResultCode sent = [QQApiInterface sendReq:req];
下面是各种分享消息的实例代码,作为开发者调用QQ好友分享和QQ空间分享的参考:
纯文本分享:
1
2
3
4
|
QQApiTextObject
*txtObj
=
[
QQApiTextObject
objectWithText
:
@"QQ互联测试"
]
;
SendMessageToQQReq
*req
=
[
SendMessageToQQReq
reqWithContent
:txtObj
]
;
//将内容分享到qq
QQApiSendResultCode
sent
=
[
QQApiInterface
sendReq
:req
]
;
|
纯图片分享:
1
2
3
4
5
6
7
8
9
|
NSString
*imgPath
=
[
[
[
NSBundle
mainBundle
]
resourcePath
]
stringByAppendingPathComponent
:
@"test.gif"
]
;
NSData
*imgData
=
[
NSData
dataWithContentsOfFile
:imgPath
]
;
QQApiImageObject
*imgObj
=
[
QQApiImageObject
objectWithData
:imgData
previewImageData
:imgData
title
:
@"QQ互联测试"
description
:
@"QQ互联测试分享"
]
;
SendMessageToQQReq
*req
=
[
SendMessageToQQReq
reqWithContent
:imgObj
]
;
//将内容分享到qq
QQApiSendResultCode
sent
=
[
QQApiInterface
sendReq
:req
]
;
|
新闻分享:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
NSString
*utf8String
=
@"http://www.163.com"
;
NSString
*title
=
@"新闻标题"
;
NSString
*description
=
@"新闻描述"
;
NSString
*previewImageUrl
=
@"http://cdni.wired.co.uk/620x413/k_n/NewsForecast%20copy_620x413.jpg"
;
QQApiNewsObject
*newsObj
=
[
QQApiNewsObject
objectWithURL
:
[
NSURL
URLWithString
:utf8String
]
title
:title
description
:description
previewImageURL
:
[
NSURL
URLWithString
:previewImageUrl
]
]
;
SendMessageToQQReq
*req
=
[
SendMessageToQQReq
reqWithContent
:newsObj
]
;
//将内容分享到qq
//QQApiSendResultCode sent = [QQApiInterface sendReq:req];
//将内容分享到qzone
QQApiSendResultCode
sent
=
[
QQApiInterface
SendReqToQZone
:req
]
;
|
音乐分享:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
NSString
*utf8String
=
@"http://y.qq.com/i/song.html?songid=432451&source=mobileQQ%23wechat_redirect"
;
NSString
*title
=
@"歌曲名:不要说话"
;
NSString
*descriotion
=
@"专辑名:不想放手歌手名:陈奕迅"
;
NSString
*previewImageUrl
=
@"http://imgcache.qq.com/music/photo/mid_album_300/V/E/000J1pJ50cDCVE.jpg"
;
NSString
*flashURL
=
@"http://10.136.9.109/fcgi-bin/fcg_music_get_playurl.fcg?song_id=1234&redirect=0&filetype=mp3&qqmusic_fromtag=15&app_id=100311325&app_key=b233c8c2c8a0fbee4f83781b4a04c595&device_id=1234"
;
QQApiAudioObject
*audioObj
=
[
QQApiAudioObject
objectWithURL
:
[
NSURL
URLWithString
:utf8String
]
title
:title
description
:descriotion
previewImageURL
:
[
NSURL
URLWithString
:previewImageUrl
]
]
;
SendMessageToQQReq
*req
=
[
SendMessageToQQReq
reqWithContent
:audioObj
]
//将内容分享到qq
//QQApiSendResultCode sent = [QQApiInterface sendReq:req];
//将被容分享到qzone
QQApiSendResultCode
sent
=
[
QQApiInterface
SendReqToQZone
:req
]
;
|
视频分享:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
NSString
*previewPath
=
[
[
[
NSBundle
mainBundle
]
resourcePath
]
stringByAppendingPathComponent
:
@"video.jpg"
]
;
NSData
*
previewData
=
[
NSData
dataWithContentsOfFile
:previewPath
]
;
NSString
*utf8String
=
@"http://www.163.com"
;
QQApiVideoObject
*videoObj
=
[
QQApiVideoObject
objectWithURL
:
[
NSURL
URLWithString
:utf8String
?
:
@""
]
title
:
@"QQ互联测试"
description
:
@"QQ互联测试分享"
previewImageData
:previewData
]
;
[
videoObj
setFlashURL
:
[
NSURL
URLWithString
:
@"http://v.qq.com/cover/5/53x6bbyb07ebl3s/n0013r8esy6.html"
]
]
;
SendMessageToQQReq
*req
=
[
SendMessageToQQReq
reqWithContent
:videoObj
]
;
//将内容分享到qq
//QQApiSendResultCode sent = [QQApiInterface sendReq:req];
//将被容分享到qzone
QQApiSendResultCode
sent
=
[
QQApiInterface
SendReqToQZone
:req
]
;
|
注意:
分享到QQ空间接口暂时不支持发送多张图片的能力,若开发者传入多张图片,则会自动选入第一张图片作为预览图。多图的能力将在以后支持。