外观
service.wechat
约 550 字大约 2 分钟
2026-07-15
微信原生任务桥。接口本身可导入不代表普通应用能连接微信服务;固件还包含 WECHAT_APP 专用判断。
import wechat from '@service.wechat'该接口是异步任务总线,不是微信登录、支付或网络请求 API。推荐流程是:先注册任务和事件回调,再分配唯一 task_id,最后调用原生函数;页面退出时取消两个回调。
wechat.js_invoke_function(info)
| 字段 | 类型 | 说明 |
|---|---|---|
task_id | Number | 任务 ID |
func_name | String | 原生函数名 |
request_body | String | 请求体;通常是业务协议要求的 JSON 字符串 |
方法同步返回 void。真正结果通过任务回调返回,并用同一个 task_id 关联。
任务回调
wechat.js_regist_task_callback(data => {
// data: { task_id: number, error_code: number, resp_body: string }
})
wechat.js_unregist_task_callback()事件回调
wechat.js_regist_event_callback(data => {
// data: { event: string, event_body: string }
})
wechat.js_unregist_event_callback()完整调用骨架
下面的 func_name 只是占位符;固件未暴露微信侧允许调用的函数名清单,不应把它当成可直接运行的业务示例。
let nextTaskId = 1
const pending = new Map()
wechat.js_regist_task_callback(result => {
const task = pending.get(result.task_id)
if (!task) return
pending.delete(result.task_id)
if (result.error_code === 0) {
task.resolve(result.resp_body)
} else {
task.reject(result)
}
})
wechat.js_regist_event_callback(({ event, event_body }) => {
console.log('wechat event', event, event_body)
})
function invokeWechat(funcName, body) {
const taskId = nextTaskId++
return new Promise((resolve, reject) => {
pending.set(taskId, { resolve, reject })
wechat.js_invoke_function({
task_id: taskId,
func_name: funcName,
request_body: JSON.stringify(body)
})
})
}
function disposeWechatBridge() {
wechat.js_unregist_task_callback()
wechat.js_unregist_event_callback()
pending.clear()
}task_id 和 error_code 在 JIDL 中是 double,JS 层应使用可安全精确表示的整数,不要超过 Number.MAX_SAFE_INTEGER。resp_body/event_body 只是字符串,是否为 JSON 必须由具体业务协议决定,解析时应捕获异常。
限制与失败判断
- 固件应用加载器存在
WECHAT_APP专用判断,说明包名、签名或进程身份可能参与授权; - 注册成功不代表微信侧服务在线,手机未连接或未登录时可能永远没有任务结果;
- JIDL 没有超时机制,调用方必须自己设置超时并清理
pending; - 同一应用应只维护一套全局回调,重复注册可能覆盖旧回调。
完整方法:
| 方法 |
|---|
js_invoke_function(info) |
js_regist_task_callback(callback) |
js_regist_event_callback(callback) |
js_unregist_task_callback() |
js_unregist_event_callback() |
机型可用性
| Xiaomi Smart Band 10 Pro | Xiaomi Watch S4 41mm |
|---|---|
| △ | △ |