uni-app 无法强制移除READ_MEDIA_IMAGES和READ_MEDIA_VIDEO权限 导致谷歌提示必须声明

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

uni-app 无法强制移除READ_MEDIA_IMAGES和READ_MEDIA_VIDEO权限 导致谷歌提示必须声明

操作步骤

在manifest.json里添加了强制移除READ_MEDIA_IMAGES和READ_MEDIA_VIDEO这两个权限

预期结果

云打包之后abb不包含这两个权限

实际结果

google仍然提示包含这两个权限

bug描述

"excludePermissions" : [
"<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\"/>",
"<uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\"/>"
]

已经在manifest.json里添加了强制移除这两个权限。云打包后还是如此!发现也有其他人同样遇到这个情况,但没有解决办法,官方难道不管一下吗?

开发环境信息

项目创建方式 PC开发环境操作系统 PC开发环境操作系统版本号 HBuilderX类型 HBuilderX版本号 手机系统 手机系统版本号 手机厂商 手机机型 页面类型 vue版本 打包方式
HBuilderX Windows win10 正式 4.45 Android Android 13 小米 xiaomi 13 vue vue2 云端

2 回复

我通过Android studio打开打包之后的aab文件,发现确实移除了这两个权限(对比了没有强制移除的aab),但是有一个类似权限<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />,是不是这个导致的?


在处理 uni-app 项目中遇到的权限问题时,尤其是当应用不再需要某些权限但谷歌应用商店提示必须声明时,我们可以通过配置 manifest.json 文件和相应的代码逻辑来尝试解决或优化权限请求。虽然直接“强制移除”权限在运行时是不可行的(因为操作系统需要确保应用不会滥用权限),但我们可以控制权限的声明和请求过程。

1. 检查并调整 manifest.json

首先,确保 manifest.json 中没有不必要的权限声明。对于 READ_MEDIA_IMAGESREAD_MEDIA_VIDEO 权限,如果应用确实不需要它们,应该从配置文件中移除。

// manifest.json 示例片段
{
  "mp-weixin": { // 微信小程序等平台配置
    // ...
  },
  "app-plus": { // App平台配置
    "permission": {
      // 确保这里没有不必要的权限声明
      // "ReadMediaImages": {},
      // "ReadMediaVideo": {},
      // 其他必要权限
    }
  }
}

2. 动态请求权限(仅在需要时)

如果应用在某些特定功能中才需要访问媒体文件,可以考虑在功能触发时才请求权限,而不是在应用启动时。这可以通过条件判断和调用平台API实现。

// 示例:在需要访问图片或视频时请求权限
function requestMediaPermissions() {
  #ifdef APP-PLUS
    const permissions = ['ReadMediaImages', 'ReadMediaVideo'];
    plus.android.requestPermissions(permissions, function(event) {
      for (let i = 0; i < event.deniedAlways.length; i++) {
        console.error('Permission permanently denied:', event.deniedAlways[i]);
      }
      for (let i = 0; i < event.denied.length; i++) {
        console.warn('Permission denied:', event.denied[i]);
      }
      for (let i = 0; i < event.granted.length; i++) {
        console.log('Permission granted:', event.granted[i]);
      }
    });
  #endif
}

// 在特定功能触发时调用
someFunctionThatNeedsMediaAccess() {
  if (/* 条件判断,比如用户点击了某个按钮 */) {
    requestMediaPermissions();
  }
}

3. 更新应用描述和隐私政策

确保在应用描述和隐私政策中清晰说明应用为何需要这些权限,以及这些权限如何被使用。这有助于增加用户信任,也可能影响谷歌应用商店的审核结果。

通过上述步骤,虽然不能直接“强制移除”权限,但可以优化权限的管理和声明,确保应用符合谷歌应用商店的要求,同时保护用户隐私。在实际操作中,务必根据应用的具体需求和目标平台的要求进行调整。

回到顶部