UniApp IOS打包之后,首次安装ipa包,白屏,监听网络状态 ...

张裕  金牌会员 | 2025-3-12 17:55:14 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 677|帖子 677|积分 2031

首先说一下,我遇到的环境,IOSIPA包首次安装的时候,各人都知道,会有一个IOS,自带的体系提示,如下


这里的时候,UniApp 在你选择之前就已经把接口跑完了,你再去点击这些允许,都是没啥用的
这时候,我们应该把接口放在,用户选择之后再发起请求

轮询网络状态


  • 轮询: 使用 setInterval 每秒检查一次网络状态,直到检测到网络范例不为 none。

    • 每秒执行一次 uni.getNetworkType 来获取网络状态。
    • 假如网络范例不是 none,表现网络规复,that.typee 被设置为 2,并清除定时器 clearInterval(time),停止轮询。


vue2代码如下:
 
  1. onLoad() {
  2.                        
  3.                        
  4.                         //苹果要先检查网络,有网时执行,无网不显示
  5.                         let s = 0;
  6.                         let time = setInterval(() => {
  7.                           console.log('6666');
  8.                           uni.getNetworkType({
  9.                             success: (res) => {
  10.                               console.log(res.networkType, s);
  11.                               if (res.networkType !== 'none') {
  12.                                 this.typee = 2;
  13.                                 clearInterval(time);
  14.                                 console.log('清楚网络..');//有网络就加载
  15.                                         //写逻辑代码,(包含接口文件和网络接口的)
  16.                                        
  17.                               }
  18.                                   else{
  19.                                           console.log('没有网络')
  20.                                   }
  21.                             }
  22.                           });
  23.                           s++;
  24.                         }, 1000);       
  25.                        
  26.                        
  27.                        
  28.                 },
复制代码
初始网络检查

1.uni.getNetworkType: 这个 API 用于获取当前的网络范例,具体详情,可以去官网看,,我这里就不写了
这里肯定是要用到轮询的,轮询判定网络是否毗连上了


  • 我这里随便写一个demo,Vue2的,底下再写一个 Vue3的
  • 假如网络范例是 none,表现没有网络,that.typee 被设置为 1,并弹出提示“网络不佳,请重新打开”。
  • 假如有网络,that.typee 被设置为 2,并弹出提示“网络不佳,请重新打开”。
  • typee 要记得在 data 定义


  1. uni.getNetworkType({
  2.   success: function(res) {
  3.     console.log(res.networkType);
  4.     setTimeout(function() {
  5.       if (res.networkType === "none") {
  6.         that.typee = 1;
  7.         console.log("当前无网络", that.typee);
  8.         uni.showToast({
  9.           title: '网络不佳,请重新打开........',
  10.           duration: 20000
  11.         });
  12.       } else {
  13.         that.typee = 2;
  14.         console.log("有网络", that.typee);
  15.         uni.showToast({
  16.           title: '网络不佳,请重新打开........',
  17.           duration: 2000
  18.         });
  19.       }
  20.     }, 3000);
  21.   }
  22. });
复制代码
轮询网络状态


  • 轮询: 使用 setInterval 每秒检查一次网络状态,直到检测到网络范例不为 none。

    • 每秒执行一次 uni.getNetworkType 来获取网络状态。
    • 假如网络范例不是 none,表现网络规复,that.typee 被设置为 2,并清除定时器 clearInterval(time),停止轮询。

  1. let s = 0;
  2. let time = setInterval(() => {
  3.   console.log('6666');
  4.   uni.getNetworkType({
  5.     success: (res) => {
  6.       console.log(res.networkType, s);
  7.       if (res.networkType !== 'none') {
  8.         that.typee = 2;
  9.         clearInterval(time);
  10.         console.log('清楚网络..');
  11.       }
  12.     }
  13.   });
  14.   s++;
  15. }, 1000);
复制代码


  • 初始网络检查:在页面加载完成时立即检查网络状态,并显示提示。
  • 轮询网络状态:每秒检查一次网络状态,直到检测到网络可用,然后停止检查。
