【鸿蒙二开】WPS SDK 联调痛点:注册、沙箱与回传
鸿蒙侧刚开始接 WPS Open SDK 时,联调最容易卡在四类现象:未注册就 open 导致 reject、鉴权 1013、选择器路径 ERROR、以及默认只读或未开回传时的空 data。建议先跑通最小打开闭环,再后置叠加水印、功能开关与关闭回传,避免一次堆参难查根因、联调无从下手。
注册 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 (!SdkConstants.isPersonalSdk() && ACTIVATION_SN) {
WPSApi.setWpsFileToken(ACTIVATION_SN);
}
wpsReady = true;
}冷启动 await ensureRegistered,首页在 wpsReady 前禁用打开。日志打 code/msg,Release 不打 secret。换 HAR 或换 flavor 后务必 clean 重装,核对 bundleName 与申请凭据一致,避免「调试包正常、正式包 1013」。注册成功后再谈打开;反过来排查会浪费整轮联调时间。序列号用全局注入,不要每次 open 重复赋值。
沙箱 + 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 先查路径。拷贝保留扩展名;预览与编辑入口共用同一函数,只差布尔参数。
排错速查
现象 | 查 |
reject | 未注册 |
1013 | key/包名/HAR |
ERROR | 沙箱路径 |
只能预览 | enableEdit=true |
无 data | 轻量未开回传时正常 |
小 docx、小 xlsx 各测一轮。需要关窗回传时再设 TransferType.URI,关窗后读 data.fileUri 再 copy;切回应用不等于关窗。OK && !data 不要当失败。日测时把「关闭窗口」写进用例,避免只测多任务切回。
后置回传注意
设 req.wpsTransferType = TransferType.URI 后,关闭窗口再解析 result.data.fileUri,只读 open 后 copyFileSync 到本应用目录再上传。FD 模式用 transferFd 分块读并校验 transferFileSize。日志统一 requestType/code/msg。
页面拼装时预览与编辑共用 openLite,布尔参数区分。日志固定打 requestType/code/msg。把「拉起成功」与「回传落盘」拆开:轻量阶段只断言 code === OK;需要关窗拿文件再开 wpsTransferType。多 flavor 校验包名与凭据一致。
小结与获取 SDK
稳定接入靠时序:注册 →(Token)→ 沙箱 → enableEdit 打开。最小闭环通了再叠策略参数,回归范围更小,也更少把 reject 与 ERROR 混在一起。日常排错先分清「未注册」「鉴权 1013」「路径 ERROR」「只读默认」四类,再考虑叠加能力。入口收进统一模块后,页面只负责触发与提示,回归范围也会更小。
更多参数见官方对接文档:https://365.kdocs.cn/l/clQl5cek2NoT
申请 SDK HAR 与凭据:m_open_sdk@wps.cn(注明包名与接入需求)。
技术交流 QQ 群:628436767