【鸿蒙二开】关窗后拷贝 WPS filePath
接入 WPS Open SDK 鸿蒙版时,打开走 sendRequest(OpenFileRequest)。设了 wpsTransferType 后 Promise 会等到用户关窗,Result.data.fileUri 或 transferFd 仍在 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 ?? '');注册 OK
未开回传确认 data 空
URI 关窗后拷贝
用 local 再打开校验
(可选)FD:对 size、close fd
正式包包名再验 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