Vue3版本

  1. <template>
  2.   <div>
  3.     <!-- 可以在这里显示网络状态 -->
  4.     <p v-if="networkStatus === 1">当前无网络</p>
  5.     <p v-if="networkStatus === 2">网络连接正常</p>
  6.   </div>
  7. </template>
  8. <script setup>
  9. import { ref, onMounted } from 'vue';
  10. import { showToast, getNetworkType } from '@dcloudio/uni-app'; // 假设你使用的是 UniApp
  11. const networkStatus = ref(1); // 默认无网络
  12. const checkNetworkStatus = () => {
  13.   getNetworkType({
  14.     success: (res) => {
  15.       if (res.networkType === 'none') {
  16.         networkStatus.value = 1;
  17.         showToast({
  18.           title: '网络不佳,请重新打开........',
  19.           duration: 20000
  20.         });
  21.       } else {
  22.         networkStatus.value = 2;
  23.         showToast({
  24.           title: '网络正常',
  25.           duration: 2000
  26.         });
  27.       }
  28.     }
  29.   });
  30. };
  31. const startPolling = () => {
  32.   const interval = setInterval(() => {
  33.     getNetworkType({
  34.       success: (res) => {
  35.         if (res.networkType !== 'none') {
  36.           networkStatus.value = 2;
  37.           clearInterval(interval);
  38.           showToast({
  39.             title: '网络已恢复',
  40.             duration: 2000
  41.           });
  42.         }
  43.       }
  44.     });
  45.   }, 1000);
  46. };
  47. onMounted(() => {
  48.   // 初次检查网络状态
  49.   checkNetworkStatus();
  50.   // 开始轮询
  51.   startPolling();
  52. });
  53. </script>
复制代码
可以使用 WebSocket 来进行网络监听,这样可以更实时地监控网络毗连状态。WebSocket 提供了持久化的毗连,可以用来吸收网络状态变革的关照。以下是一个使用 Vue 3 和 WebSocket 实现网络监听的示例。
这里写一个 搭配 WebSocket 的网络判定(可能不敷准确)

1. WebSocket 服务器设置

首先,你需要一个 WebSocket 服务器来发送网络状态信息。假设你有一个 WebSocket 服务器,它会推送网络状态变革的信息到客户端。
2. Vue 3 组件

下面是一个使用 Vue 3 和 WebSocket 实现网络监听的示例:
  1. <template>
  2.   <div>
  3.     <!-- 显示网络状态 -->
  4.     <p v-if="networkStatus === 1">当前无网络</p>
  5.     <p v-if="networkStatus === 2">网络连接正常</p>
  6.   </div>
  7. </template>
  8. <script setup>
  9. import { ref, onMounted, onUnmounted } from 'vue';
  10. const networkStatus = ref(1); // 默认无网络
  11. let socket = null;
  12. const connectWebSocket = () => {
  13.   socket = new WebSocket('ws://your-websocket-server-url'); // 替换为你的 WebSocket 服务器地址
  14.   socket.onopen = () => {
  15.     console.log('WebSocket 连接已打开');
  16.   };
  17.   socket.onmessage = (event) => {
  18.     const message = JSON.parse(event.data);
  19.     if (message.type === 'network_status') {
  20.       networkStatus.value = message.status;
  21.     }
  22.   };
  23.   socket.onclose = () => {
  24.     console.log('WebSocket 连接已关闭');
  25.   };
  26.   socket.onerror = (error) => {
  27.     console.error('WebSocket 错误:', error);
  28.   };
  29. };
  30. onMounted(() => {
  31.   connectWebSocket();
  32. });
  33. onUnmounted(() => {
  34.   if (socket) {
  35.     socket.close();
  36.   }
  37. });
  38. </script>
复制代码
代码解释


  • <template> 部分:

    • 显示网络状态,根据 networkStatus 的值显示差别的消息。

  • <script setup> 部分:

    • 使用 Vue 3 的 Composition API。
    • networkStatus 是一个 ref,用于存储网络状态。
    • connectWebSocket 函数负责创建和管理 WebSocket 毗连。

      • socket.onopen 变乱处理惩罚步伐在 WebSocket 毗连打开时执行。
      • socket.onmessage 变乱处理惩罚步伐处理惩罚从服务器吸收到的消息。在这个示例中,我们假设消息的格式为 { type: 'network_status', status: 1 } 或 { type: 'network_status', status: 2 }。
      • socket.onclose 变乱处理惩罚步伐在 WebSocket 毗连关闭时执行。
      • socket.onerror 变乱处理惩罚步伐处理惩罚 WebSocket 错误。

    • onMounted 钩子在组件挂载时调用 connectWebSocket 函数。
    • onUnmounted 钩子在组件卸载时关闭 WebSocket 毗连,清算资源。

服务器端消息格式

为了让这个示例工作,你的 WebSocket 服务器需要发送雷同如下的 JSON 消息:
  1. {
  2.   "type": "network_status",
  3.   "status": 2
  4. }
复制代码
这里的 status 可以是 1(无网络)或 2(网络正常),根据实际需要调解。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表