文档中心
DocsView 文件共享
文档中心
体验 App
SDK 中心
API 中心
常见问题
代码市场
进入控制台
立即注册
登录
中文站 English
  • 文档中心
  • 文件共享
  • 快速开始
  • 实现流程

实现流程

更新时间:2023-04-06 16:25

1 概念解释

  • ZEGO 文件云服务:指 ZEGO 存储文件的服务器,开发者上传文件时会上传到此服务器。
  • ZegoDocsView SDK:即构文件共享服务对应的客户端 SDK。
  • ZegoDocsView:文件视图,开发者可以利用该视图加载 ZEGO 文件云服务上的文件并展示。

2 前提条件

  • 已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 AppSign,详情请参考 控制台 - 项目管理 中的“项目信息”。
  • 在项目中集成 ZegoDocsView SDK,详情请参考 快速开始 - 集成。
  • 文件共享功能不是默认开启的,使用前请在 ZEGO 控制台 自助开通(开通步骤请参考 项目管理 - 服务配置 中的“文件共享”),或联系 ZEGO 技术支持开通。
  • 2.3.0 或以上 版本的 SDK 支持 Token 鉴权,若您需要升级鉴权方式,可参考 如何从 AppSign 鉴权升级为 Token 鉴权。

3 使用步骤

本节分为四个部分来介绍 ZegoDocsView SDK:

  1. 初始化 SDK
  2. 上传文件:上传本地的文件到 ZEGO 文件云服务
  3. 加载文件:通过文件 ID 加载 ZEGO 文件云服务上的文件并展示
  4. 使用 ZegoDocsView 的基本功能

如果要实现在文件上绘制以及多端联动功能,需要引入互动白板功能,详情请参考 ZegoWhiteboardView SDK。

3.1 初始化 SDK

3.1.1 引入头文件

// 引入 ZegoDocsView SDK 头文件
#import <ZegoDocsView/ZegoDocsView.h>

3.1.2 初始化 ZegoDocsView SDK

初始化 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 鉴权,可忽略此步。

监听 Token 过期通知,如果 Token 过期,需要主动更新 Token。

- (void)onTokenWillExpire:(int)remainTimeInSecond
{
    NSString * token = **; //后台获取到的token
    [[ZegoDocsViewManager sharedInstance] renewToken:token];
}

3.2 上传文件

调用 ZegoDocsViewManager 的上传文件方法上传文件到 ZEGO 文件云服务,上传成功后会获取该文件的 fileID,开发者可以调用 ZegoDocsView 的 loadFileWithFileID 接口,传入 fileID 加载该文件。

上传的文件必须满足相应的规范:

  1. 文件请使用 Microsoft Office 2013 或以上版本编辑/保存,不支持低版本 Microsoft Office 或其他办公软件保存的文件,如 WPS、Keynote、Microsoft Office 2003 等。

  2. 文件必须是可编辑的,不支持“只读”、“加密”、或其他受保护的文档,否则会导致转码失败。

全部规范请参考 概述 - 文件规范。

文件上传分为上传 ZegoDocsViewUploadStateUpload 和格式转换 ZegoDocsViewUploadStateConvert 两个阶段。

  • 上传阶段:如果正常上传,会产生多次回调,每次都包含文件上传进度。例如当前上传 50%,则 “infoDictionary” 内容为 {"upload_percent":@(0.50)};当前上传 100%,则 "infoDictionary" 内容为 {"upload_percent":@(1.00)}。
  • 格式转换阶段:如果转换成功,只产生一次回调,包含转换后的文件 ID。例如当前转换完成,则 "infoDictionary" 内容为 {"upload_fileid":"ekxxxxxxxxv"}。upload_fileid 对应的值即为文件 fileID。

3.2.1 上传普通文件

调用 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 {
    // 上传失败
  }
}];

3.2.2 上传 H5 文件

通过 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 {
            // 上传失败
        }
    }];

3.3 加载文件

3.3.1 创建 ZegoDocsView

创建 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);

3.3.2 加载并渲染文件

调用 ZegoDocsView 的 loadFileWithFileID 接口,传入之前上传成功后获取的 fileID 加载文件。

