iOS 单独集成qq和微信分享sdk的方法
2016-09-09 09:37
501 查看
最近在做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!
相关文章推荐
- ios 单独集成qq和微信分享sdk的方法
- 不集成QQ、微信分享官方SDK 分享方法
- iOS新浪微博 微信好友、微信朋友圈、QQ自身sdk分享方法
- iOS集成QQ、微信、微博、短信、邮件分享(非第三方集成)
- iOS之OC使用原生控件实现分享到QQ、微信、短信、微博等的两种方法
- iOS开发009 iOS快速简单集成微信QQ微博分享
- iOS单独集成QQ分享功能
- iOS 9中需要使用 QQ/QQ空间/支付宝/微信SDK 的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码
- iOS使用ShareSDK集成QQ,微信,微博等第三方分享
- iOS:判断设备上是否安装微信或qq 集成微信SDK的时候判断是否安装微信 基于ShareSDK
- iOS开发 - 微信之简单文本分享(集成官方SDK)
- iOS使用ShareSDK集成QQ,微信,微博等第三方分享
- Android 微信,QQ,新浪三方登录及分享官方SDK集成
- ios 微信分享,QQ分享,微博分享集成
- Android使用友盟集成QQ、微信、微博等第三方分享与登录方法详解
- iOS - 友盟集成QQ分享的AppID转换16进制的方法
- iOS集成QQ、微信、微博、短信、邮件分享(非第三方集成)
- Android集成友盟分享SDK出现的 "微信发送被拒绝"" 的错误的处理方法
- iOS集成QQ、微信、微博、短信、邮件分享(非第三方集成)
- 解决iOS app集成共享QQ场地,微信的朋友,朋友等功能圈,不能采用苹果公司的审计问题