iOS 单独集成qq和微信分享sdk的方法

最近在做qq和微信分享,中途遇到好多问题,但是网上没有太多的单独集成的文章,只能自己一步一步摸索,所以,有必要记下来,希望大家能够少绕弯路.
微信分享:
在项目中添加微信的sdk之后需要进行如下操作:
一 在项目的targets中找到Info列表,在其中的URL Types中添加新的URL Schemes为appid

二 appdelegate.h
需要导入WXApi.h并且实现WXApiDelegate协议


三  appdelegate.m
//实现以下方法,实现微信和app的交互
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{

    if ([url.schemeisEqualToString:@"your appid"]) {
        return [WXApihandleOpenURL:url delegate:self];
    }
    else{
        returnYES;
    }
}

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

    if ([url.schemeisEqualToString:@"your appid"]) {
        return [WXApihandleOpenURL:url delegate:self];
    }
    else{
        returnYES;
    }

}
//实现以下方法进行微信分享回调:
-(void)onResp:(BaseResp *)resp
{
        if (resp.errCode==-2) {
        //未成功分享
    }
    else{
        //成功分享
    }
}



四 在需要调用微信的Controller中实现以下方法:
- (void)sharePYQTap{
    //
    WXMediaMessage *message=[WXMediaMessagemessage];
    message.title=@" ";
    message.description=@"";
    [message setThumbImage:[UIImageimageNamed:@"iconLogin"]];
    
    WXWebpageObject *webpageObject=[WXWebpageObjectobject];
    webpageObject.webpageUrl=@"";
    message.mediaObject=webpageObject;
    
    SendMessageToWXReq *req=[[SendMessageToWXReqalloc]init];
    req.bText=NO;
    req.message=message;
    req.scene=WXSceneTimeline;
    
    [WXApisendReq:req];

}



OK___微信分享其实挺简单,sdk文档说的也很明白,接下来是qq分享

qq分享的话就出现了很多问题,找了好多文章才一步一步解决,官方的文档写的真是不敢恭维:

一 导入qq的sdk两个文件分别是TencentOpenApi_IOS_Bundle.bundle和TencentOpenAPI.framework

二 在项目的targets中找到Info列表,在其中的URL Types中添加新的URL Schemes为tencent+appid identifier为TencentApiIdentifier

三 appdelegate.h
导入
#import <TencentOpenAPI/QQApiInterface.h>
并实现协议QQApiInterfaceDelegate

四 appdelegate.m
//实现以下方法,实现QQ和app的交互,因为之前集成了微信所以需要判断一下
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    
    if ([url.schemeisEqualToString:@"微信注册的appid"]) {
        return [WXApihandleOpenURL:url delegate:self];
    }
    elseif ([url.schemeisEqualToString:@"上一步URL Schemes里面填的内容"]){
        //
        return [QQApiInterface handleOpenURL:url delegate:self];
    }
    else{
        returnYES;
    }
}

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

    if ([url.schemeisEqualToString:@"微信注册的appid"]) {
        return [WXApihandleOpenURL:url delegate:self];
    }
    elseif ([url.schemeisEqualToString:@"上一步URL Schemes里面填的内容"]){
        return [QQApiInterface handleOpenURL:url delegate:self];
    }
    else{
        return YES;
    }
}
//实现以下方法进行qq分享回调:
- (void)onResp:(QQBaseResp *)resp
{
    switch (resp.type)
    {
        caseESENDMESSAGETOQQRESPTYPE:
        {
            SendMessageToQQResp* sendResp = (SendMessageToQQResp*)resp;
            UIAlertView* alert = [[UIAlertViewalloc] initWithTitle:sendResp.resultmessage:sendResp.errorDescriptiondelegate:selfcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];
            [alert show];
            break;
        }
        default:
        {            
            break;
        }
    }
}



