ios的qq分享接入流程
最近搞了个ios端的qq分享接入,总结一下接入的流程和遇到的一些值得注意的问题。
2、ios的sdkDemo是可以在xcode上面跑的,但是需要配置一下证书,还有就是demo不要放在中文路径下面。demo能顺利跑起来是最好的,这样在接入过程中遇到问题可以借助demo去定位,实在跑不起来问题也不大,同样可以作为很好的参考资料。
3、准备工作做好之后就按照SDK文档进行接入:
1)、添加.bundle和.framework,下载的移动应用SDK里面没有.bundle文件的话可以去移动游戏SDK里面拿,如果只是接入分享貌似.bundle也没啥作用;
2)、添加系统库:“Security.framework”,“SystemConfiguration.framework”,“CoreGraphics.Framework”,“CoreTelephony.framework”,“libiconv.tbd”,“libsqlite3.tbd”,“libstdc++.tbd”,“libz.tbd”;
3)、在Info.plist(Open As Source Code)中的LSApplicationQueriesSchemes下面添加以下白名单:
<string>mqqapi</string>
<string>mqq</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqconnect</string>
<string>mqqopensdkdataline</string>
<string>mqqopensdkgrouptribeshare</string>
<string>mqqopensdkfriend</string>
<string>mqqopensdkapi</string>
<string>mqqopensdkapiV2</string>
<string>mqqopensdkapiV3</string>
<string>mqzoneopensdk</string>
<string>wtloginmqq</string>
<string>wtloginmqq2</string>
<string>mqqwpa</string>
<string>mqzone</string>
<string>mqzonev2</string>
<string>mqzoneshare</string>
<string>wtloginqzone</string>
<string>mqzonewx</string>
<string>mqzoneopensdkapiV2</string>
<string>mqzoneopensdkapi19</string>
<string>mqzoneopensdkapi</string>
<string>mqzoneopensdk</string>
4)、添加URL Types,URL Schemes的内容为:tencent+QQ_APP_ID(例如:tencent123456)。
5)、添加头文件:
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterfaceObject.h>
#import <TencentOpenAPI/QQApiInterface.h>
6)、添加代理:TencentSessionDelegate和QQApiInterfaceDelegate
7)、初始化:
[[TencentOAuth alloc] initWithAppId:QQ_APP_ID andDelegate:self];
8)、重写handleOpenURL和openURL并实现代理QQApiInterfaceDelegate的方法获取qq分享结果的回调:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [TencentOAuth HandleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
// 如果需要获取qq分享结果的回调就在这里设置代理
return [QQApiInterface handleOpenURL:url delegate:self];
}
// qq分享结果的回调
- (void)onResp:(QQBaseResp *)resp
{
if ([resp isKindOfClass:[SendMessageToQQResp class]] && resp.type == ESENDMESSAGETOQQRESPTYPE)
{
SendMessageToQQResp* sendReq = (SendMessageToQQResp*)resp;
// sendReq.result->0分享成功 -4取消分享
if ([sendReq.result integerValue] == 0) {
NSLog(@"qq share success");
}else{
NSLog(@"qq share failed");
}
}
}
9)、分享文本和图片:
// 纯文本分享
+ (void)onShareText:(NSDictionary *)dict
{
QQApiTextObject *txtObj = [QQApiTextObject objectWithText:@"share text"];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:txtObj];
dispatch_async(dispatch_get_main_queue(), ^{
[QQApiInterface sendReq:req];
});
}
// 纯图片分享
+ (void)onShareImage:(NSDictionary *)dict
{
NSString *path = [dict objectForKey:@"img_path"];
NSData *imgData = [NSData dataWithContentsOfFile:path];
NSData *preImgData = imgData;
QQApiImageObject *imgObj = [QQApiImageObject objectWithData:imgData
previewImageData:preImgData
title:@"title"
description:@"desc"];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:imgObj];
dispatch_async(dispatch_get_main_queue(), ^{
[QQApiInterface sendReq:req];
});
}
4、分享报错“preview image data is too big”,这是缩略图过大的问题,一般来说缩略图不能超过1M,如果缩略图过大就需要进行压缩,压缩的方法在sdkDemo的QQAPIShareEntry类里面有使用,可以参考,当然也可以使用其他的方法。
5、由于qq和微信的分享回调都是通过onResp方法返回的,所以最好做一下处理。
6、URL Types关系到分享结果的回调,QQ_APP_ID一定不能填错了。