【鸿蒙二开】WPS SDK 轻量打开:注册+enableEdit
鸿蒙侧刚开始接 WPS Open SDK 时,建议先跑通最小打开闭环:先完成 registerApp,再把选择器文件拷进应用沙箱,然后用 OpenFileRequest 的 enableEdit 区分预览与编辑。水印、功能开关、关闭回传都可以后置叠加,避免一次堆参导致 ERROR 难查、联调无从下手的情况。
注册 ensureRegistered
未注册就 sendRequest 会 reject;1013 优先查包名与凭据。有激活序列号再 setWpsFileToken,不要每次 open 塞 wpsToken。
let wpsReady = false;
async function ensureRegistered(ctx: UIAbilityContext) {
if (wpsReady) return;
const r = await WPSApi.sendRequest(
new RegisterAppRequest(ctx, APP_KEY, APP_SECRET)
);
if (r.code === ResultCode.ERROR_CODE_AUTH_FAILURE) {
throw new Error(`1013: ${r.msg}`);
}
if (r.code !== ResultCode.OK) {
throw new Error(`register ${r.code}`);
}
if (ACTIVATION_SN) {
WPSApi.setWpsFileToken(ACTIVATION_SN);
}
wpsReady = true;
}冷启动 await ensureRegistered,首页在 wpsReady 前禁用打开。日志打 code/msg,Release 不打 secret。换 HAR 或换 flavor 后务必 clean 重装,核对 bundleName 与申请凭据一致,避免「调试包正常、正式包 1013」。注册成功后再谈打开;反过来排查会浪费整轮联调时间。
沙箱 + enableEdit
选择器路径先 copy 到 filesDir,再构造请求。默认只读;编辑必须 enableEdit = true。
function toSandbox(ctx: UIAbilityContext, src: string): string {
const dir = `${ctx.filesDir}/wps_lite`;
fs.mkdirSync(dir, true);
const dest = `${dir}/${Date.now()}.docx`;
fs.copyFileSync(src, dest);
return dest;
}
async function openLite(
ctx: UIAbilityContext,
src: string,
editable: boolean
) {
await ensureRegistered(ctx);
const path = toSandbox(ctx, src);
const req = new OpenFileRequest(ctx, path);
req.enableEdit = editable;
return await WPSApi.sendRequest(req);
}联调顺序建议:先可预览 → 再可编辑 → 再考虑回传/extraOptions。ERROR 先查路径。拷贝时保留扩展名,避免 open 成功却无法识别格式;大文件可先用小样本验证链路,再放量测性能。预览与编辑入口务必共用同一函数,只差布尔参数,方便后续统一加日志与断言。
页面拼装与断言
// onCreate
await ensureRegistered(this.context);
async function onOpen(editable: boolean) {
try {
if (!wpsReady) return;
const res = await openLite(hostCtx, pickerPath, editable);
if (res.code !== ResultCode.OK) {
throw new Error(res.msg ?? String(res.code));
}
} catch (e) {
console.error(String(e));
}
}预览与编辑共用 openLite,布尔参数区分。日志固定打 requestType/code/msg。换 HAR 后 clean。多 flavor 校验 bundleName 与凭据一致。
排错速查
现象 | 查 |
reject | 未注册 |
1013 | key/包名/HAR |
ERROR | 沙箱路径 |
只能预览 | enableEdit=true |
无 data | 轻量未开回传时正常 |
联调顺序:只读打开 → 可编辑打开 → 再考虑 wpsTransferType / 水印 / extraOptions。小 docx、小 xlsx 各测一轮。若后续要关窗回传,在请求上设 TransferType.URI,关窗后读 data.fileUri 再 copy,切回应用不等于关窗。
后置回传时注意
需要关窗拿文件时,再设 req.wpsTransferType = TransferType.URI,用户关闭窗口后解析 result.data.fileUri,只读 open 后 copyFileSync 到本应用目录再上传。切回应用不等于关窗;OK && !data 不要当失败。FD 模式用 transferFd 分块读并校验 transferFileSize。日志统一 requestType/code/msg,Release 不输出 secret。
小结与获取 SDK
稳定接入靠时序:注册 →(Token)→ 沙箱 → enableEdit 打开。最小闭环通了再叠策略参数,回归范围更小,也更少把 reject 与 ERROR 混在一起。日常排错先分清「未注册」「鉴权 1013」「路径 ERROR」「只读默认」四类,再考虑叠加能力。
更多参数见官方对接文档:https://365.kdocs.cn/l/clQl5cek2NoT
申请 SDK HAR 与凭据:m_open_sdk@wps.cn(注明包名与接入需求)。
技术交流 QQ 群:628436767