BeforeMount
BeforeMount
  • 发布:2025-08-19 10:41
  • 更新:2025-09-05 15:10
  • 阅读:180

ios给了网络权限并且有网但是app没网,getNetworkType为none

分类:uni-app

跑自定义基座是没问题,
发testflight有的机器没问题,有的有问题,上线了之前有客户反馈,我说是ios系统低打回了,因为我复现不了,偶尔能复现但是重下或者等几分钟好像能正常,
有的可以通过切网络就正常了,
现在我的机器必现,一直显示没网,怎么处理都显示没网,
看代码networkType拿到的一直是none,但是基座调试不出来,基座给了网络权限就有网,不弹提示
然后我排查测试发现个情况,我开了抓包请求和图可以正常请求回来,但是networkType还是反的none,关了抓包请求和图就反不回来,可能是什么问题呢?

如果是请求和图能正常返回,我还可以从代码上规避下,现在是确实是有网拿不到网络,没什么思路

cli是4.66 hb是4.65

function getNetworkOk() {  
  return new Promise((resolve, reject) => {  
    const timeoutId = setTimeout(() => {  
      console.log('获取网络状态超时,默认认为有网络');  
      resolve(true);  
    }, 2000);  

    const maxRetries = 2;  
    let retryCount = 0;  
    const retryDelay = 500;  

    function checkNetworkStatus() {  
      uni.getNetworkType({  
        success: function (res) {  
          clearTimeout(timeoutId);  
          uni.showToast({  
            title: '!!!' + JSON.stringify(res),  
            icon: 'none',  
          })  

          if (res && res.networkType) {  
            if (res.networkType === 'none') {  
              console.log('当前无网络');  
              resolve(false);  
            } else {  
              resolve(true);  
            }  
          } else {  
            console.warn('获取网络类型失败: res为空或不包含networkType');  
            // 重试逻辑  
            if (retryCount < maxRetries) {  
              retryCount++;  
              console.log(`重试获取网络状态 (第 ${retryCount} 次)`);  
              setTimeout(checkNetworkStatus, retryDelay);  
            } else {  
              resolve(true);  
            }  
          }  
        },  
        fail: function (err) {  
          clearTimeout(timeoutId);  
          console.log('获取网络状态失败', err);  
          if (retryCount < maxRetries) {  
            retryCount++;  
            console.log(`重试获取网络状态 (第 ${retryCount} 次)`);  
            setTimeout(checkNetworkStatus, retryDelay);  
          } else {  
            resolve(true);  
          }  
        }  
      });  
    }  

    checkNetworkStatus();  
  });  
}
2025-08-19 10:41 负责人:DCloud_iOS_WZT 分享
已邀请:
BeforeMount

BeforeMount (作者)

我想抓包试试,开着stream抓包有网,页面可以正常加载了,但是还是弹没有网弹窗,关了抓包,页面就又恢复没网加载不出来,谁帮我分析下是哪的问题

  • BeforeMount (作者)

    没有人遇到过这个问题吗 救!

    2025-08-27 11:35

  • BeforeMount (作者)

    回复 BeforeMount: 没有人遇到过这个问题吗 救!

    2025-08-28 09:03

2***@qq.com

2***@qq.com

初步怀疑是ios“本地网络”权限的问题,首次安装App时,一但拒绝过/同意过,ios的系统设置中上就无法重新显示设置“本地网络”。

  • BeforeMount (作者)

    本地网络影响上网吗 感觉所有权限每次都给了

    2025-08-20 13:17

  • BeforeMount (作者)

    我在manifest里加了 "infoPlist" : {

    "NSLocalNetworkUsageDescription" : "需要访问网络以检测网络状态"

    }也没有效果

    2025-08-20 16:20

BeforeMount

BeforeMount (作者)

ai说是ATS给拦截了,我按照他的步骤试了,没有效果

// manifest.json
{
"app-plus": {
"distribute": {
"ios": {
"NSAppTransportSecurity": {
"NSExceptionDomains": {
"jindengta.com": {
"NSExceptionAllowsInsecureHTTPLoads": false,
"NSExceptionRequiresForwardSecrecy": false,
"NSIncludesSubdomains": true,
"NSExceptionMinimumTLSVersion": "TLSv1.2"
}
}
}
}
}
}
}

BeforeMount

BeforeMount (作者)

ai说是云打包bug

? 这已经不是“可能”的问题了,而是确认:HBuilderX 云打包存在严重缺陷!

❌ 开发证书包 + 发布证书包 → 都没有 NSExceptionDomains
✅ 但你的 manifest.json 中明明配置了

这说明:

? HBuilderX 的云打包系统,完全忽略了你在 manifest.json 中写的 NSAppTransportSecurity 配置!

这是导致你所有网络问题的根本原因。

✅ 一、问题本质
环节 状态 说明
你写的 manifest.json ✅ 正确 你配置了 ATS 例外
HBuilderX 云打包 ❌ 忽略 未将配置写入 Info.plist
最终 IPA 包 ❌ 无 ATS 配置 iOS 使用默认安全策略
结果 ? 请求被 ATS 拦截 uni.request 失败或静默阻止

2***@qq.com

2***@qq.com

有解决方案了么?

  • BeforeMount (作者)

    用ai方法配的NSExceptionDomains 好像是有效果

    2025-09-03 14:35

蔡cai

蔡cai - 开发的插件:https://ask.dcloud.net.cn/article/41539

参考下我发布的这篇文章,https://ask.dcloud.net.cn/article/42039

  • BeforeMount (作者)

    感谢 不是一个问题

    2025-09-03 14:35

  • 蔡cai

    回复 BeforeMount: 那好像还没遇到过,你使用cli创建的项目,还是hbuilderx创建的项目

    2025-09-03 14:53

  • BeforeMount (作者)

    回复 蔡cai: 用的cli

    2025-09-05 14:00

  • 蔡cai

    回复 BeforeMount: 不懂咯,等大佬看看

    2025-09-05 14:05

2***@qq.com

2***@qq.com

有可能是服务器防火墙设置误封IP,关闭防火墙后审核那边有网络了。

要回复问题请先登录注册