“HTTP 调用在 Play 商店的 Android 发布版本中被阻止,但在调试和直接发布版本中工作正常”

问题描述 投票:0回答:1

我正在开发一个 Flutter 应用程序,它可以在 iOS 上的生产和调试模式下完美运行。但是,我遇到了 Android 版本应用程序的问题。问题是,当从 Play 商店的内部测试计划下载应用程序时,对 REST API 的 HTTP 调用被阻止。同一个应用程序在调试模式下以及直接在我的手机上构建时都可以完美运行。

错误信息:

ClientException with SocketException Connection failed (OS Error: Operation not permitted, errno = 1), address XXXXXXXX, port 5050,, uri http://XXXXXXXXXX:5050/Auth/SignUp

采取的步骤:

在 AndroidManifest.xml 中添加了 android:usesCleartextTraffic="true":

我将以下行添加到 AndroidManifest.xml 文件以允许明文流量:

<application
    android:usesCleartextTraffic="true">

已验证的网络配置:

我检查了我的 build.gradle 文件并确保不存在可能阻止 HTTP 流量的限制。

测试了不同的场景:

  • 应用程序在发布模式下直接构建在设备上时可以正常工作。

  • 应用程序在调试模式下运行时可以正常工作。

  • 仅当从 Play 商店内部测试轨道安装应用程序时才会出现此问题。

我已经为此苦苦挣扎了 2 天,我的应用程序需要很快投入生产......

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:label="mobilitizzz_mobile"
        android:name="${applicationName}"
        android:usesCleartextTraffic="true"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:taskAffinity=""
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
       
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>

    <queries>
        <intent>
            <action android:name="android.intent.action.PROCESS_TEXT"/>
            <data android:mimeType="text/plain"/>
        </intent>
    </queries>
</manifest>

android flutter dart http
1个回答
0
投票

从 Android API 28iOS 9 开始,这些平台默认禁用不安全的 HTTP 连接。

通过此更改,Flutter 还禁用移动平台上的不安全连接。其他平台(桌面、网页等)不受影响。

试试这个:

在项目的 android 目录中

app/src/main/res/
创建名为
xml
的新目录。并在其中创建
network_security_config.xml

network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <!-- You can add trusted certificates here if needed -->
        </trust-anchors>
    </base-config>
</network-security-config>

现在将其添加到您的

AndroidManifest.xml
文件中:

<application
        android:networkSecurityConfig="@xml/network_security_config"
        android:usesCleartextTraffic="true">
</application>

我最近遇到了同样的问题,这对我有用。我希望它对你有用。

有关更多信息:iOS 和 Android 上默认禁用不安全的 HTTP 连接

© www.soinside.com 2019 - 2024. All rights reserved.