首先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

#import

#import

#import "TencentOpenAPI.framework/Headers/TencentOAuth.h"

大概也就上边这些,就足够

然后首先在你分享的代码前加上这一句,类似于微信以及微博的注册appid,但是QQ的比较奇葩,也可能是我写的就比较奇葩,其中的调用方法在下面,直接拿过来用就好了

TencentOAuth * tencentOAuth = [[TencentOAuthalloc]initWithAppId:AppIDForQQandDelegate:self];

下面是分享网络图片的代码,我分享的是新闻类的所以在初始化的时候选用了

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,1612991872&os=2035090878,1902782440&adpicid=0&ln=1000&fr=acint&fmq=1422327488759_R&ic=&s=&se=&sme=0&tab=&width=&height=&face=&ist=&jit=&cg=&objurl=http://img4.duitang.com/uploads/item/201207/26/20120726071437_BhyLf.thumb.600_0.jpeg&fromurl=ippr_z2C$qAzdH3FAzdH3F4_z&e3B17tpwg2_z&e3Bv54AzdH3Frj5rsjAzdH3F4ks52AzdH3F8cml9anmnAzdH3F1jpwtsAzdH3F";

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];

//}


4.分享邮件以及短信

//- (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文档附件

//

//

//

//

//

//

//

//    // 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];

//}

iOS集成QQ、微信、微博、短信、邮件分享(非第三方集成)相关推荐

  1. 三方支付四方支付聚合支付系统 集成 支付宝分账 代付 多商户 短信邮件 谷歌令牌验证

    三方 四方支付聚合系统 集成 支付宝分账 短信 邮件 谷歌令牌多种验证 1.系统为成熟运营版,完美对接邮件系统2.短信系统为阿里和短信宝,可多通道切换 3.增加安全机制集成了谷歌令牌 4.成熟的商户, ...

  2. 三分钟实现Prometheus电话短信邮件钉钉飞书企业微信报警

    Prometheus是现在企业用的比较多的开源监控系统,Prometheus电话短信报警更是运维不可缺少的报警渠道,Spug推送助手针对Prometheus内置好了报警模板,可以通过简单的配置就可以实 ...

  3. 仿微信、短信、QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现)

    效果图如下: 仿微信.短信.来电未接数目.QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现).这种实现方式主要有两种途径:(1)重写View的onDraw().(2)写布 ...

  4. 应用跳转(打电话/短信/邮件/浏览器/其他应用)

    简介 app中的跳转,分两种情况.第一种是启动内置的应用,一般的电话,浏览器,短信和邮件可以直接调用并添加参数. 第二种, 打开另一个外置的 app,如自己开发的应用,qq 微信微博等. 这些跳转都是 ...

  5. Android 集成Mob实现手机短信验证码

    项目中集成MOB.com提供的三方短信SDK. 当然这些短信都是免费的.并且可以在您申请的MOB.com后台去查看短信注册用户的相关信息. 这篇文后半部分会提供一个简单的验证短信Demo,有界面,当然 ...

  6. Winform开发框架之通用短信邮件通知模块

    在做Winform项目的时候,一直有一个梦想,就是希望把所有的组件模块组合即可组装成一个完整的项目系统(或者至少可以大部分完成).在之前介绍的<Winform开发框架之通用附件管理模块>里 ...

  7. [系统集成] RT(Request Tracker)执行自定义脚本及发送微信、短信的实现方法

    RT(Request Tracker)是一个基于 Perl 语言的开源状态跟踪和工作流系统,支持审批.权限管理等功能,中文化支持的也不错,可以作为企业的流程审批系统使用.可惜的是,该系统在国内使用的不 ...

  8. SAP中用json数据格式调用http接口发送短信邮件案例

    在系统 VL02N 交货过账后触发发送邮件.短信的功能,短信邮件接口是经过第三方系统封装,然后开发出的API接口. 请求地址: http://180.167.01.01/ns/sends 请求方式: ...

  9. 使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题

    使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 参考文章: (1)使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 (2)https://www.cnblog ...

  10. Oauth2.0 QQ微信微博实现第三方登陆

    一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...

最新文章

  1. Node.js express 之mongoose 从异步回调函数返回值,类似于同步
  2. 运算放大器在超高频信号作用下的偏移量的变化
  3. Ubuntu16.04安装Pycharm2017.2
  4. jenkins详细设置(二)
  5. 几大科技公司在VR方面的布局是怎么样的?
  6. springboot listener_看完这份springboot 全套面试提升宝典,面试不带怕的
  7. mysql客户端重置密码是多少,mysql重置root密码
  8. python java web前端 net 移动开发_JavaScript超越了Java,c,python等等成为Stack Overflow上最热门的...
  9. php正则匹配js中变量_PHP正则表达式核心技术完全详解 第12节 [附加知识] 断言匹配...
  10. (转)分布式文件存储FastDFS(二)FastDFS安装
  11. mysql并行dml_MySql的回顾九DML表数据的增,删,改,与DDL库表的增删改,约束
  12. Tomcat + hexo 搭建博客
  13. python调用matlab绘图_python初步调用MATLAB及网址存档
  14. 社会学概论(本专)【1】
  15. python 化学_Python趣用—配平化学方程式!
  16. 在地化和本土化的区别_本地化和翻译的本质区别在哪里?
  17. edgex-ui中文版下载
  18. 读数据库版本的、利用K-means聚类方法做经纬度聚合
  19. 机械行业ERP系统生产订单管理 分享式操作轻松协同
  20. Logback设置日志级别

热门文章

  1. 人工智能导论 基础搜索算法
  2. 嫌画笔长得不好看,今天教你如何隐藏Python画笔!
  3. 如何正确使用机器学习中的训练集、验证集和测试集?
  4. js小游戏 - 消灭星星
  5. Android Watchdog 狗子到底做了啥
  6. 强力推荐一个学习coding的网站,怒赞!!
  7. TP5学习(十二):安全
  8. 【生成对抗网络】基于DCGAN的二次元人物头像生成(TensorFlow2)
  9. 我的成长轨迹:文曲星之恋
  10. 小程序网络请求wx.request总结