iOS开发之第三方分享QQ分享实现

分享第三方分享之QQ分享各种坑的总结:

1. 分享老是提示未注册QQ,解决办法就是在程序已启动,就向QQ进行授权。代码如下

 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [[TencentOAuth alloc] initWithAppId:TENCENT_CONNECT_APP_KEY andDelegate:self];

    return YES;

}



QQ未注册错误代号EQQAPIAPPNOTREGISTED

2. 分享的时候, 不跳转到QQ界面,解决办法就是在openurl中,添加如下代码:

 

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation{

   

    if ([url.absoluteString hasPrefix:[NSString stringWithFormat:@"tencent%@",TENCENT_CONNECT_APP_KEY]]) {

        [QQApiInterface handleOpenURL:url delegate:self];

        return [TencentOAuth HandleOpenURL:url];

    }

    return YES;

 

}



3. iOS9白名单的问题,没有吧QQ的相关白名单填完成。 完成的如下。

 

LSApplicationQueriesSchemes

 

mqqapi

mqq

mqqOpensdkSSoLogin

mqqconnect

mqqopensdkdataline

mqqopensdkgrouptribeshare

mqqopensdkfriend

mqqopensdkapi

mqqopensdkapiV2

mqqopensdkapiV3

mqzoneopensdk

wtloginmqq

wtloginmqq2

mqqwpa

mqzone

mqzonev2

mqzoneshare

wtloginqzone

mqzonewx

mqzoneopensdkapiV2

mqzoneopensdkapi19

mqzoneopensdkapi

 

mqzoneopensdk




进入正题:

 

分享的对象包含:

 

QQApiTextObject 文本对象

 

QQApiURLObject URL对象类型

QQApiExtendObject 扩展数据类型

 

QQApiImageObject 图片对象

QQApiImageArrayForQZoneObject 图片数组对象用于分享图片到空间,走写说说路径,是一个指定为图片类型的,当图片数组为空时,默认走文本写说说

 

QQApiVideoForQZoneObject 视频对象

 

QQApiWebImageObject 网络图片对象

QQApiFileObject 本地文件对象

 

QQApiAudioObject 音频URL对象

 

QQApiVideoObject 视频URL对象:用于分享目标内容为视频的URL的对象

 

QQApiNewsObject 新闻URL对象

等等。

 

相关的分享对象的权限看下图:




分享的核心代码为: (分享 新闻URL对象为例子)

 

 

    

    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

    NSURL *preimageUrl = [NSURL URLWithString:@"http://www.sizzee.com/index.php/catalog/product/view/id/55730/s/10196171/?SID=au0lhpg54f11nenmrjvhsh0rq6?uk=Y3VzdG9tZXJfaWQ9Mjc0fHByb2R1Y3RfaWQ9NTU3MzA"];

    QQApiNewsObject* img = [QQApiNewsObject objectWithURL:url title:@"测试分享" description:[NSString stringWithFormat:@"分享内容------新闻URL对象分享 ------test"] previewImageURL:preimageUrl];

    

    //请求帮助类,分享的所有基础对象,都要封装成这种请求对象。

    SendMessageToQQReq* req = [SendMessageToQQReq reqWithContent:img];

    QQApiSendResultCode sent = [QQApiInterface sendReq:req];

    

    //通过自定义的qqdelegate来通知本controller,是否成功分享

    appdelegate.qqDelegate = self;

    

    NSLog(@"QQApiSendResultCode %d",sent);

    

    [self handleSendResult:sent];

 

}

- (void)handleSendResult:(QQApiSendResultCode)sendResult

{

    switch (sendResult)

    {

        case EQQAPIAPPNOTREGISTED:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"App未注册" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPIMESSAGECONTENTINVALID:

        case EQQAPIMESSAGECONTENTNULL:

        case EQQAPIMESSAGETYPEINVALID:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"发送参数错误" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPIQQNOTINSTALLED:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"未安装手Q" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPIQQNOTSUPPORTAPI:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"API接口不支持" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPISENDFAILD:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"发送失败" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPIVERSIONNEEDUPDATE:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"当前QQ版本太低,需要更新" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            break;

        }

        default:

        {

            break;

        }

    }

}

 

 

