您的位置:首页 > 移动开发 > 微信开发

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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