***如果你同时集成qq和微信分享,就会出现问题如下:
他们的回调方法名称竟然是一样的,直接报错没悬念:这时候就需要进行处理了,找的一个比较好的解决方案:
- (void)onResp:(id)resp{
   //
    
    //Wechat分享返回
    
    if ([respisKindOfClass:[SendMessageToWXRespclass]]) {
        
        SendMessageToWXResp * tmpResp = (SendMessageToWXResp *)resp;
        
        if (tmpResp.errCode ==WXSuccess) {
            //分享成功
            
        }else{
            //分享失败
            
        }
        
    }
    
    //QQ分享返回
    
    if ([respisKindOfClass:[SendMessageToQQRespclass]]) {
        
        SendMessageToQQResp * tmpResp = (SendMessageToQQResp *)resp;
        
        if (tmpResp.type ==ESENDMESSAGETOQQRESPTYPE && [tmpResp.resultintegerValue] == 0) {
            //分享成功
        }
        else{
            //分享失败
        }
        
    }
}


四 在需要调用QQ分享的Controller中实现以下方法:
- (void)shareQQTap{
    //官网文档没写这一步,但是这个必须得有否则会提示app未注册
    TencentOAuth *auth=[[TencentOAuthalloc]initWithAppId:@"你的appid"andDelegate:self];
    
    NSString    *utf8String =@"http://www.baidu.com";
    NSString    *title =@" ";
    NSString    *description =@"";
    NSData      *data =[[NSDataalloc]init];
    data=UIImagePNGRepresentation([UIImageimageNamed:@"iconLogin"]);
    
    QQApiNewsObject     *newsObj=[QQApiNewsObjectobjectWithURL:[NSURLURLWithString:utf8String] title:title description:descriptionpreviewImageData:data];
    
    SendMessageToQQReq  *req = [SendMessageToQQReqreqWithContent:newsObj];
    //将内容分享到qq
    //QQApiSendResultCode sent = [QQApiInterface sendReq:req];
    //将内容分享到qzone
    QQApiSendResultCode sent = [QQApiInterfaceSendReqToQZone:req];
    [selfhandleSendResult:sent];

}
- (void)handleSendResult:(QQApiSendResultCode)sendResult
{
    switch (sendResult)
    {
        caseEQQAPIAPPNOTREGISTED:
        {
            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"App未注册"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
            [msgbox show];
            
            break;
        }
        caseEQQAPIMESSAGECONTENTINVALID:
        caseEQQAPIMESSAGECONTENTNULL:
        caseEQQAPIMESSAGETYPEINVALID:
        {
            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"发送参数错误"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
            [msgbox show];
            
            break;
        }
        caseEQQAPIQQNOTINSTALLED:
        {
            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"未安装手Q"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
            [msgbox show];
            
            break;
        }
        caseEQQAPIQQNOTSUPPORTAPI:
        {
            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"API接口不支持"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
            [msgbox show];
            
            break;
        }
        caseEQQAPISENDFAILD:
        {
            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"发送失败"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
            [msgbox show];
            
            break;
        }
        default:
        {
            break;
        }
    }
}

到此qq和微信分享的集成就告一段落.但是在编译过程中笔者出现了一个问题,就是qqSDK中的其他.h文件都能找的,只有QQApiInterface.h编译not found
然后就开始着手处理,各种添加寻找.h的方法都尝试过.但是千回百转就是找不到解决方案,个中艰辛,难以言表.........最后仔细检查编译错误的原因,发现时在tests预编译时出现了错误,找的了问题根源,然后那就在tests中给他添加路径好了:

找的Targets中的***Tests文件
进入build setting 在其中的Framework Search Paths和Header Search Path 中全部都给它添加了qqSdk的路径,说的这么清楚,它再找不到简直就是对不起世界了!!!
终于解决,编译通过!

这些就是遇到的比较棘手的问题,其他问题都比较常见,也好解决,这里就不多言了. 

OK! Good Luck!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值