上面提到了分享。那么如何来监听分享是否成功呢。这就要回到我们的appdelegate里面。监听

 

- (void)onResp:(QQBaseResp *)resp


appdelegate中的相关代码如下:

 

 

**

 处理来至QQ的响应

 */

- (void)onResp:(QQBaseResp *)resp{

     NSLog(@" ----resp %@",resp);

    

    // SendMessageToQQResp应答帮助类

    if ([resp.class isSubclassOfClass: [SendMessageToQQResp class]]) {  //QQ分享回应

        if (_qqDelegate) {

            if ([_qqDelegate respondsToSelector:@selector(shareSuccssWithQQCode:)]) {

                SendMessageToQQResp *msg = (SendMessageToQQResp *)resp;

                NSLog(@"code %@  errorDescription %@  infoType %@",resp.result,resp.errorDescription,resp.extendInfo);

                [_qqDelegate shareSuccssWithQQCode:[msg.result integerValue]];

            }

        }

    }

 

}




分享的核心代码为: (分享 新闻URL对象为例子)

 

 

    

    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

    NSURL *preimageUrl = [NSURL URLWithString:@"http://www.sizzee.com/index.php/catalog/product/view/id/55730/s/10196171/?SID=au0lhpg54f11nenmrjvhsh0rq6?uk=Y3VzdG9tZXJfaWQ9Mjc0fHByb2R1Y3RfaWQ9NTU3MzA"];

    QQApiNewsObject* img = [QQApiNewsObject objectWithURL:url title:@"测试分享" description:[NSString stringWithFormat:@"分享内容------新闻URL对象分享 ------test"] previewImageURL:preimageUrl];

    

    //请求帮助类,分享的所有基础对象,都要封装成这种请求对象。

    SendMessageToQQReq* req = [SendMessageToQQReq reqWithContent:img];

    QQApiSendResultCode sent = [QQApiInterface sendReq:req];

    

    //通过自定义的qqdelegate来通知本controller,是否成功分享

    appdelegate.qqDelegate = self;

    

    NSLog(@"QQApiSendResultCode %d",sent);

    

    [self handleSendResult:sent];

 

}

- (void)handleSendResult:(QQApiSendResultCode)sendResult

{

    switch (sendResult)

    {

        case EQQAPIAPPNOTREGISTED:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"App未注册" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPIMESSAGECONTENTINVALID:

        case EQQAPIMESSAGECONTENTNULL:

        case EQQAPIMESSAGETYPEINVALID:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"发送参数错误" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPIQQNOTINSTALLED:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"未安装手Q" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPIQQNOTSUPPORTAPI:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"API接口不支持" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPISENDFAILD:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"发送失败" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            

            

            break;

        }

        case EQQAPIVERSIONNEEDUPDATE:

        {

            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"当前QQ版本太低,需要更新" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

            [msgbox show];

            break;

        }

        default:

        {

            break;

        }

    }

}

 

 

上面提到了分享。那么如何来监听分享是否成功呢。这就要回到我们的appdelegate里面。监听

 

- (void)onResp:(QQBaseResp *)resp


appdelegate中的相关代码如下:

 

 

**

 处理来至QQ的响应

 */

- (void)onResp:(QQBaseResp *)resp{

     NSLog(@" ----resp %@",resp);

    

    // SendMessageToQQResp应答帮助类

    if ([resp.class isSubclassOfClass: [SendMessageToQQResp class]]) {  //QQ分享回应

        if (_qqDelegate) {

            if ([_qqDelegate respondsToSelector:@selector(shareSuccssWithQQCode:)]) {

                SendMessageToQQResp *msg = (SendMessageToQQResp *)resp;

                NSLog(@"code %@  errorDescription %@  infoType %@",resp.result,resp.errorDescription,resp.extendInfo);

                [_qqDelegate shareSuccssWithQQCode:[msg.result integerValue]];

            }

        }

    }

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值