uni-app iOS 18 下 uni.chooseImage 只能选择部分相册

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app iOS 18 下 uni.chooseImage 只能选择部分相册

3 回复

初步猜测是因为 PHAssetCollectionSubtype subtype: .albumRegular 需要改为 .any


https://ask.dcloud.net.cn/question/199774 这个帖子统一处理 ios18 到问题,如果不是一个问题,请回复我

在iOS 16及更高版本中,Apple对相册访问权限进行了更严格的控制,引入了“Selected Photos”权限级别,这允许应用仅访问用户手动选择的照片,而不是整个相册。对于uni-app开发者来说,这意味着在iOS 16及以上系统上,uni.chooseImage的行为可能会受限,特别是如果用户只授予了“Selected Photos”权限。

针对这个问题,虽然uni-app本身没有直接的API来控制或绕过iOS的权限设置,但你可以通过一些策略来处理用户可能只选择了部分相册的情况。以下是一个基本的代码示例,展示如何在uni-app中使用uni.chooseImage,并处理可能返回的照片数量较少的情况:

// 选择图片的函数
function selectImages() {
    uni.chooseImage({
        count: 9, // 允许选择图片的数量
        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
        sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
        success: function (res) {
            // 处理选择结果
            const tempFilePaths = res.tempFilePaths;
            if (tempFilePaths.length === 0) {
                uni.showToast({
                    title: '未选择任何图片',
                    icon: 'none'
                });
            } else {
                // 这里可以处理选中的图片,比如上传到服务器等
                console.log('选中的图片路径:', tempFilePaths);
                // 示例:显示选中的图片路径
                tempFilePaths.forEach((path, index) => {
                    console.log(`图片${index + 1}: ${path}`);
                });
            }
        },
        fail: function (err) {
            // 处理失败情况,可能是权限被拒绝
            console.error('选择图片失败:', err);
            uni.showToast({
                title: '选择图片失败,请检查权限',
                icon: 'none'
            });
        }
    });
}

// 调用选择图片的函数
selectImages();

在上面的代码中,uni.chooseImagesuccess回调会返回用户选择的图片路径数组。如果因为权限问题导致用户只能访问部分相册或未选择任何图片,你可以通过检查tempFilePaths.length来处理这些情况。

此外,为了提高用户体验,你可以在应用启动时或调用uni.chooseImage之前,使用uni.getSetting检查用户的相册权限状态,并引导用户到系统设置中授予更广泛的权限(如果需要)。但请注意,iOS 16及以上系统对权限的引导更加严格,应用不能直接跳转到系统设置中的特定权限设置页面。

总之,处理iOS 16及以上版本的相册权限问题,关键在于合理处理用户可能只选择了部分相册的情况,并提供清晰的用户反馈。

回到顶部