欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ios的qq分享接入流程

程序员文章站 2022-07-13 17:08:27
...

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