You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo iOS开发:如何提前申请无线权限及检测授权状态

Expo iOS应用网络权限处理方案

一、申请无线(网络)权限

1. 基础网络访问(WebView加载网页)

iOS默认允许应用访问网络,但iOS 10+要求必须在app.json中配置网络使用描述,否则可能审核不通过。配置方式:

{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSNetworkUsageDescription": "需要网络权限以加载WebView内容,为您提供服务",
        "NSAppTransportSecurity": {
          "NSAllowsArbitraryLoads": true // 仅当加载非HTTPS网页时需要,HTTPS场景可省略
        }
      }
    }
  }
}

如果只是WebView加载普通网页,无需额外申请权限,配置上述描述即可。

2. 访问WiFi详细信息(如SSID/BSSID)

若需获取WiFi具体信息,iOS将其归类到位置权限范畴,需通过expo-location申请:

  • 安装依赖:
npx expo install expo-location
  • 在app.json添加权限描述:
{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSLocationWhenInUseUsageDescription": "需要位置权限以获取WiFi信息,支持WebView相关功能"
      }
    }
  }
}
  • 代码中申请权限:
import * as Location from 'expo-location';

async function requestWiFiRelatedPermission() {
  const { status } = await Location.requestForegroundPermissionsAsync();
  if (status === 'granted') {
    // 权限已授予,可进行WiFi信息获取操作
  }
}

二、检测权限/网络状态

1. 检测网络连接状态(替代“网络权限检测”)

iOS没有单独的网络权限开关,用户只能通过关闭蜂窝/WiFi禁用应用网络。用expo-network检测:

  • 安装依赖:
npx expo install expo-network
  • 检测代码:
import * as Network from 'expo-network';

async function checkNetworkAvailability() {
  const { isConnected } = await Network.getNetworkStateAsync();
  if (isConnected) {
    // 网络正常,WebView可加载
  } else {
    // 无网络,提示用户开启
  }
}

2. 检测WiFi相关的位置权限

如果申请了WiFi相关的位置权限,用expo-location检测状态:

import * as Location from 'expo-location';

async function checkLocationPermissionStatus() {
  const { status } = await Location.getForegroundPermissionsAsync();
  switch(status) {
    case 'granted':
      // 权限已授予
      break;
    case 'denied':
      // 权限被拒,可引导用户到设置开启
      break;
    default:
      // 权限未申请或未决定
      break;
  }
}

内容的提问来源于stack exchange,提问作者LiuWenbin_NO.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:42:30