// fileID 在 uploadFile 成功之后获取
NSString *fileID = @"";
[self.docView loadFileWithFileID:fileID //后台获取到文件ID
 authKey:@"" //鉴权key。可以为空。根据你所申请环境是否需要鉴权填入。最好是通过后台获取 
 completionBlock:^(ZegoDocsViewError errorCode) {

}];
  1. 如果遇到加载失败的情况,请参考 常见错误码。常见的原因如下:
    • 开发者申请的 AppID 不包含文件共享的能力,需要向 ZEGO 技术支持申请开通。
    • 上传文件和加载文件使用不同的 AppID。例如,开发者在 AppID1 中上传了文件1,却在 AppID2 中加载文件1的 fileID,此时会找不到文件。
    • 文件上传和加载环境不一致。例如,文件在正式环境中上传,却在测试环境中加载,此时会找不到文件。
  1. 当前 DocsView 已调用 loadFileWithFileID 接口加载文件后,需要先调用 unloadFile 接口卸载文件,才能再次使用 loadFileWithFileID 加载文件。

  2. 只有之前调用过 loadFileWithFileID 接口,后续才能调用 reloadFileWithCompletionBlock 接口。

3.4 使用 ZegoDocsView 的基本功能

3.4.1 翻页

  • 加载文件成功后,可调用 ZegoDocsView 的 flipPage 方法对文件进行翻页。
  • 加载文件成功后,默认能通过指触对 ZegoDocsView 进行滚动/翻页。
  1. 针对动态 PPT 和非动态 PPT 分别有两个方法用于翻页。
  2. 跳转页面和当页步数都是以 1 起始。
// 举例:非动态PPT 跳转到第3页。
[self.docView flipPage:3 completionBlock:^(BOOL isScrollSuccess) {
            NSLog(@"翻页结束");
        }];

// 举例:动态PPT 跳转到第2页,第4步。
[self.docView flipPage:2 step:4 completionBlock:^(BOOL isScrollSuccess) {
            NSLog(@"翻页结束");
        }];

3.4.2 文件缩放

加载文件成功后,可调用 scaleDocsViewWithScaleFactor 对文件进行缩放。

  • scaleFactor:文件缩放需要指定缩放因子,即缩小或放大的比例系数。
  • scaleOffset:在缩小或放大后需要展示的区域的左起点。
[self.docsView scaleDocsViewWithScaleFactor:scaleFactor scaleOffsetX:scaleOffsetX scaleOffsetY:scaleOffsetY];

3.4.3 获取文件缩略图

加载文件成功后,可调用 getThumbnailUrlList 获取文件缩略图。

  1. 获取当前文件缩略图列表,仅支持 PDF、PPT、动态 PPT 和H5文件四种文件格式。
  2. 需要在文件加载成功后调用。
NSArray *thumbnailUrls = [self.docsView getThumbnailUrlList];

3.4.4 Excel 文件切换 sheet

如果开发者上传的文件是 Excel 文件,而且存在多个 sheet 页,可以使用 switchSheet 方法切换 sheet 页,sheet 页从 0 开始。

 [self.docView switchSheet:0];

3.4.5 动态 PPT 操作

动态 PPT,即文件类型为 “ZegoDocsViewFileTypeDynamicPPTH5” 的文件,这种类型的文件每一页可能会有多个步骤(step)。

如果开发者上传的文件是动态 PPT 文件,可以通过 nextStepWithCompletionBlock 和 previousStepWithCompletionBlock 方法进行动态 PPT 的上一步和下一步的操作,进行动态 PPT 的上下步跳转。动态 PPT 的操作需要在文件加载完成后才能调用。

//上一步
[self.docViewFirst previousStepWithCompletionBlock:^(BOOL isScrollSuccess) {

}];
//下一步
[self.docViewFirst nextStepWithCompletionBlock:^(BOOL isScrollSuccess) {

}];

4 示例源码

开发者可以在文件共享示例项目中,体验文件共享业务,并查看完整的源码和代码逻辑,详情请参考 文件共享 - 下载示例源码。

相关文档

  • 如何设置日志?
  • 加载 PPT 时经常遇到的动画、文字、交互问题有哪些?
  • 文件上传或加载失败怎么处理?
  • 如何处理文件共享 SDK 所有接口均异常的问题?
  • 如何处理文件共享常见问题?
本篇目录
  • 免费试用
  • 提交工单
    咨询集成、功能及报价等问题
    电话咨询
    400 1006 604
    咨询客服
    微信扫码,24h在线

    联系我们

  • 文档反馈