uni-app项目编译到微信小程序中遇重大bug,部分机型无线网切换流量后无法正常请求服务器

发布于 1周前 作者 vueper 来自 Uni-App

uni-app项目编译到微信小程序中遇重大bug,部分机型无线网切换流量后无法正常请求服务器

项目 信息
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 3.2.9
第三方开发者工具版本号 1.05.2106300
基础库版本号 2.18
项目创建方式 HBuilderX

操作步骤:

1:退出微信进程
2:同时打开无线网和流量
3:成功连上网之后打开微信
4:打开相关小程序
5:关闭无线网
6:流量无法连接服务器(返回微信,流量可正常上网)

预期结果:

无线网和流量应该都可以连接服务器

实际结果:

流量无法连接服务器(原生小程序没有此类问题)

bug描述:

部分机型编译到小程序当中,无线网切换流量,无法正常请求服务器(目前在ios机型中稳定复现了此问题)
官网给出的第三方开发者案例中,以星巴克小程序为例,用ios机型测试同样也存在此类问题,请官方尽快查询问题原因


26 回复

应该是微信的问题, 起了一个微信的项目, 在切换流量后, 第一次点击无效, 第二次有效, 发帖作者 应该是接口上有防抖,在第一次无效后没有回调导致防抖开关没有关,导致后续一直无效


有求证精神,赞一个。

第三方的小程序示例地址 发一下 我测一下

官网示例那个星巴克小程序就可以测

这么严重的bug,也没有官方人员回复了吗?

在官网那个地方啊 你把链接发一下,找了一圈没找到呢

请问一下,有确认bug吗

uni-app 主要处理 Vue 语法到 小程序语法的转换,理论上和网络以及硬件无关,请测试对比测试一下原生小程序是否存在类似问题。

原生小程序没有此类问题,我试过了,目前测试过的所有uni-app打包的小程序,都有此类问题。包括官方示例都存在此问题,ios上可以复现

回复 fchany: 可以使用uni-app和不使用uni-app分别写两个逻辑相同的应用测试对比一下。

回复 DCloud_UNI_GSQ: 我们所有用uni-app开发的小程序都有此类问题,原生的开发的都没有,你们自己用ios测试一下就知道了。我都怀疑你们自己都没有测试

回复 fchany: 由于uni-app到小程序只做vue语法转换,不会涉及API,所以不会测试小程序API在不同网络的兼容性。

回复 DCloud_UNI_GSQ: 测一下试试呢,理论上你说的有道理,但是原生小程序确实不存在此类问题

回复 fchany: 建议进行一下详细的对比测试,提供准确的情况后,才会进行排查。

回复 DCloud_UNI_GSQ: 我描述的情况还不够准确吗,你们拿ios简单按照我的流程测试一下就好了,这个不是小问题

看来真是没人管了,如此重大的问题不管不顾

尽快反馈给微信小程序社区修复啊

测试 从无线切换流量后, uni.request 调用后无反应

尽快反馈给微信小程序社区

回复 DCloud_UNI_GSQ: 对比 wx.request 是否存在一样的问题。

uni.request也是调用的wx.request吧

回复 冬天的太阳: 是的,不过可能开发者不信。

在 uni-app 项目编译到微信小程序时,遇到部分机型在无线网切换流量后无法正常请求服务器的问题,可能涉及多个方面的原因。以下是一些可能的原因和解决方案:


1. 网络环境切换问题

  • 原因:部分机型在无线网切换流量时,网络环境发生变化,可能导致网络请求失败。
  • 解决方案
    • 监听网络状态变化,在切换网络时重新发起请求。
    • 使用微信小程序的 wx.onNetworkStatusChange 方法监听网络状态变化:
      wx.onNetworkStatusChange((res) => {
        if (res.isConnected) {
          // 网络恢复,重新发起请求
          this.reloadData();
        }
      });

2. DNS 解析问题

  • 原因:切换网络后,DNS 解析可能未及时更新,导致请求失败。
  • 解决方案
    • 在请求失败时,尝试重新解析域名或使用 IP 地址直接请求。
    • 使用 wx.requesttimeout 参数设置超时时间,避免请求卡住:
      wx.request({
        url: 'https://example.com/api',
        timeout: 10000, // 10秒超时
        success(res) {
          console.log(res.data);
        },
        fail(err) {
          console.error('请求失败', err);
        }
      });

3. SSL 证书问题

  • 原因:部分机型在切换网络后,可能对 SSL 证书的校验更严格,导致请求失败。
  • 解决方案
    • 确保服务器配置了有效的 SSL 证书。
    • 检查证书是否被信任,避免使用自签名证书。

4. 缓存问题

  • 原因:网络切换后,缓存可能导致请求失败或返回旧数据。
  • 解决方案
    • 在请求时禁用缓存:
      wx.request({
        url: 'https://example.com/api',
        header: {
          'Cache-Control': 'no-cache'
        },
        success(res) {
          console.log(res.data);
        }
      });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!