ios的qq分享接入流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fightsyj/article/details/82469313

最近搞了个ios端的qq分享接入,总结一下接入的流程和遇到的一些值得注意的问题。

1、进入QQ后台应用管理创建应用并申请,然后下载SDK

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一定不能填错了。

猜你喜欢

转载自blog.csdn.net/fightsyj/article/details/82469313
今日推荐