uni.navigatetominiprogram 调用失败主因是权限与配置缺失,需同时满足:目标小程序在 app.json 中配置 navigatetominiprogramappidlist 白名单、当前小程序开通跳转权限、仅真机支持;参数中 appid 和 envversion 必须严格校验,extradata 需为 plain object,path 须以 / 开头且页面已注册。

uni.navigateToMiniProgram 调用失败的典型表现
点击后无反应、控制台报 err: invalid appid 或 fail no permission,甚至直接静默失败——这基本不是代码写错了,而是权限或配置没到位。微信对跨小程序跳转有强管控,uni.navigateToMiniProgram 必须同时满足三个硬条件:目标小程序已配置白名单、当前小程序已开通跳转权限、调用环境是真机(开发者工具不支持)。
必须在目标小程序 app.json 中声明 navigateToMiniProgramAppIdList
这是最容易被忽略的一步。哪怕你 uni-app 侧代码完全正确,只要被跳转的小程序(B 小程序)没在自己的 app.json 里把你的小程序 AppID 加进白名单,微信就会直接拦截请求。
- 打开 B 小程序项目根目录下的
app.json - 添加字段:
"navigateToMiniProgramAppIdList": ["你的小程序AppID"](注意是字符串数组,不是单个字符串) - 务必重新上传并发布 B 小程序新版本,仅本地修改无效
- 如果要支持多个来源小程序,就填多个 AppID,例如
["wx123...", "wx456..."]
uni.navigateToMiniProgram 的参数陷阱
appId 和 envVersion 是唯二强制校验项,其余都可为空但格式不能错。常见翻车点:
-
appId字符串里不能有空格、换行或中文引号,复制时尤其注意全角/半角 -
envVersion必须小写,且只接受"develop"/"trial"/"release"——写成"Develop"或"production"都会失败 -
extraData是 plain object,不能是字符串或 null;传空对象{}安全,但别传undefined或"{}" -
path必须以/开头,且目标页面需在 B 小程序的pages.json中注册过
示例正确调用:
uni.navigateToMiniProgram({
appId: 'wx1234567890abcdef',
path: '/pages/detail/detail?id=123',
extraData: { from: 'uniapp', scene: 1001 },
envVersion: 'release',
success: (res) => console.log('跳转成功'),
fail: (err) => console.error('跳转失败', err)
})
真机调试前必须确认的三件事
模拟器和 HBuilderX 的“运行到小程序”功能无法触发真实跳转,所有测试必须在真机上进行,且需确保:
- 微信客户端已更新到最新版(旧版可能不识别
envVersion: "trial") - 当前登录的微信账号,已在 B 小程序后台的「成员管理」中被设为体验者(仅当
envVersion: "trial"时需要) - uni-app 项目 manifest.json 中的「微信小程序 AppID」已填写正确,否则
uni.navigateToMiniProgram在小程序端根本不会注册
跳转后若 B 小程序启动但收不到 extraData,大概率是它没在 App.onLaunch 或 App.onShow 的 options 参数里取值——这个数据不会自动挂到全局,必须手动解构。











