7***@qq.com
7***@qq.com
  • 发布:2024-01-05 09:24
  • 更新:2024-01-10 10:48
  • 阅读:208

【报Bug】网络权限和网络状态bug

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11 家庭中文版 22H2

HBuilderX类型: 正式

HBuilderX版本号: 3.98

手机系统: iOS

手机系统版本号: iOS 17

手机厂商: 苹果

手机机型: 13 pro

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

app.vue中代码

<script>  
    import Vue from 'vue';  
    export default {  
        data() {  
            return {  
                timerid: 0  
            }  
        },  
        onLaunch() {  
            // #ifdef APP-PLUS  
            this.network()  
            // #endif  

            // #ifdef H5  
            this.initFunc()  
            // #endif  

        },  
        onError() {  

            this.$control.msg('出现错误!');  
            // #ifdef APP-PLUS  
            uni.getNetworkType({  
                success: res => {  
                    if (res.networkType == 'none' || res.networkType == 'unknown') {  
                        this.$control.msg('网络错误');  
                        setTimeout(() => {  
                            plus.runtime.restart();  
                        }, 2000);  

                    }  
                }  
            });  
            // #endif  

        },  
        onShow() {  
            // 启动或重启即时通讯  
            this.$store.dispatch('chat/start');  
        },  
        onHide() {  
            // 断开即时通讯  
            this.$store.dispatch('chat/close');  
        },  
        methods: {  
            initFunc() {  
                // 检测客户端更新  
                this.$store.dispatch('update/update');  
                // 仅首次打开一次性加载数据  
                this.$store.dispatch('common/init');  
                // 同步购物车 本地 & 网络  
                this.$store.dispatch('cart/get');  
                // 同步 动态数据  
                this.$store.dispatch('statistics/get');  
                // uni.$emit('globalVarUpdated', this.hasNetworkPermission);  
            },  
            delTimer() {  
                if (this.timerid > 0) {  
                    clearInterval(this.timerid)  
                    this.timerid = 0;  
                }  
            },  
            network() {  
                console.log('检查权限开始')  
                var i = 0;  
                this.timerid = setInterval(() => {  
                    i++;  
                    console.log(1)  
                    // 判断网络类型  
                    uni.getNetworkType({  
                        success: res => {  
                            console.log(res.networkType + i)  
                            console.log(2)  
                            uni.showToast({  
                                title: "网络类型:" + res.networkType + i,  
                                icon: 'error'  
                            })  
                            if (res.networkType == 'none' || res.networkType == 'unknown') {  
                                if (i >= 5) {  
                                    uni.showToast({  
                                        title: "网络类型:" + res.networkType,  
                                        icon: 'error'  
                                    })  
                                    this.delTimer()  
                                }  
                            } else {  
                                if (res.networkType != 'wifi') {  
                                    this.$control.msg('当前使用非WIFI环境,请注意流量使用');  
                                }  
                                this.delTimer()  
                                this.initFunc()  
                            }  
                        }  
                    });  
                    console.log(3)  
                }, 2000)  
                console.log("获取权限结束" + this.timerid)  
            },  
        }  
    };  
</script>  

操作步骤:
安装app
启动同意使用网络权限

预期结果:
获得网络权限
首页渲染在获得网络权限之后

实际结果:
实际5G网络 getNetworkType 获取到的是unknown 导致逻辑没法处理

bug描述:

最初是该机安装后启动询问使用网络权限,同意后首页白屏,经过分析可能是页面先渲染后才拿到网络权限导致白屏的。
后面做了获取网络状态再渲染,一些苹果机就正常了,目前发现了13 pro实际网络为5G 使用getNetworkType api获取到的网络类型是unknown 。

2024-01-05 09:24 负责人:无 分享
已邀请:
7***@qq.com

7***@qq.com (作者)

这是调试 显示的getNetworkType 获取的网络状态

DCloud_iOS_WZT

DCloud_iOS_WZT

未授权网络权限的时候是获取不到网络类型的 uni.onNetworkStatusChange 可以通过这个api监听网络状态

  • 7***@qq.com (作者)

    你看第一张图,是获取了网络权限的

    2024-01-07 19:19

  • DCloud_iOS_WZT

    回复 7***@qq.com: 你getNetworkType 是在用户点击之后并且 有网络之后才调用的吗?

    2024-01-08 12:05

  • 7***@qq.com (作者)

    回复 DCloud_iOS_WZT: 是的,我可以确定是先同意使用网络,后通过定时器5次调用getNetworkType类型都是unknown,我有录屏,这里上传不了

    2024-01-08 17:31

  • DCloud_iOS_WZT

    回复 7***@qq.com: uni.onNetworkStatusChange 用这个api监听状态看下是啥

    2024-01-08 17:35

  • 7***@qq.com (作者)

    回复 DCloud_iOS_WZT: 看下图

    2024-01-10 10:49

  • DCloud_iOS_WZT

    回复 7***@qq.com: 感觉还是你代码getNetworkType 获取时机问题 首次请求未授权 要么你自己监听网络状态 要么给用户一个可以刷新页面的按钮

    2024-01-10 11:37

  • DCloud_iOS_WZT

    回复 7***@qq.com: 另外getNetworkType尽量不要在app.vue内部调用,尽量放到首页页面加载完成后

    2024-01-10 11:42

  • 7***@qq.com (作者)

    回复 DCloud_iOS_WZT: 别的手机都可以获取正确网络类型的,从原来在首页获取getNetworkType类型就有问题,后面为了调试才写的app.vue ,同意允许使用网络后,10多秒获取10多次都是unknown

    2024-01-11 15:26

  • 7***@qq.com (作者)

    回复 DCloud_iOS_WZT: 能不能处理一下这个bug啊,好难

    2024-01-15 10:25

7***@qq.com

7***@qq.com (作者)

客户现在没空配合,型号13 pro ,系统是ios17.1.2

要回复问题请先登录注册