uni-app uni.chooseImage 访问相册在 iOS18 系统下异常

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

uni-app uni.chooseImage 访问相册在 iOS18 系统下异常

类别 信息
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 版本15.0.1 (24A348)
HBuilderX类型 正式
HBuilderX版本号 4.29
手机系统 iOS
手机系统版本号 iOS 18
手机厂商 苹果
手机机型 iPhone12
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.chooseImage({
count: 6, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function (res) {
console.log(JSON.stringify(res.tempFilePaths));
}
});

操作步骤:

uni.chooseImage({
count: 6, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function (res) {
console.log(JSON.stringify(res.tempFilePaths));
}
});

预期结果:

正常显示相册所有照片

实际结果:

显示的是相册目录 无法查看全部图片

bug描述:

uni.chooseImage 访问相册在 iOS18 系统下异常 如图
目前测试 iOS18版本以下的系统正常 可以直接查看所有照片
麻烦紧急看看 影响客户使用


3 回复

麻烦官方人员给看看


离线SDK更新到4.31+版本 小程序SDK重新下载一下4.29

针对 uni-appuni.chooseImage 在 iOS 18 系统下访问相册出现异常的问题,这通常涉及到权限管理或 API 适配的问题。iOS 18 对应用权限管理进行了进一步的增强,因此在使用相册功能时,需要确保应用已经正确获取了相关权限,并且 API 调用方式符合最新的系统要求。

以下是一个基本的代码示例,展示了如何在 uni-app 中请求相册权限并使用 uni.chooseImage 来选择图片。注意,这只是一个基础示例,你可能需要根据实际情况进行调整。

  1. 请求相册权限(在 iOS 18 及以上版本中,权限请求可能需要在应用启动时或在调用相关功能前显式进行):
// 检查并请求相册权限(注意:uni-app 本身没有直接的 API 来请求权限,这通常需要原生插件或原生代码)
function requestPhotoLibraryPermission() {
    // 这里假设你有一个原生插件或原生代码来处理权限请求
    // 例如,使用 uni-app 的原生模块功能或第三方插件
    // 伪代码示例:
    if (uni.getSystemInfoSync().platform === 'ios' && parseFloat(uni.getSystemInfoSync().version) >= 18) {
        // 调用原生方法请求权限(需要原生支持)
        // uni.requireNativePlugin('YourPluginName').requestPhotoLibraryPermission().then(permissionGranted => {
        //     if (permissionGranted) {
        //         // 权限已授予,继续调用 chooseImage
        //         chooseImages();
        //     } else {
        //         // 处理权限拒绝情况
        //         console.error('Photo library permission denied');
        //     }
        // }).catch(error => {
        //     console.error('Error requesting photo library permission', error);
        // });
    } else {
        // 直接调用 chooseImage(在其他平台或未明确需要请求权限的 iOS 版本)
        chooseImages();
    }
}

function chooseImages() {
    uni.chooseImage({
        count: 9,
        sizeType: ['original', 'compressed'],
        sourceType: ['album', 'camera'],
        success: function (res) {
            console.log(res.tempFilePaths);
        },
        fail: function (err) {
            console.error('Failed to choose image', err);
        }
    });
}

// 调用函数请求权限并选择图片
requestPhotoLibraryPermission();

注意

  • 上述代码中的权限请求部分是一个伪代码示例,因为 uni-app 本身没有直接的 API 来请求 iOS 权限。这通常需要借助原生插件或直接在原生代码中实现。
  • 在实际项目中,你可能需要集成一个原生插件来处理 iOS 权限请求,或者使用 uni-app 提供的原生模块功能。
  • 确保你的应用已经在 Info.plist 中声明了必要的权限,例如 NSPhotoLibraryUsageDescription
  • 由于 iOS 系统的不断更新,建议持续关注 Apple 的官方文档,以确保你的应用符合最新的权限管理要求。
回到顶部