APP中需要将文件分享给QQ和微信好友,常用下面这两种方式。
1、使用系统的UIActivityViewController类发送
2、使用QQ和微信的API分享

UIActivityViewController分享的样式如下:

下面主要一下分享文件到QQ和微信好友如何实现

[API文档]

QQ互联
https://wiki.connect.qq.com/
微信开放平台
https://open.weixin.qq.com

[开发信息编辑]

URL Schema填写QQ+转化成十六进制的App ID(附上一个转换网址),转换后的App ID不足八位则前面补0凑齐。

QQ互联

微信开放平台

若公司有多个app,这里设置Universal Links时需要用path区分. 比如:

https://www.jadinec.com/jiding/
https://www.jadinec.com/jisu/

[Universal Links]

QQ SDK版本V3.3.6、微信SDK版本V1.8.6.1之后,接入SDK后应用中需要处理Universal Links拉起APP功能。
不处理Universal Links时,微信还能正常分享,但QQ分享时会报错“设备未授权 (错误码:25105)”。

创建并上传apple-app-site-association文件到服务器

创建一个名为apple-app-site-association的文件,没有后缀,但是内容是json格式。apps必须设置为[],appID的结构为TeamID.bundleID,其中 Team ID 在第一步已经获取到了,bundleID 可以设置唯一ID也可以设置通配符ID,关键就是Bundle ID是否设置了Associated Domains Enable
上传时的MINI TYPE一定是application/json。上传到服务器的根目录下或者.well-known目录下,且能通过网址https://<fully qualified domain>/apple-app-site-association或者https://<fully qualified domain>/.well-known/apple-app-site-association访问这个文件,不论是否是下载还是直接在浏览器中能直接看到文件内容。

