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

Expo MediaLibrary如何申请iOS端苹果音乐及音频文件访问权限

问题根因

MediaLibrary.requestPermissionsAsync() 是expo-media-library库提供的照片/视频类媒体权限申请方法,在iOS端仅会触发系统照片库的权限弹窗,本身不覆盖苹果音乐(Apple Music)、本地存储音频文件的访问权限——iOS系统将照片资源、音频媒体资源的权限做了完全拆分,两类权限需要单独申请,无法通过同一个方法一次性触发。

具体操作步骤
  • 第一步:配置iOS权限描述
    不管是原生iOS项目还是跨端项目,必须先在iOS配置中添加权限用途说明,否则调用权限申请方法会直接崩溃,提交App Store也会被审核驳回:
    打开项目的Info.plist文件(Expo托管项目在app.json/app.config.js的ios.infoPlist字段下配置),添加NSAppleMusicUsageDescription字段,值填写你访问用户音频资源的具体用途,例如「需要访问媒体库以读取本地音频文件,提供音频播放功能」。
  • 第二步:调用音频媒体权限的专用申请方法
    不要使用MediaLibrary的权限接口申请音频访问权限,根据你的技术栈选择对应调用方式:
    1. 原生Swift项目:导入MediaPlayer框架,调用MPMediaLibrary的权限申请接口
    import MediaPlayer
    
    // 触发苹果音乐/本地音频权限弹窗
    MPMediaLibrary.requestAuthorization { authStatus in
        switch authStatus {
        case .authorized:
            // 权限已通过,可正常读取本地音频、Apple Music资源
        case .denied, .restricted:
            // 权限被拒绝,引导用户到系统设置手动开启
        case .notDetermined:
            // 用户尚未做出选择,可后续再次触发申请
        @unknown default:
            break
        }
    }
    
    1. React Native/Expo项目:安装expo-apple-music依赖后,调用库提供的权限方法即可
    import * as AppleMusic from 'expo-apple-music';
    
    const requestAudioPermission = async () => {
      const { status } = await AppleMusic.requestPermissionsAsync();
      if (status === 'granted') {
        // 权限通过
      }
    }
    
  • 第三步:权限拒绝后的兜底处理
    如果用户已经拒绝过权限,再次调用申请方法不会触发系统弹窗,此时直接引导用户跳转到系统应用设置页手动开启权限即可,跳转代码示例(React Native):
    import { Linking } from 'react-native';
    // 跳转至当前应用的系统设置页
    Linking.openSettings();
    

注意:iOS 14及以上版本不需要额外配置其他存储类权限,只要NSAppleMusicUsageDescription配置正确、MPMediaLibrary权限申请通过,就可以正常读取本地所有音频文件和Apple Music授权资源,和照片权限的授权状态完全无关。

内容的提问来源于stack exchange,提问作者Hédi Ben Chiboub

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:57:17