2.3.0 或以上
版本的 SDK 支持 Token 鉴权,若您需要升级鉴权方式,可参考 如何从 AppSign 鉴权升级为 Token 鉴权。本节分为四个部分来介绍 ZegoDocsView SDK:
如果要实现在文件上绘制以及多端联动功能,需要引入互动白板功能,详情请参考 ZegoWhiteboardView SDK。
// 引入 ZegoDocsView SDK 头文件
#import <ZegoDocsView/ZegoDocsView.h>
初始化 SDK 时需要设置日志文件保存路径、SDK 内部数据文件保存路径、文件缓存路径,并设置运行环境。
运行环境参数需要与申请 AppID 时的对应环境保持一致。
ZegoDocsViewConfig *config = [ZegoDocsViewConfig new];
config.appID = appID;//即构 AppID
config.appSign = appSign;//即构 appSign
config.dataFolder = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/ZegoDocs"] stringByAppendingString:@"data"];//SDK 相关数据目录
config.cacheFolder = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/ZegoDocs"] stringByAppendingString:@"doc"];//SDK 相关缓存目录
config.logFolder = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/ZegoDocs"] stringByAppendingString:@"log"];//SDK 相关日志目录
[[ZegoDocsViewManager sharedInstance] initWithConfig:config completionBlock:^(ZegoDocsViewError errorCode) {
if (errorCode == ZegoDocsViewSuccess) {
NSLog(@"初始化 SDK 成功");
} else {
NSLog(@"初始化 SDK 失败 %ld",errorCode);
}
}];
如果您需要切换鉴权方式,请参考 如何从 AppSign 鉴权升级为 Token 鉴权。
监听 Token 过期通知,如果 Token 过期,需要主动更新 Token。
- (void)onTokenWillExpire:(int)remainTimeInSecond
{
NSString * token = **; //后台获取到的token
[[ZegoDocsViewManager sharedInstance] renewToken:token];
}
调用 ZegoDocsViewManager 的上传文件方法上传文件到 ZEGO 文件云服务,上传成功后会获取该文件的 fileID,开发者可以调用 ZegoDocsView 的 loadFileWithFileID 接口,传入 fileID 加载该文件。
上传的文件必须满足相应的规范:
文件请使用 Microsoft Office 2013 或以上版本编辑/保存,不支持低版本 Microsoft Office 或其他办公软件保存的文件,如 WPS、Keynote、Microsoft Office 2003 等。
文件必须是可编辑的,不支持“只读”、“加密”、或其他受保护的文档,否则会导致转码失败。
全部规范请参考 概述 - 文件规范。
文件上传分为上传 ZegoDocsViewUploadStateUpload 和格式转换 ZegoDocsViewUploadStateConvert 两个阶段。
{"upload_percent":@(0.50)}
;当前上传 100%,则 "infoDictionary" 内容为 {"upload_percent":@(1.00)}
。 {"upload_fileid":"ekxxxxxxxxv"}
。upload_fileid 对应的值即为文件 fileID。调用 uploadFile 方法上传普通文件。
//filePath 待上传文件的绝对路径,可以使用 iOS 系统API获得。
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"pdf"];
//上传文件后转码后渲染模式类型,默认为ZegoDocsViewRenderTypeVector格式,如果用户涉及到 iOS、Web、Windows、Mac、小程序各端的业务,推荐使用 ZegoDocsViewRenderTypeVectorAndIMG 模式。
ZegoDocsViewRenderType renderType = ZegoDocsViewRenderTypeVectorAndIMG;
[[ZegoDocsViewManager sharedInstance] uploadFile:filePath renderType:renderType completionBlock:^(ZegoDocsViewUploadState state, ZegoDocsViewError errorCode, NSDictionary * _Nonnull infoDictionary) {
if (errorCode == ZegoDocsViewSuccess) {
if (state == ZegoDocsViewUploadStateUpload) {
// 上传中...
NSString *uploadPercent = infoDictionary[@"upload_percent"];
if(uploadPercent.intValue == 1){
// 转码中...
}
} else if (state == ZegoDocsViewUploadStateConvert){
// 转换成功,获取到文件 fileID,可通过 "upload_fileid" 键获取 fileID
// 可以调用 ZegoDocsView 的 loadFile 接口,传入 fileID 加载文件。
NSString *fileID = infoDictionary[@"upload_fileid"];
/* 上传成功
[self.zegoDocsView loadFileWithFileID:fileID authKey:nil completionBlock:^(ZegoDocsViewError errorCode) {
NSLog(@"%d", errorCode);
}];
*/
}
} else {
// 上传失败
}
}];
通过 ZegoDocsViewCustomH5Config 设置上传 H5 文件的配置参数,并调用 uploadH5File 方法上传 H5 文件。
//文件的绝对路径,可以根据iOS API 获得
[[ZegoDocsViewManager sharedInstance] uploadH5File:[url path] config:config completionBlock:^(ZegoDocsViewUploadState state, ZegoDocsViewError errorCode, NSDictionary * _Nonnull infoDictionary) {
if (errorCode == ZegoDocsViewSuccess) {
if (state == ZegoDocsViewUploadStateUpload) {
// 上传中...
if(upload_percent.intValue == 1){
// 转码中...
}
} else if (state == ZegoDocsViewUploadStateConvert){
// 转换成功
}
} else {
// 上传失败
}
}];
创建 ZegoDocsView 并添加到视图中。
// 1. init
self.docView = [[ZegoDocsView alloc] init]; //初始化文件View
self.docView.backgroundColor = UIColor.whiteColor; //设置文件View背景颜色
[self.docView setDelegate:self]; //设置文件View 代理通知
[self.view addSubview:self.docView]; //添加到自己需要展示的View 上
// 2.设置 frame
self.docView.frame = CGRectMake(0, 0, 100, 100);
调用 ZegoDocsView 的 loadFileWithFileID 接口,传入之前上传成功后获取的 fileID 加载文件。
// fileID 在 uploadFile 成功之后获取
NSString *fileID = @"";
[self.docView loadFileWithFileID:fileID //后台获取到文件ID
authKey:@"" //鉴权key。可以为空。根据你所申请环境是否需要鉴权填入。最好是通过后台获取
completionBlock:^(ZegoDocsViewError errorCode) {
}];
当前 DocsView 已调用 loadFileWithFileID 接口加载文件后,需要先调用 unloadFile 接口卸载文件,才能再次使用 loadFileWithFileID 加载文件。
只有之前调用过 loadFileWithFileID 接口,后续才能调用 reloadFileWithCompletionBlock 接口。
// 举例:非动态PPT 跳转到第3页。
[self.docView flipPage:3 completionBlock:^(BOOL isScrollSuccess) {
NSLog(@"翻页结束");
}];
// 举例:动态PPT 跳转到第2页,第4步。
[self.docView flipPage:2 step:4 completionBlock:^(BOOL isScrollSuccess) {
NSLog(@"翻页结束");
}];
加载文件成功后,可调用 scaleDocsViewWithScaleFactor 对文件进行缩放。
[self.docsView scaleDocsViewWithScaleFactor:scaleFactor scaleOffsetX:scaleOffsetX scaleOffsetY:scaleOffsetY];
加载文件成功后,可调用 getThumbnailUrlList 获取文件缩略图。
NSArray *thumbnailUrls = [self.docsView getThumbnailUrlList];
如果开发者上传的文件是 Excel 文件,而且存在多个 sheet 页,可以使用 switchSheet 方法切换 sheet 页,sheet 页从 0 开始。
[self.docView switchSheet:0];
动态 PPT,即文件类型为 “ZegoDocsViewFileTypeDynamicPPTH5” 的文件,这种类型的文件每一页可能会有多个步骤(step)。
如果开发者上传的文件是动态 PPT 文件,可以通过 nextStepWithCompletionBlock 和 previousStepWithCompletionBlock 方法进行动态 PPT 的上一步和下一步的操作,进行动态 PPT 的上下步跳转。动态 PPT 的操作需要在文件加载完成后才能调用。
//上一步
[self.docViewFirst previousStepWithCompletionBlock:^(BOOL isScrollSuccess) {
}];
//下一步
[self.docViewFirst nextStepWithCompletionBlock:^(BOOL isScrollSuccess) {
}];
开发者可以在文件共享示例项目中,体验文件共享业务,并查看完整的源码和代码逻辑,详情请参考 文件共享 - 下载示例源码。
联系我们
文档反馈