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 权限,并且应用描述也没有更新的主要内容,如果未能解决你的问题,请参考以下文章
如何更新本机现有应用程序以在 Appstore 和 PlayStore 中颤动?
如何解决我在 Playstore 中被拒绝的 android 应用程序的问题?
Playstore - 应用因“android.permission.READ_CALL_LOG”而被拒绝