appID的格式是Team ID.Bundle ID,其中Team ID可以登录开发网站(https://developer.apple.com),点击App IDS从列表进入详情查看(如图)。

单个APP时配置:

{"applinks": {"apps": [],"details": [{"appID": "CBQFB991WG.com.maojitech.jiding","paths": ["*","/qq_conn/101888113/*"]}]}
}

多个APP时配置:
paths中第一个对象是微信的path, 第二个是qq的path

{"applinks": {"apps": [],"details": [{"appID": "CBQFB991WG.com.maojitech.jiding","paths": ["/jiding/*","/qq_conn/1019489322/*"]},{"appID": "CBQFB991WG.com.maojitech.jisu","paths": ["/jisu/*","/qq_conn/101971011/*"]}]}
}

[代码处理]

详细的集成可以去看集成文档,这里用部分代码说明一下操作。
先添加Associated Domains

AppDelegate

#import "AppDelegate.h"
#import <TencentOpenAPI/TencentOAuth.h>
#import "WXApi.h"static NSString *TencentAppId = @"101880000";
static NSString *JBSWeixinAppId = @"wx635f2582ac160000";@interface AppDelegate () @end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {...// QQ分享[[TencentOAuth alloc] initWithAppId:TencentAppId andDelegate:nil];// 微信分享[WXApi registerApp:JBSWeixinAppId withDescription:@"甲丁"];
}#pragma mark - QQ分享- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {NSString *string =[url absoluteString];if ([string hasPrefix:JBSWeixinAppId]){return [WXApi handleOpenURL:url delegate:self];}else if ([string hasPrefix:TencentAppId]){return[TencentOAuth HandleOpenURL:url];}return NO;
}- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {NSString *string =[url absoluteString];if ([string hasPrefix:JBSWeixinAppId]){return [WXApi handleOpenURL:url delegate:self];}else if ([string hasPrefix:TencentAppId]){return[TencentOAuth HandleOpenURL:url];}return NO;
}- (void)onReq:(BaseReq *)req {}- (void)onResp:(BaseResp *)resp {if ([resp isKindOfClass:[SendMessageToWXResp class]]) {switch (resp.errCode) {case WXSuccess:// 分享成功break;case WXErrCodeUserCancel:// 用户取消分享break;default:// 分享失败break;}}
}@end

QQ的SDK分享文件到好友现在实现不了,这里采用新闻的方式在分享。

//QQ分享
#import  <TencentOpenAPI/QQApiInterfaceObject.h>
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterface.h>@weakify(self);
self.rm_navgationBar = [RMNavigationBar navWithTitle:_fileName rightItem:@"qrCode_Share" rightAction:^{@strongify(self);// 分享IWShareFileViewController *share = [IWShareFileViewController initFromXib];// share.modalPresentationStyle = UIModalPresentationFullScreen;share.modalPresentationStyle = UIModalPresentationOverCurrentContext;share.tapShareBlock = ^(NSInteger tag) {dispatch_async(dispatch_get_global_queue(0, 0), ^{if (tag == 1000) { // QQ[self tencentShare];} else if (tag == 1001) { // 微信[self shareWeChatLink];}});};[self presentViewController:share animated:NO completion:nil];
} backAction:^{@strongify(self);[self.navigationController popViewControllerAnimated:YES];
}];/// 文件 分享到QQ
- (void)tencentShare {NSString *link = _url?:@"";NSString *title = _fileName?:@"";//NSData *fileData = [NSData dataWithContentsOfURL:[NSURL URLWithString:link]];//NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://dss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3471770554,1562873257&fm=26&gp=0.jpg"]];dispatch_async(dispatch_get_main_queue(), ^{if (![TencentOAuth iphoneQQInstalled]) {// [self showAlert:@"检查到您没有安装腾讯QQ,请先安装QQ再分享。"];[MBProgressHUD showError:@"检查到您没有安装腾讯QQ,请先安装QQ再分享。"];} else {/*NSURL *newsUrl = [NSURL URLWithString:[link stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];// QQ无法直接发送文件QQApiFileObject *newsObj = [QQApiFileObject objectWithData:fileDatapreviewImageData:niltitle:titledescription:title];newsObj.fileName = title;[newsObj setCflag:kQQAPICtrlFlagQZoneShareOnStart];*/// 使用网络连接的方式分享文件NSString *imgName = @"";if ([title containsString:@".xlsm"] || [title containsString:@".xls"] || [title containsString:@".XLSM"] || [title containsString:@".XLS"]) {imgName = @"Microsoft-Excel";} else if ([title containsString:@".docx"] || [title containsString:@".doc"] || [title containsString:@".DOCX"] || [title containsString:@".DOC"]) {imgName = @"Microsoft-WORD";} else if ([title containsString:@".pptx"] || [title containsString:@".ppt"] || [title containsString:@".PPTX"] || [title containsString:@".PPT"]) {imgName = @"Microsoft-PPT";} else if ([title containsString:@".pdf"] || [title containsString:@".PDF"]) {imgName = @"Microsoft-pdf";}NSData *imageData;if ([imgName isEqualToString:@""]) {} else {UIImage *image = [UIImage imageNamed:imgName];imageData = UIImagePNGRepresentation(image);}// QQApiURLObject *newsObj = [QQApiURLObject objectWithURL:[NSURL URLWithString:link] title:title description:@"" previewImageData:imageData targetContentType:QQApiURLTargetTypeNews];// [newsObj setCflag:kQQAPICtrlFlagQQShare];QQApiNewsObject *newsObj = [QQApiNewsObject objectWithURL:[NSURL URLWithString:link] title:title description:nil previewImageData:imageData];[newsObj setCflag:kQQAPICtrlFlagQQShare];SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];QQApiSendResultCode sent = [QQApiInterface sendReq:req];// QQApiSendResultCode sent = [QQApiInterface SendReqToQZone:req];}});
}/// 文件 分享到微信
- (void)shareWeChatLink {NSString *link = _url?:@"";NSString *title = _fileName?:@"";NSData *fileData = [NSData dataWithContentsOfURL:[NSURL URLWithString:link]];dispatch_async(dispatch_get_main_queue(), ^{SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];WXMediaMessage *message = [WXMediaMessage message];// 多媒体数据对象,可以为WXImageObject、WXMusicObject、WXVideoObject、WXWebpageObject、 WXAppExtendObject、WXFileObject、WXTextObject等WXFileObject *ext = [WXFileObject object];NSString *hz = [link componentsSeparatedByString:@"."].lastObject;ext.fileExtension = hz?:@"";ext.fileData = fileData;// 多媒体数据对象message.mediaObject = ext;// 分享的链接介绍文本// message.description = @"";// 分享的链接标题message.title = title;// 给分享链接设置小图标// [message setThumbImage:[UIImage imageNamed:@""]];// 标记不是分享文本req.bText = NO;// 设置message对象req.message = message;// 分享目标场景// 发送到聊天界面 WXSceneSession;// 发送到朋友圈 WXSceneTimeline;// 发送到微信收藏 WXSceneFavorite;req.scene = WXSceneSession;// 发送微信分享BOOL isInstalled = [WXApi sendReq:req];if (isInstalled == NO) {// 调用微信分享识别 如:没有安装微信}});
}

[效果]

配置完成后,在备忘录输入链接,长按后会提示”在‘APP‘中打开“。用Safari打开网址时,顶部也会提示在”APP“中打开。

[TO]

微信和QQ的 Universal Link 配置
https://www.jianshu.com/p/abbdd9285bf6

微信开放文档
https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html

iOS中如何储存和分享文件给微信和QQ好友
https://www.jianshu.com/p/4f5f36658996
iOS-QQ分享功能实现
https://www.jianshu.com/p/581edba36b5b
iOS开发-微信分享
https://www.jianshu.com/p/d0d7c94bfd68

iOS - 开发针对iOS13QQ分享功能,弹框提示设备未授权 (错误码:25105)
https://blog.csdn.net/zhonggaorong/article/details/105094627
iOS Universal Links教程
https://www.jianshu.com/p/f1a1e1833eec
Universal Links 实现细节
https://www.jianshu.com/p/a42e3cdf550b

[iOS]分享文件到QQ好友或微信好友相关推荐

  1. QQ、QQ空间、微信好友、微信朋友圈、新浪微博的分享。

    对于分享这一块我也是研究了很久,本来打算用第3方的来做的.最后还是坚持下来了,决定直接用官方的. 首先给大家推荐一下一个第三方做分享的,现在这个第三方确实很不错,有时候我都想放弃官方的用他的来做.因为 ...

  2. H5手机QQ分享到手Q、QQ空间、微信好友、朋友圈础通用接口

    H5手Q分享通用接口代码片段 <meta itemprop="name" content="网页标题"> <meta itemprop=&qu ...

  3. qq空间、微信好友、邮件、短信分享

    首先要在qq和微信开发者平台申请key才可以用,qq的key我们这里用qq123456789.微信的key我们用wx12345679 下载微信和qq开发者中心的类库在appdelegate.h文件中导 ...

  4. Android分享文件到qq没反应,Android 微信,qq分享文件

    10M以下,建议进制算法为*1000以避免1024发生分享错误 将文件变成二进制数组,然后塞进去就OK了,我这边是直接传入的base64码省略了部分步骤 qq分享类似,不过是用intent来的 只能分 ...

  5. 前端开发第三方分享/登录功能备忘(facebook、weibo、QQ、weixin微信好友或者朋友圈)

    ##前端开发第三方分享[/三方登录]功能备忘(facebook脸书.Whatsapp.weibo.QQ.weixin好友或者朋友圈) 平台 支持域名 备案 切换域名调整 平台名称 注意事项

  6. android 一键接入新浪微博,腾讯微博,人人网,QQ空间,微信好友圈 (只需5分钟)

    前言: 目前的移动产品,必须整合第三方分享功能,利用其关系链进行病毒式传播... 正文: 由于已经封装了一个分享SDK,所以开发者需要的操作是: 1. 申请各个平台的App_Key,App_Secre ...

  7. iOS分享(微信、qq、微博)

    本文会介绍iOS常用的第三方分享(本文是分享带标题及藐视的h5地址),包括微信.QQ.微博,文章前部分会介绍每个平台的API集成及使用方法,文章后部分会介绍对三方分享(或者登陆)集成一起的三方框架Sh ...

  8. HTML5 实现分享功能(QQ 微信 微博)

    转:http://www.guaichai.com/web/htmlcss/7649.html 今天为大家介绍HTML5如何实现分享功能,有需要的小伙伴参考一下,具体内容如下:这是分享按钮:<b ...

  9. CAD图纸转换该如何分享给Q Q、微信好友呢?

    在日常的CAD图制图传输的工作中,我们在电脑端转换CAD图纸格式后,可能会需要分享给Q Q.微信好友.这时候有没有方便好用的方法呢?今天小编给大家介绍CAD转换器的一个特 别好用的技 巧方法,可以方便 ...

最新文章

  1. linux正则表达式的使用方法,Linux中基本正则表达式
  2. vrf名称_如何使用VRF(可验证随机函数)在以太坊上生成随机数
  3. FTP 服务器Serv-U:Permission denied解决
  4. 10个可以简化开发过程的MySQL工具
  5. Python str 函数 - Python零基础入门教程
  6. 初始JAVA--约定俗成的命名规则
  7. 经典排序算法(Java版)
  8. z-blog php 静态设置,Nginx的Z-Blog的伪静态配置方法
  9. 在Cocos2d-x中使用CocosBuilder
  10. php laypage 开发demo,laypage+laytpl示例
  11. 超小型遥控直升机飞行姿态稳定器的设计
  12. 微信读书产品分析报告(附:信息结构图、功能结构图、产品结构图)
  13. 网络传输的两种方式——同步传输和异步传输的区别
  14. /usr/bin/ld: 找不到 -lgcc_s怎么办?
  15. CISSP考点拾遗——SDLC(1)
  16. 手写算法-python代码实现Ridge(L2正则项)回归
  17. 大学计算机制作九九乘法表,用Excel制作九九乘法表(一)
  18. 分享一个MAC下避开百度网盘限速下载的方法,三步操作永久生效
  19. 2020知道答案C语言,C语言及逆向2020知到答案
  20. 如何写好软件项目的工作计划-项目假设(三)

热门文章

  1. 在升龙备份方法_[求助]关于使用再生龙备份系统的问题
  2. ceph学习之路----OSD DNE状态处理
  3. 前端实现扫码数据展示
  4. 【Nand2tetris】Project01
  5. QQ群怎么快速封群,如何举报骗子QQ群可以使之封群?
  6. oracle数据库怎么进行树查询,oracle树查询的实现
  7. 鸿蒙应用开发教程第12期:被央视点名!打破垄断志在必得?
  8. CSDN使用Markdown编辑器
  9. 我的理想高中作文理想是计算机,我的理想高中优秀作文范文
  10. (一)淘宝首页的代码(周六一天敲出来的)html结构展示