【鸿蒙二开】WPS SDK 轻量打开:注册+enableEdit

鸿蒙侧刚开始接 WPS Open SDK 时,建议先跑通最小打开闭环:先完成 registerApp,再把选择器文件拷进应用沙箱,然后用 OpenFileRequestenableEdit 区分预览与编辑。水印、功能开关、关闭回传都可以后置叠加,避免一次堆参导致 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

湖北省
浏览 219
收藏
2
分享
2 +1
+1
全部评论