【鸿蒙二开】WPS SDK 只读与可编辑模式
社区里做鸿蒙 WPS 文档二开时,预览和编辑经常共用同一个 OpenFileRequest,真正决定「能不能改」的只有 enableEdit。未设置或写成 false 时客户端按只读(ReadOnly)打开;只有显式赋值为 true 才会进入可编辑(Normal)。本文按联调顺序写清注册门禁、沙箱拷贝与双入口封装,方便在社区对照现象一起排错。
调用顺序
集成 HAR,包名与 appKey / appSecret 对齐
registerApp 回调到 ResultCode.OK
需要时在回调里 setWpsFileToken(不要写 request.wpsToken)
选择器文件拷进 context.filesDir
new OpenFileRequest → 设 enableEdit → WPSApi.sendRequest
未注册就 sendRequest 会抛异常,不是带 code 的打开结果。1013 先查凭据与 Bundle,不要先改模式开关。
代码要点
const req = new OpenFileRequest(ctx, sandboxPath);
// 预览:false 或不赋值;编辑:必须 true
req.enableEdit = editable;
const result = await WPSApi.sendRequest(req);预览与编辑共用一个 openLocal(ctx, src, ext, editable),页面只传布尔。全仓应只保留一处 new OpenFileRequest。
if (result.code !== ResultCode.OK) {
console.error(result.code, result.msg);
return;
}
// 未开回传时 OK + data==null 表示拉起成功联调清单
冷启动注册 code=0
沙箱只读打开通过
编辑入口传 true 可改
预览入口未误传 true
未注册走 .catch
换 HAR 后 clean 再跑只读
封装补充
打开前务必完成沙箱拷贝。选择器返回的路径直接塞进 OpenFileRequest,在真机上经常表现为泛化 ERROR,日志不一定出现「权限」字样。建议固定目录如 filesDir/wps_inbox,文件名带时间戳,扩展名与真实类型一致。拷贝失败时直接把错误抛给业务层重试选择器,不要带着半截路径去 sendRequest。
预览按钮与编辑按钮应共用同一个 helper,只差布尔参数。社区 Demo 若写成两段几乎相同的 new OpenFileRequest,后续加回传或水印时很容易只改一侧。Ability 启动阶段完成 registerApp,页面只读就绪态;点击里再构造 Request。Release 构建禁止打印完整 appSecret 与序列号明文。
enableEdit 与关窗回传独立:要拿关窗后的业务路径,另设 wpsTransferType 并拷回本应用沙箱。水印、extraOptions 等模式双绿后再叠。把双入口共用封装写进 Demo README,比口头约定更稳,也能减少「预览能改 / 编辑不能改」的串线帖。
常见现象
现象 | 优先排查 |
点击抛异常 | 是否未等到注册 OK |
返回 1013 | Bundle / key / HAR 是否对齐 |
打不开文档 | 是否未拷进应用沙箱 |
打得开但改不了 | 编辑入口是否未设 enableEdit = true |
预览也能改 | 预览是否误传 true |
OK 且 data 为空 | 是否未开回传(多数场景属预期) |
不要在同一轮联调里同时改 Inbox 目录、Token 分支和 enableEdit 默认值。换 HAR 后先跑只读,再跑可编辑。调试包与商店包凭据分开申请。
小结与获取 SDK
鸿蒙侧 WPS 二开打开模式收成 enableEdit 一个字段:默认只读,显式 true 才可编辑。注册门禁与沙箱路径仍是前置条件;回传与水印是后续策略,不要和模式布尔绑死在同一匿名回调。社区发帖排查时建议带上:HAR 名、Bundle、注册 code/msg、打开 code/msg、本次 enableEdit 取值。把双入口共用封装写进 Demo,比口头约定更稳。
更多参数见官方对接文档:https://365.kdocs.cn/l/clQl5cek2NoT
申请 SDK HAR 与凭据:m_open_sdk@wps.cn(注明包名与专业版/个人版需求)。
技术交流 QQ 群:628436767