m***@163.com
m***@163.com
  • 发布:2026-10-14 16:23
  • 更新:2026-10-14 16:49
  • 阅读:38

【报Bug】cli 项目仅 APP 端真机调试无法连接 UniCloud,小程序端和 web 端都正常

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: macOS Tahoe 26.3.1

手机系统: Android

手机系统版本号: Android 16

手机厂商: OPPO

手机机型: 一加 12

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: CLI

CLI版本号: 3.0.0-5020620260917001

App下载地址或H5⽹址: https://mp-ef4986c0-4c85-4a59-a206-01c61ce0cb14.cdn.bspapp.com/__UNI__C657B0C_1014161312.apk

操作步骤:
onMounted(async () => {  
  const obj = uniCloud.importObject('nainiu-client-news', { customUI: true });  
  console.log('[1] typeof obj.list =', typeof obj.list);           // 'function' / 'undefined'  
  console.log('[2] Object.keys(obj) =', JSON.stringify(Object.keys(obj))); // Proxy 通常为 []  
  try {  
    const res = await obj.list({ pageNo: 1, pageSize: 10 });  
    console.log('[3] 调用成功:', res);  
  } catch (e) {  
    console.log('[3] 调用失败:', e?.errCode, '|', e?.errMsg || e?.message);  
  }  
});

预期结果:
[3] 调用成功

实际结果:
15:57:09.432 [1] typeof obj.list =,  function at pages/moyu-shop-coffee/index_base/index_base.vue:98  
15:57:09.437 [2] Object.keys(obj) =,  [] at pages/moyu-shop-coffee/index_base/index_base.vue:99  
15:57:09.790 [3] 调用失败:,  SYS_ERR,  |,  request:ok at pages/moyu-shop-coffee/index_base/index_base.vue:104

bug描述:

uniapp vue3 cli 项目,在 hbuilderx 中关联另一个 uni-admin 项目的 uniCloid,在 web 端和小程序端均可正常连接使用,在 app真机调试时无法调用,测试报错
调用失败:, Error: request:ok, | errCode:, SYS_ERR, | errMsg:, request:ok, | message:, request:ok
uniCloud 控制台中没有任何调用信息。
尝试开启 uni云端一体安全网络 (配置 app 为测试版本,manifest.json 中打开 SecureNetwork,uniCloud 控制台中启用安全网络,打包自定义基座后运行) 后还是报上述错误,没有任何效果。
服务空间:阿里云
cli package.json 文件:附件

2026-10-14 16:23 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

收到你的 bug 反馈,以下从官方视角对该反馈进行评审和分析。

一、反馈内容完整性评审

整体来看这份反馈质量较高,核心信息基本齐全,但有几处需要补充:

  1. 标题与描述:清晰明确。“cli 项目仅 App 端真机无法连接 UniCloud,小程序端和 web 端正常”这一核心现象概括准确,且补充了服务空间类型(阿里云)、关联方式(关联 uni-admin 项目的服务空间)、已尝试的排查手段(云端一体安全网络无效),这些信息对排查很有价值。
  2. 代码示例:逻辑清晰,但依赖你项目中已部署的 nainiu-client-news 云对象,官方人员无法直接独立运行。建议补充一个最小化复现工程(如空白 vue3 项目 + 任意云对象),或补充 uniCloud.callFunction 方式的调用结果作对比。
  3. 复现步骤:基本可复现,但建议补充:HBuilderX 具体版本号、App 端运行使用的是标准基座还是自定义基座、是否开启了 uniCloud 本地调试。
  4. 预期结果:合理。云对象在 App 端正常情况下应可调用成功。
  5. 实际结果:不属于误报。其中 [1] typeof obj.list = function 和 [2] Object.keys(obj) = [] 是正常现象(云对象客户端为 Proxy 代理对象,枚举键为空是预期行为),关键异常在 [3]——说明云对象实例创建成功,但调用链路失败。
  6. 分类信息:基本完整,但 HBuilderX 版本只写了“正式版”,缺少具体版本号(如 5.26.x),该信息对定位问题非常关键,请补充。
  7. 附件:我无法识别附件内容,请将 package.json 中 @dcloudio 相关依赖版本直接以文本形式贴出。

二、bug 是否成立的分析

从社区已有记录看,你的现象与一个已知问题高度吻合:

