已收录

【鸿蒙二开】关窗后拷贝 WPS filePath

接入 WPS Open SDK 鸿蒙版时,打开走 sendRequest(OpenFileRequest)。设了 wpsTransferType 后 Promise 会等到用户关窗,Result.data.fileUritransferFd 仍在 WPS 沙箱里,必须拷进本应用 filesDir 才是业务可用的 filePath。未开回传时 OK 且 data 空属正常,不要当成保存成功。下文按清单整理,方便对照联调。细节以官方对接文档为准。把拷贝收进 Facade,页面不要直接拿 fileUri 去上传。

判断什么

入口

是否等关窗

是否设置 wpsTransferType

原始回传

fileUri / transferFd

业务路径

拷贝后的本应用路径

门禁

registerApp / RegisterAppRequest

wpsTransferType 优先于 enableTransferFile。可编辑通常同时 enableEdit = true。未注册禁止 sendRequest。外部文件先入 filesDir。专业版不落地时拷贝后可删 WPS 临时文件;个人版同样要拷贝。用 SdkConstants.isPersonalSdk() 决定是否 unlink,不要猜包名。

短示例

req.enableEdit = true;
req.wpsTransferType = TransferType.URI;
const result = await WPSApi.sendRequest(req);
if (result.code !== ResultCode.OK) throw new Error(result.msg ?? '');
const local = copyWpsUriToSandbox(ctx, result.data?.fileUri ?? '');
  1. 注册 OK

  1. 未开回传确认 data 空

  1. URI 关窗后拷贝

  1. 用 local 再打开校验

  1. (可选)FD:对 size、close fd

  1. 正式包包名再验 1013

打开按钮在 ready 前禁用。Release 不打印 secret。UI 开了回传要提示关窗。并发拷贝目录按时间戳隔离。

高频坑

现象

说明

data 空

未设 transfer 或没关窗

旧文件

上传仍用打开前路径

转圈

在等关窗

抛异常

未注册

1013

HAR / 包名 / key

业务页不要复制两套 then。差异收在 openAndCopy。PR 勾选:是否把 fileUri 入库、FD 是否 close。周五正式包再跑注册 → 只读 → URI 拷贝。日志固定:ready、是否开回传、code/msg、有无 localPath。

客服把「传上去还是旧的」拆成回传 / 关窗 / 拷贝。字段以官方对接文档为准。欢迎帖下补充真机 fileUri 形态,代码仍只信拷贝结果。未开回传不要提示保存成功。换 HAR 后 clean。密钥勿进公开仓。反馈带:是否已注册、是否开回传、code/msg

接入评审把「fileUri 禁止当持久路径」写成检查项。真机覆盖:小 docx URI、拷贝失败提示、故意未注册 catch。每步只改一类行为。策略开关与回传分开验收。坚持清单两周,旧路径误传通常会下降。新人 Onboarding 先讲等待语义,再讲拷贝。页面不散落 new OpenFileRequest

把「必须处理 then/catch」写进 PR 模板。同一工程多渠道列全 Bundle 名。路径先入沙箱,少踩笼统 ERROR。开了 URI 后 UI 写清「请关闭文档」。拷贝失败与回传失败分日志。周五再跑正式包。只读预览不要开回传。可编辑与预览共用一个打开函数。全仓少复制 new OpenFileRequest。反馈请带是否已关窗、是否已拷贝。

小结

关窗后 filePath = 先注册 + wpsTransferType + 等关窗 + 拷到本应用。不要用客户端包名代替拷贝。把「空 data 不上传」写进检查项。

更多参数见官方对接文档:https://365.kdocs.cn/l/clQl5cek2NoT

申请 SDK HAR 与凭据:m_open_sdk@wps.cn(注明包名与专业版/个人版需求)。

技术交流 QQ 群:628436767

湖北省
浏览 47
收藏
3
分享
3 +1
+1
全部评论