PlayStore 不断拒绝应用更新以获得 MANAGE_EXTERNAL_STORAGE 权限,并且应用描述也没有更新

Posted

技术标签:

【中文标题】PlayStore 不断拒绝应用更新以获得 MANAGE_EXTERNAL_STORAGE 权限,并且应用描述也没有更新【英文标题】:App update constantly rejected by PlayStore for MANAGE_EXTERNAL_STORAGE permission and app description is also not updating 【发布时间】:2021-09-09 08:32:12 【问题描述】:

我的应用程序帮助用户管理whatsapp 贴纸link to app,它在第一个版本中支持SDK30,但在该版本之后,当我尝试更新新版本的应用程序Playstore 时,我的应用程序状态被拒绝,我尝试了多次,我'在请求权限时,我已经在应用程序描述甚至应用程序中提到了权限的原因,但我的应用程序没有更新,我的应用程序的简短描述和长描述都没有更新。 我也填写了敏感许可表,每当我尝试发布新版本时谷歌发送给我

发布状态应用状态:被拒绝

由于政策原因,您的应用已被拒绝且未发布 违反。如果您提交了更新,您之前的版本 应用仍可在 Google Play 上找到。

问题:不需要访问设备存储

您确定的功能不需要不受限制地访问 设备存储。还有其他隐私友好的访问选项 共享存储中的文件,例如使用系统文件选择器,或者, 根据用例,您可以遵循以下建议 从此处列出的其他应用接收数据。

请更新您的应用,以便该功能使用隐私友好型 替代并删除所有文件访问 (MANAGE_EXTERNAL_STORAGE) 权限。

策略:所有文件访问权限

用户设备上的文件和目录属性被视为 个人和敏感的用户数据受个人和敏感 信息政策和以下要求:

应用只应请求访问至关重要的设备存储 让应用程序正常运行,并且可能不会请求访问设备存储空间 代表任何第三方出于任何与本公司无关的目的 面向用户的关键应用程序功能。运行的安卓设备 android "R" (Android 11) 或更高版本,将需要 MANAGE_EXTERNAL_STORAGE 权限,以便管理共享中的访问 贮存。面向 R 或更高版本并请求广泛访问 共享存储(“所有文件访问”)必须成功通过 在发布之前进行适当的访问审查。允许使用的应用程序 此权限必须明确提示用户启用“所有文件访问” 在“特殊应用访问”设置下为他们的应用。更多 有关 R 要求的信息,请参阅此帮助文章。

阅读有关使用所有文件访问权限的更多信息,请参阅 Android 存储 用例和最佳实践以及如何使用存储打开文件 访问框架 在 Play 管理中心解决这个问题。问题:不是 核心功能

您确定的依赖此权限的功能确实 似乎对您的应用的核心功能并不重要。

核心功能被定义为应用的主要目的。没有 这个核心功能,应用程序“损坏”或呈现不可用。这 核心功能,以及构成此的任何核心功能 核心功能,必须在显着位置记录和推广 应用的描述。

请更新您的应用,使该功能不使用此功能 许可或确保核心功能突出 在应用程序的描述中记录和推广,然后重新提交您的应用程序 在 Play 开发者控制台上。

策略:所有文件访问权限

用户设备上的文件和目录属性被视为 个人和敏感的用户数据受个人和敏感 信息政策和以下要求:

应用只应请求访问至关重要的设备存储 让应用程序正常运行,并且可能不会请求访问设备存储空间 代表任何第三方出于任何与本公司无关的目的 面向用户的关键应用程序功能。运行的安卓设备 Android "R" (Android 11) 或更高版本,将需要 MANAGE_EXTERNAL_STORAGE 权限,以便管理共享中的访问 贮存。面向 R 或更高版本并请求广泛访问 共享存储(“所有文件访问”)必须成功通过 在发布之前进行适当的访问审查。允许使用的应用程序 此权限必须明确提示用户启用“所有文件访问” 在“特殊应用访问”设置下为他们的应用。更多 有关 R 要求的信息,请参阅此帮助文章。

阅读有关使用所有文件访问权限的更多信息,请参阅 Android 存储 用例和最佳做法 在 Play 管理中心解决此问题。 问题:需要使用 Media Store API

您已请求访问所有文件访问权限,但它 您的应用的核心功能似乎只需要访问媒体 文件。使用 MediaStore API,应用程序可以贡献和访问媒体 可以在外部存储卷上使用,而无需 访问所有文件的权限。

请更新您的应用,以便该功能使用 Media Store API 和 删除所有文件访问 (MANAGE_EXTERNAL_STORAGE) 权限。

策略:所有文件访问权限

用户设备上的文件和目录属性被视为 个人和敏感的用户数据受个人和敏感 信息政策和以下要求:

应用只应请求访问至关重要的设备存储 让应用程序正常运行,并且可能不会请求访问设备存储空间 代表任何第三方出于任何与本公司无关的目的 面向用户的关键应用程序功能。运行的安卓设备 Android "R" (Android 11) 或更高版本,将需要 MANAGE_EXTERNAL_STORAGE 权限,以便管理共享中的访问 贮存。面向 R 或更高版本并请求广泛访问 共享存储(“所有文件访问”)必须成功通过 在发布之前进行适当的访问审查。允许使用的应用程序 此权限必须明确提示用户启用“所有文件访问” 在“特殊应用访问”设置下为他们的应用。更多 有关 R 要求的信息,请参阅此帮助文章。

阅读有关使用所有文件访问权限的更多信息,请参阅 Android 存储 用例和最佳实践以及如何从共享访问媒体文件 storage 在 Play 管理中心解决这个问题。

【问题讨论】:

只需让用户使用 ACTION_OPEN_DOCUMENT_TREE 选择所需的目录,您就可以为所欲为。似乎是在弄乱另一个应用程序的数据。 @blackapps 我不能这样做,因为如果用户有多个 whatsapp 应用程序,我需要访问多个路径,第二件事现在有了范围存储,大多数用户不知道他们重要的 whatsapp 媒体文件在哪里存储起来,因此用户很难探索和访问它们。 多路径?请告诉所有人,以便我们尝试找到解决方案。 @blackapps like see 如果用户有 2 个 whatsapp,第一个是简单的 whatsapp,第二个是 whatsapp 业务,现在两个应用程序分别存储文件,现在 MediaStore 提供图像和文档,whatsapp 贴纸采用 webp 图像格式,所以我需要查找它们的存储路径并从那里获取贴纸,我的许多用户使用whatsapp mods,这些模块具有用户不知道的未知包名称,并且文件存储在该名称下,以便使我的应用程序可访问所有用户,我遍历文件并识别它是一个whatsapp文件夹,无论是mod还是普通。 @VajaniKishan 是的,但我认为这种方法不会长期有效,谷歌人需要更新一些政策,他们应该批准应用程序管理外部存储权限,因为 MediaStore 和其他事情在所有地方都不起作用 【参考方案1】:

经过大量的努力和研究,我决定将目标 SDK 版本减少到 29 并发布我的应用程序的更新,我能够发布更新,令人惊讶的是它也更新了 sdk 30,如果您面临同样的问题,只需将目标 sdk 更改为 29 并将编译 sdk 保持为 30,试试吧,它对我有用,也许它也对你有用。也许这是谷歌系统中的一个漏洞,但它对我有用。

【讨论】:

我的应用程序也因所有文件访问权限而被拒绝,但我们的应用程序需要它,否则它将无法正常工作。您现在可以上传具有目标 sdk 30 和所有文件访问权限的应用程序吗?请回复,这里真的需要帮助。 Google 不应该这样限制它。 查看上面的 cmets,你会发现所有的细节@vijayazararia 它不工作。我已将目标 SDK 设置为 29 但无法正常工作 还有其他解决方案吗?你必须将 sdk 定位到 30 才能将文件上传到控制台 有什么更新吗?【参考方案2】:

我有一个月的同样错误,但最终,Google Play 商店接受了我的上传。

简而言之,我所做的是为每个轨道创建新的构建,而且 - 有趣的是 - 它奏效了!

(在我无数次更新试验之前,我们最新的生产版本是 2.23.5(内部版本 1),我们的活动轨道是内部测试轨道和生产轨道,我正在尝试将我的更新上传到内部测试轨道。)

以下是我应用的步骤:

    创建了包含所有必要更改的新版本 2.24.1(版本 1)。 (例如,将 targetSdkVersion 升级到 30,移除 MANAGE_EXTERNAL_STORAGE 权限等) 激活我们的非活动轨道(开放、封闭 Alpha 和 Beta 测试轨道),将相同的 build 2.24.1(build 1)上传到这些轨道,然后暂停这些轨道。 (我已经暂停了它们,因为我不会主动使用它们,你可能不想暂停它) 创建了另一个与版本 1 完全相同的版本 2.24.1(版本 2)。我刚刚更新了它的版本号。 已将 2.24.1(内部版本 2)上传到内部测试轨道。 创建了另一个与版本 3 完全相同的版本 2.24.1(版本 3)。我刚刚更新了它的版本号。 已将 2.24.1(内部版本 3)上传到生产轨道。 进入“发布概述”页面,激活托管发布,以便在我上传的内容被接受后手动发布到生产和其他轨道。 立即发送这些上传以供审核,瞧,Google 接受您的上传!

【讨论】:

【参考方案3】:

目前play store只接受compile sdk版本和target sdk版本大于等于30的app。 因此,将目标 sdk 版本降低到 29 是行不通的,因为您无法在 Play 商店中上传该应用程序。 现在根据 Play 商店政策,Google Play 限制使用高风险或敏感权限,包括一种名为“所有文件访问”的特殊应用访问权限。这仅适用于面向 Android 11(API 级别 30)并声明了 Android 11 中添加的 MANAGE_EXTERNAL_STORAGE 权限的应用。此外,此政策不影响 READ_EXTERNAL_STORAGE 权限的使用。

长话短说您的应用必须符合所有政策才能获得批准。 只有当您的应用无法有效利用对隐私更友好的最佳实践时,您才应该访问所有文件访问权限,例如使用Storage Access Framework 或Media Store API.

从清单文件中删除外部存储权限。 尝试在需要访问文件的地方应用它:

替换

Environment.getExternalStoragePublicDirectory()

Context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)

因为符合谷歌政策的应用程序可以读写应用程序specific files and folders.

别忘了添加

android:requestLegacyExternalStorage="true"

在目标 sdk 版本高于 29 的清单应用程序标记中。

还可以使用内容提供程序访问应用特定文件夹中的文件。 不知道怎么做的可以参考this.

【讨论】:

【参考方案4】:

昨天我遇到了同样的问题:

目标 sdk (29) 降级对我不起作用。

我刚刚在我的清单中注释掉了“MANAGE_EXTERNAL_STORAGE”权限,更新了版本代码,制作了新版本,最后上传到游戏控制台没有任何问题。

<uses-permission  android:name="android.permission.MANAGE_EXTERNAL_STORAGE"  />

【讨论】:

【参考方案5】:

使用MANAGE_EXTERNAL_STORAGE 不是一个好主意,除非您的应用是文件管理器、防病毒或清洁应用。但是,在您的情况下,您只需要访问特定文件夹,即/sdcard/emulated/0/WhatsApp。我们仍然有一种解决方法,可以通过 Storage Access Framework 文件夹选择器授予对此文件夹的完全访问权限。

您可以通过Intent.ACTION_OPEN_DOCUMENT_TREE强制用户选择WhatsApp文件夹,然后使用ContentResolver#takePersistableUriPermission()保存权限状态。但是编写自己的代码来处理这个问题可能需要付出很多努力。

我建议你使用SimpleStorage。因为它更简单:

class MainActivity : AppCompatActivity() 

    private val storageHelper = SimpleStorageHelper(this)

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        storageHelper.onStorageAccessGranted =  _, root ->
            Toast.makeText(
                this,
                "Folder $root.getAbsolutePath(this) is accessible now.",
                Toast.LENGTH_SHORT
            ).show()
        

        btnRequestStorageAccess.setOnClickListener 
            // Force the user to select directory /sdcard/emulated/0/WhatsApp
            // The access will be granted once the user selected this folder,
            // and then you can explore this directory.
            storageHelper.requestStorageAccess(
                requestCode = REQUEST_CODE_STORAGE_ACCESS,
                initialRootPath = StorageType.EXTERNAL,
                expectedStorageType = StorageType.EXTERNAL,
                expectedBasePath = "WhatsApp"
            )
        
    

    override fun onSaveInstanceState(outState: Bundle) 
        storageHelper.onSaveInstanceState(outState)
        super.onSaveInstanceState(outState)
    

    override fun onRestoreInstanceState(savedInstanceState: Bundle) 
        super.onRestoreInstanceState(savedInstanceState)
        storageHelper.onRestoreInstanceState(savedInstanceState)
    

此答案可能不符合您的期望,但您可以尝试此替代方法。

【讨论】:

【参考方案6】:

应用应符合所有政策才能获得 Google Play 控制台的批准

<uses-permission  android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

当您的应用无法有效利用对隐私更友好的最佳实践(例如使用 Storage Access Framework 或 Media Store API)时的所有文件访问权限。

替换

Environment.getExternalStoragePublicDirectory()

Context.getExternalFilesDir("filename");

【讨论】:

以上是关于PlayStore 不断拒绝应用更新以获得 MANAGE_EXTERNAL_STORAGE 权限,并且应用描述也没有更新的主要内容,如果未能解决你的问题,请参考以下文章

重新创建应用程序以在 Playstore 上作为更新发布

如何更新本机现有应用程序以在 Appstore 和 PlayStore 中颤动?

如何解决我在 Playstore 中被拒绝的 android 应用程序的问题?

Playstore - 应用因“android.permission.READ_CALL_LOG”而被拒绝

Android:Google Play 控制台应用更新因违反政策而被拒绝:所有文件访问权限

如何在 Google Playstore 上修复“违反家庭政策要求”