【报Bug】uniCloud 登录报错 "request:ok" 排查全记录(application_fjson 编译 bug) 记录了相同特征的问题:某版本工具链下,App-Android 端 uni.request 发送 Content-Type: application/json 的 POST 请求时,请求头被错误改写为 application_fjson("/" 变成 "_f"),导致阿里云服务空间(走 api.next.bspapp.com 新网关)所有 API 不可用,callFunction/importObject 抛出 {errCode: "SYS_ERR", errMsg: "request:ok"},且云端函数无任何调用记录(请求在网关入口被 415 拒绝,未到达云函数)。该记录同时确认 H5 端无此问题——与你“web 端和小程序端正常、仅 App 端异常、uniCloud 控制台无调用信息”的特征一致。其中还解释了 request:ok 是误导性报错:传输层成功时 errMsg 即为 "request:ok",uniCloud 客户端解析被拒响应体取不到 message 时兜底使用了该串。

这也与你“开启云端一体安全网络后无效”的观察相容:若请求在网关入口就被拒绝,问题发生在更底层的请求链路,与安全网络配置无关。

验证方法(可用于确认是否为同一问题),在 App 端页面中直接执行:

uni.request({  
  url: 'https://api.next.bspapp.com/client',  
  method: 'POST',  
  header: { 'Content-Type': 'application/json' },  
  data: { method: 'serverless.auth.user.anonymousAuthorize', params: '{}' },  
  success: (res) => {  
    console.log('statusCode =', res.statusCode);  
    console.log('body =', JSON.stringify(res.data));  
  }  
})

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

若返回 statusCode 415,且响应体包含 Invalid mime type "application_fjson": does not contain '/',即可确认是请求头被改写的问题。该帖还提到:将 Content-Type 写成 application/json;charset=utf-8 可绕过改写(仅适用于自写 uni.request 的场景,uniCloud 内部调用无法直接修改请求头,需依赖官方修复)。

另一个可顺带排查的方向:若你在 HBuilderX 中开启了 uniCloud 本地调试,真机需与电脑在同一局域网,否则本地调试服务不对客户端生效,参考 真机上无法调用云端云函数。不过该场景通常会明确提示“连接本地调试服务失败”,与你的 SYS_ERR/request:ok 不一致,可先确认控制台有无此类提示以排除。

三、请补充以下信息以便进一步确认

  1. HBuilderX 的具体版本号(正式版具体版本,如 5.26.x);
  2. package.json 中 @dcloudio 相关依赖版本(直接贴文本);
  3. 上述 uni.request 验证代码在真机上的实际返回(statusCode 和 body);
  4. App 端运行使用的是标准基座还是自定义基座,是否开启了 uniCloud 本地调试。

补充这些信息后,若确认与上述社区记录为同一问题,建议在该帖下补充你的版本信息,或继续在 ask.dcloud.net.cn 跟进,便于官方汇总排查并在后续版本中修复。

内容为 AI 生成,仅供参考
m***@163.com

m***@163.com (作者)

  • 补充信息

  • HBuilderX 的版本号:5.26

  • 经确认确实是 App-Android 端会把请求头Content-Type: application/json 错误改写成application_fjson ("/" 被替换成 "_f")。但我的项目中并没有修改请求头的相关代码

  • 解决方法:main.ts 中加入全局全局请求拦截器,把application/json 自动补成application/json;charset=utf-8

// #ifdef APP-PLUS  
/**  
 * ⚠️ 临时兼容  
 *  
 * 现象:App-Android 端调用 uniCloud 云函数/云对象报  
 *   { errCode: 'SYS_ERR', errMsg: 'request:ok' },且 uniCloud 控制台无任何调用日志。  
 * 原因:HBuilderX 5.26.x 工具链会把请求头 Content-Type 的 `application/json`  
 *   错误改写为 `application_fjson`("/" 被替换成 "_f"),阿里云网关(api.next.bspapp.com)  
 *   在入口就以 415 拒绝(Invalid mime type "application_fjson": does not contain '/'),  
 *   请求根本到不了云函数。详见 https://ask.dcloud.net.cn/question/221035  
 * 绕过:显式带 charset(application/json;charset=utf-8)不会被改写。  
 */  
uni.addInterceptor('request', {  
  invoke(args) {  
    const header = args?.header || {};  
    const current = header['Content-Type'] ?? header['content-type'];  
    if (!current || current === 'application/json') {  
      header['Content-Type'] = 'application/json;charset=utf-8';  
      args.header = header;  
    }  
  },  
});  
// #endif

虽然已经解决,但发生原因令人困惑,希望官方给于答复!

要回复问题请先登录或注册