React Native iOS端如何获取共享相册?
解决方案:Expo获取iCloud共享相册的问题
当前Expo Media Library的限制
Expo的MediaLibrary模块目前不支持直接获取iCloud共享相册:
- 你使用的
await MediaLibrary.getAlbumsAsync({ includeSmartAlbums: true })参数仅用于包含系统智能相册(如「最近删除」「收藏」这类自动生成的相册),和云共享相册完全是两个范畴。 - 底层封装的iOS Photos框架默认没有开放共享相册的访问入口,Expo官方API也未提供对应配置项。
可行实现方案
1. 基于EAS Build/裸React Native项目调用原生API
如果你的项目可以切换到EAS Build构建(或已经是裸React Native项目),可以通过编写原生模块直接调用iOS的Photos Framework:
- 在iOS原生代码中,使用
PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumCloudShared, options: nil)获取所有云共享相册。 - 通过React Native的原生模块桥接,将共享相册的数据传递到JS层。
- 注意:需要在
Info.plist中添加NSPhotoLibraryUsageDescription和NSPhotoLibraryAddUsageDescription权限描述,且用户必须授予「所有照片」的访问权限,才能读取共享相册内容。
2. 第三方库替代(仅限裸项目)
社区暂无可直接兼容Expo Managed项目的第三方库,但裸项目可以尝试基于原生封装的库扩展,不过最稳定的方式还是自行编写原生模块。
3. Expo Managed项目的临时替代
纯Expo Managed项目目前没有官方支持,只能通过EAS Build将项目转为可修改原生代码的架构,再实现上述原生调用逻辑。
内容的提问来源于stack exchange,提问作者Osiris92
相关产品推荐
相关产品推荐

