写的比较仓促,主要是自己看,有不明白的就留言给我吧
首先appdelegate中加入
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:self] || [TencentOAuth HandleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];
// return [WXApi handleOpenURL:url delegate:self] || [QQApi handleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:self] || [TencentOAuth HandleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];
// return [WXApi handleOpenURL:url delegate:self] || [QQApi handleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];
}
1、QQ分享(QQ空间、QQ会话)
首先在Targets中的info中选择URL Types添加QQ的信息,在identifier中写tencent 在URL Schemes中添加你的你们公司申请的appid,格式为"tencent+appid"。
你可以下载一份QQ提供的Demo看看,在你需要分享的页面导入其头文件
#import "TencentRequest.h"
#import "TencentOpenAPI/QQApiInterface.h"
#import <objc/runtime.h>
#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMessageComposeViewController.h>
#import "TencentOpenAPI.framework/Headers/TencentOAuth.h"
NSString *url =@"sports.qq.com/nba/";
NSString *utf8String =@"http://image.baidu.com/i?ct=503316480&z=0&tn=baiduimagedetail&ipn=d&word=越前龙马&step_word=越前龙马&pn=33&spn=0&di=91758034940&pi=&rn=1&is=&istype=&ie=utf-8&oe=utf-8&in=32663&cl=2&lm=-1&st=&cs=3048474619%2C1612991872&os=2035090878%2C1902782440&adpicid=0&ln=1000&fr=acint&fmq=1422327488759_R&ic=&s=&se=&sme=0&tab=&width=&height=&face=&ist=&jit=&cg=&objurl=http%3A%2F%2Fimg4.duitang.com%2Fuploads%2Fitem%2F201207%2F26%2F20120726071437_BhyLf.thumb.600_0.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3F4_z%26e3B17tpwg2_z%26e3Bv54AzdH3Frj5rsjAzdH3F4ks52AzdH3F8cml9anmnAzdH3F1jpwtsAzdH3F";
QQApiNewsObject *newsObj = [QQApiNewsObject objectWithURL:[NSURL URLWithString:url] title:@"腾讯空间分享测试Demo" description:@"貌似有点明白了" previewImageURL:[NSURL URLWithString:utf8String]];
[newsObj setCflag:[self shareControlFlags]];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
QQApiSendResultCode sent =0;
sent = [QQApiInterfaceSendReqToQZone:req];
// sent = [QQApiInterface sendReq:req];//这是分享到QQ
[selfhandleSendResult:sent];//这是分享到空间
//下面是分享本地图片的代码,其实主要是初始化方式不同,在此不再多说
NSString *imagePath = [[NSBundlemainBundle] pathForResource:@"LOGO"ofType:@"png"];
NSData *imgData = [NSData dataWithContentsOfFile:imagePath];
QQApiNewsObject *imgObj = [QQApiNewsObjectobjectWithURL:[NSURLURLWithString:url]title:@"腾讯分享测试Demo"description:@"我擦。快来啪啪啪"previewImageData:imgData];
[imgObj setCflag:[selfshareControlFlags]];
SendMessageToQQReq *req = [SendMessageToQQReqreqWithContent:imgObj];
QQApiSendResultCode sent =0;
// sent = [QQApiInterface SendReqToQZone:req];//空间分享
sent = [QQApiInterfacesendReq:req];//QQ分享
[selfhandleSendResult:sent];
- (uint64_t)shareControlFlags
{
NSDictionary *context = [self currentNavContext];
__block uint64_t cflag = 0;
[context enumerateKeysAndObjectsUsingBlock:^(id key,id obj, BOOL *stop) {
if ([obj isKindOfClass:[NSNumberclass]] &&
[key isKindOfClass:[NSString class]] &&
[key hasPrefix:@"kQQAPICtrlFlag"])
{
cflag |= [objunsignedIntValue];
}
}];
return cflag;
}
- (NSMutableDictionary *)currentNavContext
{
UINavigationController *navCtrl = [selfnavigationController];
NSMutableDictionary *context = objc_getAssociatedObject(navCtrl,objc_unretainedPointer(@"currentNavContext"));
if (nil == context)
{
context = [NSMutableDictionarydictionaryWithCapacity:3];
objc_setAssociatedObject(navCtrl,objc_unretainedPointer(@"currentNavContext"), context,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return context;
}
- (void)handleSendResult:(QQApiSendResultCode)sendResult
{
switch (sendResult)
{
caseEQQAPIAPPNOTREGISTED:
{
UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"App未注册"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
[msgboxshow];
break;
}
caseEQQAPIMESSAGECONTENTINVALID:
caseEQQAPIMESSAGECONTENTNULL:
caseEQQAPIMESSAGETYPEINVALID:
{
UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"发送参数错误"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
[msgboxshow];
break;
}
caseEQQAPIQQNOTINSTALLED:
{
UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"未安装手Q"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
[msgboxshow];
break;
}
caseEQQAPIQQNOTSUPPORTAPI:
{
UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"API接口不支持"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
[msgboxshow];
break;
}
caseEQQAPISENDFAILD:
{
UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"发送失败"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
[msgboxshow];
break;
}
caseEQQAPIQZONENOTSUPPORTTEXT:
{
UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"空间分享不支持纯文本分享,请使用图文分享"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
[msgboxshow];
break;
}
caseEQQAPIQZONENOTSUPPORTIMAGE:
{
UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"空间分享不支持纯图片分享,请使用图文分享"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
[msgboxshow];
break;
}
default:
{
break;
}
}
}
2.新浪微博
首先同样在你的Targets中的Info中选择URL Types,ldentifier填写com.weibo Url Schemes中写wb+appid
在appdelegate中的didfinishlaunch中注册微博的appid
[WeiboSDKregisterApp:@"你的appid"];
分享代码如下
#pragma mark - 分享到微博
- (void)shareFriend{
AppDelegate *myDelegate =(AppDelegate*)[[UIApplicationsharedApplication] delegate];
WBAuthorizeRequest *authRequest = [WBAuthorizeRequestrequest];
authRequest.redirectURI =@"www.baidu.com";
authRequest.scope =@"all";
WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequestrequestWithMessage:[selfmessageToShare]authInfo:authRequestaccess_token:myDelegate.wbtoken];
request.userInfo =@{@"ShareMessageFrom":@"ChatRootViewController",
@"Other_Info_1": [NSNumbernumberWithInt:123],
@"Other_Info_2": @[@"obj1",@"obj2"],
@"Other_Info_3":@{@"key1": @"obj1", @"key2": @"obj2"}};
// request.shouldOpenWeiboAppInstallPageIfNotInstalled = NO;
[WeiboSDKsendRequest:request];
}
- (WBMessageObject *)messageToShare
{
WBMessageObject *message = [WBMessageObjectmessage];
// if (self.textSwitch.on)
// {
// message.text = NSLocalizedString(@"测试通过WeiboSDK发送文字到微博!", nil);
// }
//
// if (self.imageSwitch.on)
// {
// WBImageObject *image = [WBImageObject object];
// image.imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image_1" ofType:@"jpg"]];
// message.imageObject = image;
// }
//
// if (self.mediaSwitch.on)
// {
WBWebpageObject *webpage = [WBWebpageObjectobject];
webpage.objectID =@"identifier1";
webpage.title =NSLocalizedString(@"分享网页标题wwww",nil);
webpage.description = [NSStringstringWithFormat:NSLocalizedString(@"测试来自你的应用名称-%.0f",nil), [[NSDatedate] timeIntervalSince1970]];
webpage.thumbnailData = [NSDatadataWithContentsOfFile:[[NSBundlemainBundle] pathForResource:@"生气"ofType:@"png"]];
webpage.webpageUrl =@"http://www.baidu.com";
message.mediaObject = webpage;
// }
return message;
}
3.微信(跟微博几乎一样)
#pragma mark - 分享朋友圈
//- (void)shareFriend{
// WXMediaMessage *message = [WXMediaMessage message];
// message.title = @"专访王尼玛:产品之上的毁我世界观";
// message.description = @"微信的平台化发展方向是否真的会让这个原本简洁的产品变得臃肿?在国际化发展方向上,微信面临的问题真的是文化差异壁垒吗?腾讯高级副总裁、微信产品负责人张小龙给出了自己的回复。";
// [message setThumbImage:[UIImage imageNamed:@"res2.png"]];
//
// WXWebpageObject *ext = [WXWebpageObject object];
// ext.webpageUrl = @"http://tech.qq.com/zt2012/tmtdecode/252.htm";
//
// message.mediaObject = ext;
// message.mediaTagName = @"WECHAT_TAG_JUMP_SHOWRANK";
//
// SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
// req.bText = NO;
// req.message = message;
// req.scene = WXSceneTimeline;
// [WXApi sendReq:req];
//}
//- (void)shareFriend{
// Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
// if (mailClass != nil) {
// if ([mailClass canSendMail]) {
// [self displayMailComposerSheet];
// } else {
// UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@""message:@"设备不支持邮件功能" delegate:self cancelButtonTitle:@"确定"otherButtonTitles:nil];
//
// [alert show];
// }
// } else {
//
// }
//}
//
//-(void)displayMailComposerSheet
//
//{
//
// MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
//
//
//
// picker.mailComposeDelegate =self;
//
//
//
// [picker setSubject:@"文件分享"];
// // Set up recipients
//
// NSArray *toRecipients = [NSArray arrayWithObject:@"first@qq.com"];
//
// NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@qq.com",@"third@qq.com", nil];
//
// NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@qq.com"];
//
//
//
//
//
// [picker setToRecipients:toRecipients];
//
// [picker setCcRecipients:ccRecipients];
//
// [picker setBccRecipients:bccRecipients];
//
// //发送图片附件
//
// //NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"jpg"];
//
// //NSData *myData = [NSData dataWithContentsOfFile:path];
//
// //[picker addAttachmentData:myData mimeType:@"image/jpeg" fileName:@"rainy.jpg"];
//
//
//
// //发送txt文本附件
//
// //NSString *path = [[NSBundle mainBundle] pathForResource:@"MyText" ofType:@"txt"];
//
// //NSData *myData = [NSData dataWithContentsOfFile:path];
//
// //[picker addAttachmentData:myData mimeType:@"text/txt" fileName:@"MyText.txt"];
//
//
//
// //发送doc文本附件
//
// //NSString *path = [[NSBundle mainBundle] pathForResource:@"MyText" ofType:@"doc"];
//
// //NSData *myData = [NSData dataWithContentsOfFile:path];
//
// //[picker addAttachmentData:myData mimeType:@"text/doc" fileName:@"MyText.doc"];
//
//
//
// //发送pdf文档附件
//
// /*
//
// NSString *path = [[NSBundlemainBundle] pathForResource:@"CodeSigningGuide"ofType:@"pdf"];
//
// NSData *myData = [NSDatadataWithContentsOfFile:path];
//
// [pickeraddAttachmentData:myData mimeType:@"file/pdf"fileName:@"rainy.pdf"];
//
// */
//
//
//
//
//
// // Fill out the email body text
//
// NSString *emailBody =[NSString stringWithFormat:@"我分享了文件给您,地址是www.imyeliao.com"] ;
//
// [picker setMessageBody:emailBody isHTML:NO];
//
// [self presentViewController:picker animated:YES completion:nil];
//}
//
//- (void)mailComposeController:(MFMailComposeViewController*)controller
//
// didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
//
//
//
//
//
// // Notifies users about errors associated with the interface
//
// switch (result)
//
// {
//
// caseMFMailComposeResultCancelled:
//
// NSLog(@"Result: Mail sending canceled");
//
// break;
//
// caseMFMailComposeResultSaved:
//
// NSLog(@"Result: Mail saved");
//
// break;
//
// caseMFMailComposeResultSent:
//
// NSLog(@"Result: Mail sent");
//
// break;
//
// caseMFMailComposeResultFailed:
//
// NSLog(@"Result: Mail sending failed");
//
// break;
//
// default:
//
// NSLog(@"Result: Mail not sent");
//
// break;
//
// }
//
// [self dismissViewControllerAnimated:YES completion:nil];
//
//}
////短信
//
//-(void)shareFriend{
//
// Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
//
//
//
// if (messageClass != nil) {
//
// // Check whether the current device is configured for sending SMS messages
//
// if ([messageClass canSendText]) {
//
// [self displaySMSComposerSheet];
//
// }
//
// else {
//
// UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@""message:@"设备不支持短信功能" delegate:self cancelButtonTitle:@"确定"otherButtonTitles:nil];
//
// [alert show];
//
//
//
//
// }
//
// }
//
// else {
//
// }
//
//}
//
//-(void)displaySMSComposerSheet
//
//{
//
// MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
//
// picker.messageComposeDelegate =self;
//
// NSString *smsBody =[NSString stringWithFormat:@"我分享了文件给您,地址是www.imyeliao.com"] ;
//
// picker.body=smsBody;
//
// [self presentViewController:picker animated:YES completion:nil];
//
//}
//
//- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
// // Notifies users about errors associated with the interface
// switch (result) {
// case MessageComposeResultCancelled:
// if (DEBUG) NSLog(@"Result: canceled");
// break;
// case MessageComposeResultSent:
// if (DEBUG) NSLog(@"Result: Sent");
// break;
// case MessageComposeResultFailed:
// if (DEBUG) NSLog(@"Result: Failed");
// break;
// default:
// break;
// }
// [self dismissViewControllerAnimated:YES completion:nil];
//}