React Native - Play 商店警告“从 5 月 5 日开始,您必须让我们知道为啥您的应用需要广泛的存储访问权限”
Posted
技术标签:
【中文标题】React Native - Play 商店警告“从 5 月 5 日开始,您必须让我们知道为啥您的应用需要广泛的存储访问权限”【英文标题】:React Native - Play Store Warning "Starting May 5th you must let us know why your app requires broad storage access"React Native - Play 商店警告“从 5 月 5 日开始,您必须让我们知道为什么您的应用需要广泛的存储访问权限” 【发布时间】:2021-07-09 21:41:51 【问题描述】:我有一个 React Native 应用程序在 Play 商店上架了一段时间,最近我收到了来自 Play 商店的重要通知,说明如果我不解决此问题,我的应用程序将从 Play 商店中删除。
谁能告诉我这是什么以及如何解决它?
这是来自 Play 商店的完整消息
我们检测到您的应用在清单文件中包含 requestLegacyExternalStorage 标志 1 或 更多您的 app bundle 或 APK。
在运行 android 11+ 的设备上拥有应用的开发者必须使用 Scoped 存储让用户更好地控制他们的设备存储。 要在 5 月 5 日之后在 Android 11 或更高版本上发布您的应用,您必须 要么:
更新您的应用以使用对隐私更友好的最佳做法,例如 存储访问框架或媒体存储 API 更新您的应用,在清单文件中声明所有文件访问权限 (MANAGE_EXTERNAL_STORAGE),并完成所有文件访问权限 5 月 5 日起在 Play 管理中心中声明 从您的应用中完全删除所有文件访问权限。对于面向 Android 11 的应用, requestLegacyExternalStorage 标志将被忽略。您必须使用 保留广泛访问权限的所有文件访问权限。
请求访问所有文件访问权限的应用程序没有 允许的使用将从 Google Play 中删除,您将无法使用 发布更新。
我的 package.json
"@react-native-async-storage/async-storage": "^1.13.4",
"@react-native-community/masked-view": "^0.1.10",
"@react-navigation/bottom-tabs": "^5.11.8",
"@react-navigation/drawer": "^5.12.3",
"@react-navigation/material-bottom-tabs": "^5.3.14",
"@react-navigation/native": "^5.9.2",
"@react-navigation/stack": "^5.14.2",
"axios": "^0.21.1",
"fuse.js": "^6.4.6",
"react": "16.13.1",
"react-native": "0.63.4",
"react-native-device-info": "^8.0.1",
"react-native-gesture-handler": "^1.10.0",
"react-native-linear-gradient": "^2.5.6",
"react-native-paper": "^4.7.1",
"react-native-reanimated": "^1.13.2",
"react-native-safe-area-context": "^3.1.9",
"react-native-screens": "^2.17.1",
"react-native-svg": "^12.1.0",
"react-native-vector-icons": "^8.0.0"
和 manifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.elevel.fromto">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
在 App bundle explorer 下的 Play Console 中,我发现我的应用正在使用以下权限:
android.permission.INTERNET com.google.android.c2dm.permission.RECEIVE com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE【问题讨论】:
也许你使用了一个使用requestLegacyExternalStorage
的库,因为你的清单看起来不错
我不明白到底是哪个库导致了这个问题。我的猜测是异步存储社区版本,但它的清单看起来不错。我应该把requestLegacyExternalStorage
放在我的清单中
我的 React Native 应用程序从 Play 商店收到了相同的消息。我的清单还包含 android:requestLegacyExternalStorage="true"。
你能修复它吗?
我的假设是,在将目标 SDK 设置为 Android 11 后,此警告不会成为问题。然后,requestLegacyExternalStorage 不会对 Android 11+ 设备产生任何影响,但只会对 Android 10 设备产生影响,即一个allowed use-case by the Android team。将目标 SDK 设置为 Android 11 后,您需要确保您的插件继续按预期工作(这些应该是保存/加载任何类型文件的插件)。
【参考方案1】:
我发现,如果我们的目标是 Android API 29,我们不必担心警告,只需在应用的清单文件中设置 requestLegacyExternalStorage=true
。
虽然我们必须在 11 月之前升级到 Android API 30。
【讨论】:
你在哪里将 legacy 标志设置为 true? 没错,这没什么好担心的。即使您的目标是 30,requestLegacyExternalStorage=true
也会被忽略...【参考方案2】:
我的理解是,即使针对 Android 11,我们也应该能够使用此选项解决问题:
更新您的应用以在清单文件中声明所有文件访问权限 (MANAGE_EXTERNAL_STORAGE),并从 5 月 5 日起在 Play 管理中心完成所有文件访问权限声明我认为这是解决 android:requestLegacyExternalStorage="true" 在 Android 11 上将被忽略这一事实的方法。虽然我不确定如何在 Play Console 中声明所有文件访问权限。应该有某种形式,您应该指定您的应用需要此权限的原因。任何人都可以看到这个表格在哪里?
【讨论】:
我真的不需要访问外部存储,有什么方法可以在清单中指定吗?【参考方案3】:不是修复,但Reddit 上有一个帖子,您可能有兴趣阅读。有报告称有人收到此消息,即使他们没有启用requestLegacyExternalStorage
标志。
【讨论】:
【参考方案4】:可能是您正在使用一些调用 MANAGE_EXTERNAL_STORAGE 的 RN 依赖项
示例 路径示例 -> /MyProject/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml
<!-- Required to read and write the expansion files on shared storage -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
即使我没有使用它,我也安装了这个依赖 RNFetchBlob rn-fetch-blob,因此您可能需要寻找使用 WRITE_EXTERNAL_STORAGE 或 android:requestLegacyExternalStorage="true" 的外部依赖
【讨论】:
我在 react-native/ReactAndroid/androidTest/AndroidManifest.xml 和 react-native/ReactAndroid/androidTest/buck-runner/AndroidManifest.xml 下的 node-modules 文件夹中找到了<!-- needed for screenshot tests --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
【参考方案5】:
我从位于以下位置的日志中发现了导致合并的AndroidManifest.xml
包含android:requestLegacyExternalStorage
的原因:
./android/app/build/outputs/logs/manifest-...-report.txt
只需在文件中找到requestLegacyExternalStorage
。
【讨论】:
在我的 manifest-merger-release-report.txt 我没有找到任何requestLegacyExternalStorage
的实例。同样在 App Bundle explorer 部分下的 Play Console 中,我发现我的应用正在使用以下权限 android.permission.INTERNET
、com.google.android.c2dm.permission.RECEIVE
、com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE
以上是关于React Native - Play 商店警告“从 5 月 5 日开始,您必须让我们知道为啥您的应用需要广泛的存储访问权限”的主要内容,如果未能解决你的问题,请参考以下文章
在 Play 商店更新 React Native 应用程序时,仍然显示卸载和打开选项。不显示更新选项
由于 READ_SMS 权限 + React Native,Android 构建在 Play 商店中被拒绝
来自 Google Play 商店的 Android React Native App HostNameVerifier 错误
来自 Google Play for My React Native 应用程序的呼叫/短信许可最终警告电子邮件