美文网首页支付,地图,分享
独立集成QQ和微信分享的回调冲突问题

独立集成QQ和微信分享的回调冲突问题

作者: iHTCboy | 来源:发表于2015-03-29 17:37 被阅读3066次

一、前言:微信和QQ的回调方法名相同

-(void) onReq:(BaseReq*)req

- (void)onResp:(QQBaseResp *)resp

所以在AppDelegate中会冲突。

二、正文:

1、原本我是这样写的:

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

 if ([string hasPrefix:kWXKey]){

     return [WXApi handleOpenURL:url delegate:self];

}else if ([string hasPrefix:kQQkey"]){ 

     return [QQApiInterface handleOpenURL:url delegate:self];

}

但是,他们的回调都是相同的方法名:

1、微信回调:

/*! @brief 发送一个sendReq后,收到微信的回应  *

* 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。

* 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。

* @param resp具体的回应内容,是自动释放的

*/

-(void) onResp:(BaseResp*)resp;

2、QQ回调:

/** 处理来至QQ的请求 */

- (void)onReq:(QQBaseReq *)req;

他们在AppDelegate里名字是冲突的,所以,不能以AppDelegate为代理处理,

最后,我为微信和QQ分享,单独写一个分享Tool,并把相应的代理方法写在Tool中.

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

if ([string hasPrefix:kWXKey]){

     WeixinSDKTool *wx = [[WeixinSDKTool alloc]init];

     return [WXApi handleOpenURL:url delegate:wx];

} else if ([string hasPrefix:kQQKey]){

      QQSDKTool * qq = [[QQSDKTool alloc]init];

      return [QQApiInterface handleOpenURL:url delegate:qq];

}

附:

1、微信Tool.h

#import <Foundation/Foundation.h>

#import "WXApi.h"

#import "WXApiObject.h"

@interface WeixinSDKTool : NSObject<WXApiDelegate>

typedef NS_ENUM(NSInteger, WXSceneType) {

WXSceneTypeSession  = 0,        /**< 聊天界面    */

WXSceneTypeTimeline = 1,        /**< 朋友圈      */

WXSceneTypeFavorite = 2,        /**< 收藏      */

};

+ (void) sendImageContent:(UIImage *)image scene:(WXSceneType)scene;

@end

2、QQTool.h

#import<UIKit/UIKit.h>

#import<Foundation/Foundation.h>

#import<TencentOpenAPI/QQApi.h>

#import<TencentOpenAPI/QQApiInterface.h>

@interface QQSDKTool : NSObject<QQApiInterfaceDelegate>

+ (void)shareToWeiboWithImage:(UIImage *)image title:(NSString *)title description:(NSString *)description;

@end

nice~

- 如果有什么疑问,可以在评论区一起讨论;

- 如果有什么不正确的地方,欢迎指导!

> 注:本文首发于 [iHTCboy's blog](http://ihtcboy.com),如若转载,请注明来源。

相关文章

网友评论

  • XueYongWei:楼主大可不必,也不必2楼那样更改原有参数类型,只需要判断一下就行了。
    //以下是QQ的回调
    if ([resp isKindOfClass:[SendMessageToQQResp class]]) {
    SendMessageToQQResp *qqresp = (SendMessageToQQResp*)resp;
    halo丶宋先生:@姑娘丶你命里缺我 这不就是appdelegate遵循下QQApiInterfaceDelegate代理
    姑娘丶你命里缺我:报错Type 'AppDelegate' does not conform to protocol 'QQApiInterfaceDelegate'怎么解决
  • 258020b3fad0:刚 遇到这个问题 3q
  • airron:其实作者你没必要搞个tool类出来,因为objc采用是消息转发机制,可以直接改装其协议方法,吧参数类型换成id类型就ok了,具体的可以看我主页的那片文章,从你这发散写出来的,很简单的处理方式。:stuck_out_tongue_winking_eye:

本文标题:独立集成QQ和微信分享的回调冲突问题

本文链接:https://www.haomeiwen.com/subject/prgnxttx.html