Android Studio 应用程序更新不断被PlayStore拒绝MANAGE_EXTERNAL_STORAGE权限,应用程序描述也未更新

dsf9zpds  于 2023-01-02  发布在  Android
关注(0)|答案(6)|浏览(541)

我的应用程序可以帮助用户管理WhatsApp贴纸link to app,它支持SDK30在第一个版本,但在该版本发布后,现在当我试图更新新版本的应用程序Playstore发送给我的应用程序状态被拒绝,我尝试了多次,我已经提到了应用程序描述中的权限,甚至在应用程序中的原因,而请求权限,但无论是我的应用程序正在更新,还是我的应用程序的简短和详细描述正在更新。我已经填写了敏感许可表格太多,每当我试图发布新版本谷歌发送给我
发布状态应用状态:拒绝
由于违反了策略,你的应用已被拒绝且未发布。如果你提交了更新,你的应用的以前版本仍在Google Play上可用。
问题:无需访问器械存储
你标识的功能不要求不受限制地访问设备存储。还有其他隐私友好选项可用于访问共享存储中的文件,例如使用系统文件选取器,或者根据使用情况,你可以按照建议从此处列出的其他应用接收数据。
请更新你的应用,以便该功能使用隐私友好的替代方案,并删除所有文件访问(MANAGE_EXTERNAL_STORAGE)权限。
策略:所有文件访问权限
用户设备上的文件和目录属性被视为个人和敏感用户数据,应遵守个人和敏感信息政策以及以下要求:
应用应仅请求访问对应用运行至关重要的设备存储空间,不得代表任何第三方出于与面向用户的关键应用功能无关的任何目的请求访问设备存储空间。(Android 11)或更高版本,将需要MANAGE_EXTERNAL_STORAGE权限才能管理共享存储中的访问权限。面向R或更高版本并请求广泛访问共享存储的所有应用("所有文件访问权限")必须在发布前成功通过相应的访问审查。允许使用此权限的应用必须明确提示用户在"特殊应用访问权限"设置下为其应用启用"所有文件访问权限"。有关R要求的详细信息,请参阅此帮助文章。
阅读有关使用所有文件访问权限的更多信息查看Android存储用例和最佳实践,以及如何使用存储访问框架打开文件在Play控制台中解决此问题。非核心功能
你标识的依赖于此权限的功能似乎对你的应用的核心功能并不重要。
核心功能定义为应用程序的主要用途。没有此核心功能,应用程序将"损坏"或无法使用。核心功能以及构成此核心功能的任何核心功能都必须在应用程序的说明中突出记录和宣传。
请更新您的应用,以便该功能不使用此权限,或确保在应用描述中突出记录和宣传核心功能,然后在Play Developer控制台上重新提交您的应用。
策略:所有文件访问权限
用户设备上的文件和目录属性被视为个人和敏感用户数据,应遵守个人和敏感信息政策以及以下要求:
应用应仅请求访问对应用运行至关重要的设备存储空间,不得代表任何第三方出于与面向用户的关键应用功能无关的任何目的请求访问设备存储空间。(Android 11)或更高版本,将需要MANAGE_EXTERNAL_STORAGE权限才能管理共享存储中的访问权限。面向R或更高版本并请求广泛访问共享存储的所有应用("所有文件访问权限")必须在发布前成功通过相应的访问审查。允许使用此权限的应用必须明确提示用户在"特殊应用访问权限"设置下为其应用启用"所有文件访问权限"。有关R要求的详细信息,请参阅此帮助文章。
阅读有关使用所有文件访问权限的更多信息查看Android存储用例和最佳实践在Play控制台中解决此问题。
问题:需要使用Media Store API
你已请求访问所有文件访问权限,但你的应用的核心功能似乎只需要访问媒体文件。借助MediaStore API,应用可以提供和访问外部存储卷上可用的媒体,而无需访问所有文件权限。
请更新你的应用,以便该功能使用媒体商店API并删除所有文件访问(MANAGE_EXTERNAL_STORAGE)权限。
策略:所有文件访问权限
用户设备上的文件和目录属性被视为个人和敏感用户数据,应遵守个人和敏感信息政策以及以下要求:

