反应原生 - Play 商店警告"Starting May 5th you must let us know why your app requires broad storage access"



我有一个react原生应用程序,它在play store上已经存在了一段时间,最近我收到了play store的这条重要通知,声明如果我不解决这个问题,我的应用程序将从play store中删除。

有人能告诉我这是什么以及如何修复吗?

这是来自Play商店的完整消息

我们检测到您的应用程序在1或的清单文件中包含requestLegacyExternalStorage标志更多的应用捆绑包或APK。

在运行Android 11+的设备上拥有应用程序的开发者必须使用Scoped存储,为用户提供对其设备存储的更好访问控制。要在5月5日之后在Android 11或更新版本上发布您的应用程序,您必须任一:

  • 更新您的应用程序以使用更隐私友好的最佳实践,例如存储访问框架或媒体存储API
  • 更新您的应用程序以在清单文件中声明"所有文件访问"(MANAGE_EXTERNAL_STORAGE(权限,并完成"所有文件"访问权限从5月5日起在Play控制台中声明
  • 从应用程序中完全删除"所有文件"访问权限

对于针对Android 11的应用程序requestLegacyExternalStorage标志将被忽略。您必须使用所有文件都有访问权限,以保留广泛的访问权限。

请求访问"所有文件"访问权限的应用程序允许使用将从Google Play中删除,您将无法使用以发布更新

我的软件包.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>

同样在应用程序捆绑包资源管理器下的Play Console中,我发现我的应用程序正在使用以下权限:

  • android.permission.INTERNET
  • com.google.android.c2dm.permission.RECEIVE
  • com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE

我发现,如果我们的目标是Android API 29,我们不必担心警告,只需在应用程序的清单文件中设置requestLegacyExternalStorage=true即可。

尽管我们必须在11月之前升级到Android API 30。

我的理解是,即使在针对Android 11:的情况下,我们也应该能够使用此选项来解决问题

  • 更新您的应用程序,在清单文件中声明所有文件访问(MANAGE_EXTERNAL_STORAGE(权限,并从5月5日起在Play Console中完成所有文件访问权限声明

我认为这是修复android:requestLegacyExternalStorage="真";将在Android 11上被忽略。虽然我不知道如何在Play控制台中声明所有文件的访问权限。应该有一些表格,您应该在其中指定应用程序需要此权限的原因。有人能看到这个表格在哪里吗?

不是一个修复程序,但Reddit上有一个线程你可能有兴趣阅读。有人收到此消息的报告,即使他们没有启用requestLegacyExternalStorage标志。

可能是您正在使用某个RN依赖项,该依赖项正在调用MANAGE_EXTERNAL_STORAGE

示例路径示例->MyProject/nod_module/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=";真";

我从位于以下位置的日志中发现了导致合并的AndroidManifest.xml包含android:requestLegacyExternalStorage的原因:

./android/app/build/outputs/logs/manifest-...-report.txt

只需在文件中找到requestLegacyExternalStorage即可。

最新更新