【鸿蒙二开】WPS SDK 常见错误码排查
键盘测试ABC123
社区里做鸿蒙 WPS 文档二开时,打开失败常被笼统说成「SDK 报错」。其实 @wps/wps_sdk 里,注册失败、未注册就发送、打开参数错误、关窗回传失败,落在 Result.code / 异常上的表现不同。下面按清单写,方便对照联调。细节以官方对接文档为准。
调用顺序与 Result 字段
推荐顺序:集成 HAR 并对齐包名与 appKey/appSecret → registerApp 到 ResultCode.OK → 需要时在回调里 setWpsFileToken → 选择器文件拷进 context.filesDir → new OpenFileRequest → 设 enableEdit(默认只读)→ 需要时开回传 → WPSApi.sendRequest。
字段 | 用途 |
requestType | 请求类型 |
code | 状态码 |
msg | 可读信息 |
data | 回传业务数据(fileUri/transferFd 等) |
未注册就发送会 抛异常,不是带 code 的打开失败。多数已注册请求即便失败也会 resolve Result,务必判断 code。Promise 落定不等于业务成功。
错误码速查
code | 常量 | 怎么处理 |
0 | OK | 成功;开回传时再读 data |
-1 | NONE | 默认值,勿当成功 |
-2 | ERROR | 查参数、路径、打开异常 |
1013 | ERROR_CODE_AUTH_FAILURE | 查凭据与 Bundle |
其它正整数 | — | 关闭回传业务失败 |
抛异常 | — | 先完成注册 |
常见串台:把回传正整数当成注册失败去改 appKey;把只读当成打开失败去改错误码分支;把 throw 当成 -2。日志请带 stage=register|open|transfer|throw。
示例
import { common } from '@kit.AbilityKit';
import { WPSApi, OpenFileRequest, Result, ResultCode } from '@wps/wps_sdk';
let ready = false;
WPSApi.registerApp(APP_KEY, APP_SECRET, {
onCallback: (r: Result) => {
if (r.code === ResultCode.ERROR_CODE_AUTH_FAILURE) {
console.error('1013', r.msg);
ready = false;
return;
}
if (r.code !== ResultCode.OK) {
ready = false;
return;
}
// 需要激活序列号时在此 setWpsFileToken
ready = true;
}
});
async function openDoc(ctx: common.UIAbilityContext, path: string) {
if (!ready) {
console.error('gate closed');
return;
}
const req = new OpenFileRequest(ctx, path);
req.enableEdit = true;
try {
const r = await WPSApi.sendRequest(req);
if (r.code === ResultCode.OK) {
// 若开启回传,再消费 r.data,并拷贝到本沙箱
return;
}
console.error(r.code, r.msg, r.requestType);
} catch (e) {
console.error('not registered?', e);
}
}说明:1013 先修凭据,不要靠改水印/回传去碰运气。-2 优先确认文件已进沙箱。回传正整数按「关窗回传失败」上报,并保留原始 code。enableEdit 默认只读,可编辑必须显式 true。
联调勾选
<input class="kdocs-unchecked-list" type="checkbox" disabled="true"/>注册已 OK 再打开
<input class="kdocs-unchecked-list" disabled="true" type="checkbox"/>无 1013 或已处理凭据
<input class="kdocs-unchecked-list" type="checkbox" disabled="true"/>路径在应用沙箱
<input class="kdocs-unchecked-list" type="checkbox" disabled="true"/>同时处理非 OK 与 throw
<input class="kdocs-unchecked-list" type="checkbox" disabled="true"/>回传成功才消费 data,并拷贝到本沙箱
<input class="kdocs-unchecked-list" type="checkbox" disabled="true"/>日志含 requestType / code / msg
<input class="kdocs-unchecked-list" type="checkbox" disabled="true"/>Release 未打印完整 secret
<input class="kdocs-unchecked-list" type="checkbox" disabled="true"/>enableEdit 与产品预期一致(默认只读)
<input class="kdocs-unchecked-list" type="checkbox" disabled="true"/>回传正整数按 transfer 归因,不误判为注册失败
关闭回传成功时再读 Result.data;未开回传时 code=0 且 data 为空属于正常。调试包与正式包包名不同时,凭据需分别对齐,否则易出现偶发 1013。
小结与获取 SDK
排错核心:分清异常通道与 Result 通道,再按注册 / 打开 / 回传读 code。把 msg 打进日志,定位会快很多。门闩 ready 可减少未注册就发送的抛异常。社区联调时把 code 与 msg 一并贴出,比只说「打不开」更容易对症。
更多参数见官方对接文档:https://365.kdocs.cn/l/clQl5cek2NoT
申请 SDK HAR 与凭据:m_open_sdk@wps.cn(注明包名与专业版/个人版需求)。
技术交流 QQ 群:628436767