应用应仅请求访问对应用运行至关重要的设备存储空间,不得代表任何第三方出于与面向用户的关键应用功能无关的任何目的请求访问设备存储空间。(Android 11)或更高版本,将需要MANAGE_EXTERNAL_STORAGE权限才能管理共享存储中的访问权限。面向R或更高版本并请求广泛访问共享存储的所有应用(“所有文件访问权限”)必须在发布前成功通过相应的访问审查。允许使用此权限的应用必须明确提示用户在“特殊应用访问权限”设置下为其应用启用“所有文件访问权限”。有关R要求的详细信息,请参阅此帮助文章。
阅读有关使用所有文件访问权限的更多信息查看Android存储使用案例和最佳实践,以及如何从共享存储访问媒体文件在Play控制台中解决此问题。

f0brbegy

f0brbegy1#

使用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,
                initialPath = FileFullPath(this, StorageId.PRIMARY, "WhatsApp"),
                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)
    }
}

此答案可能无法满足您的期望,但您可以尝试此替代方案。

wnavrhmk

wnavrhmk2#

应用应符合所有政策才能获得Google Play主机的批准

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

当您的应用无法有效利用更隐私友好的最佳做法(例如使用存储访问框架或媒体商店API)时,所有文件访问权限。
替换

Environment.getExternalStoragePublicDirectory()

Context.getExternalFilesDir("filename");
aij0ehis

aij0ehis3#

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

b4lqfgs4

b4lqfgs44#

我有同样的错误一个月,但最后,Google Play商店接受了我的上传。
简单地说,我所做的就是为每个曲目创建新的版本,有趣的是,它起作用了!
(在我进行无数次更新试验之前,我们在生产环境中的最新版本是2.23.5(构建1),我们的活动跟踪是内部测试跟踪和生产环境,我试图将我的更新上传到内部测试跟踪。)
下面是我应用的步骤:
1.创建了新的构建版本2.24.1(构建版本1),并进行了所有必要的更改(例如,将targetSdkVersion升级到30,删除MANAGE_EXTERNAL_STORAGE权限等)
1.激活我们不活跃的轨道(开放,封闭的阿尔法和测试轨道),上传相同的构建2.24.1(构建1)到这些轨道,然后暂停这些轨道。(我暂停了他们,因为我不会积极使用他们,你可能不想暂停它)
1.创建了另一个构建版本2.24.1(构建版本2),它与构建版本1完全相同。我刚刚更新了它的构建版本号。
1.已将2.24.1(构建版本2)上传至内部测试跟踪。
1.创建了另一个构建版本2.24.1(构建版本3),它与构建版本3完全相同。我刚刚更新了它的构建版本号。
1.已将2.24.1(构建版本3)上传至生产跟踪。
1.转到“发布概述”页面,激活管理发布,以便手动发布我的上传到生产和其他轨道,因为他们得到接受。
1.发送这些上传审查一次,瞧,谷歌接受您的上传!

tquggr8v

tquggr8v5#

目前Play商店只接受编译SDK版本且目标SDK版本大于或等于30的应用程序。因此,将目标SDK版本减少到29将无法工作,因为您无法在Play商店上载该应用程序。现在雅阁Play商店政策Google Play限制使用高风险或敏感权限,包括一个名为“所有文件访问”的特殊应用访问权限。这仅适用于面向Android 11的应用(API级别30)并声明MANAGE_EXTERNAL_STORAGE权限,该权限是在Android 11中添加的。此外,此策略不会影响READ_EXTERNAL_STORAGE权限的使用。

长话短说您的应用必须满足所有策略才能获得批准。只有当您的应用无法有效利用更隐私友好的最佳做法(如使用Storage Access FrameworkMedia Store API.)时,您才应访问所有文件访问权限

从清单文件中删除外部存储权限。请尝试在需要访问文件的位置应用此权限:
替换

Environment.getExternalStoragePublicDirectory()

Context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)

因为雅阁Google策略,应用程序可以读写应用程序的pecific files and folders.
别忘了加上

android:requestLegacyExternalStorage="true"

目标SDK版本高于29的清单应用程序标记。
也使用内容提供者到存取文件从应用程序特定的文件夹.如果你不知道如何做这你可以参考this.

368yc8dk

368yc8dk6#

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

  • 目标sdk(29)降级对我不起作用。
  • 我只是注解了“MANAGE_EXTERNAL_STORAGE”权限到我的清单,更新了版本代码,进行了新的发布构建,并最终上传到播放控制台没有任何问题。
<uses-permission  android:name="android.permission.MANAGE_EXTERNAL_STORAGE"  />

相关问题