[iOS]分享文件到QQ好友或微信好友
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好友或微信好友相关推荐
- QQ、QQ空间、微信好友、微信朋友圈、新浪微博的分享。
对于分享这一块我也是研究了很久,本来打算用第3方的来做的.最后还是坚持下来了,决定直接用官方的. 首先给大家推荐一下一个第三方做分享的,现在这个第三方确实很不错,有时候我都想放弃官方的用他的来做.因为 ...
- H5手机QQ分享到手Q、QQ空间、微信好友、朋友圈础通用接口
H5手Q分享通用接口代码片段 <meta itemprop="name" content="网页标题"> <meta itemprop=&qu ...
- qq空间、微信好友、邮件、短信分享
首先要在qq和微信开发者平台申请key才可以用,qq的key我们这里用qq123456789.微信的key我们用wx12345679 下载微信和qq开发者中心的类库在appdelegate.h文件中导 ...
- Android分享文件到qq没反应,Android 微信,qq分享文件
10M以下,建议进制算法为*1000以避免1024发生分享错误 将文件变成二进制数组,然后塞进去就OK了,我这边是直接传入的base64码省略了部分步骤 qq分享类似,不过是用intent来的 只能分 ...
- 前端开发第三方分享/登录功能备忘(facebook、weibo、QQ、weixin微信好友或者朋友圈)
##前端开发第三方分享[/三方登录]功能备忘(facebook脸书.Whatsapp.weibo.QQ.weixin好友或者朋友圈) 平台 支持域名 备案 切换域名调整 平台名称 注意事项
- android 一键接入新浪微博,腾讯微博,人人网,QQ空间,微信好友圈 (只需5分钟)
前言: 目前的移动产品,必须整合第三方分享功能,利用其关系链进行病毒式传播... 正文: 由于已经封装了一个分享SDK,所以开发者需要的操作是: 1. 申请各个平台的App_Key,App_Secre ...
- iOS分享(微信、qq、微博)
本文会介绍iOS常用的第三方分享(本文是分享带标题及藐视的h5地址),包括微信.QQ.微博,文章前部分会介绍每个平台的API集成及使用方法,文章后部分会介绍对三方分享(或者登陆)集成一起的三方框架Sh ...
- HTML5 实现分享功能(QQ 微信 微博)
转:http://www.guaichai.com/web/htmlcss/7649.html 今天为大家介绍HTML5如何实现分享功能,有需要的小伙伴参考一下,具体内容如下:这是分享按钮:<b ...
- CAD图纸转换该如何分享给Q Q、微信好友呢?
在日常的CAD图制图传输的工作中,我们在电脑端转换CAD图纸格式后,可能会需要分享给Q Q.微信好友.这时候有没有方便好用的方法呢?今天小编给大家介绍CAD转换器的一个特 别好用的技 巧方法,可以方便 ...
最新文章
- linux正则表达式的使用方法,Linux中基本正则表达式
- vrf名称_如何使用VRF(可验证随机函数)在以太坊上生成随机数
- FTP 服务器Serv-U:Permission denied解决
- 10个可以简化开发过程的MySQL工具
- Python str 函数 - Python零基础入门教程
- 初始JAVA--约定俗成的命名规则
- 经典排序算法(Java版)
- z-blog php 静态设置,Nginx的Z-Blog的伪静态配置方法
- 在Cocos2d-x中使用CocosBuilder
- php laypage 开发demo,laypage+laytpl示例
- 超小型遥控直升机飞行姿态稳定器的设计
- 微信读书产品分析报告(附:信息结构图、功能结构图、产品结构图)
- 网络传输的两种方式——同步传输和异步传输的区别
- /usr/bin/ld: 找不到 -lgcc_s怎么办?
- CISSP考点拾遗——SDLC(1)
- 手写算法-python代码实现Ridge(L2正则项)回归
- 大学计算机制作九九乘法表,用Excel制作九九乘法表(一)
- 分享一个MAC下避开百度网盘限速下载的方法,三步操作永久生效
- 2020知道答案C语言,C语言及逆向2020知到答案
- 如何写好软件项目的工作计划-项目假设(三)