【问题标题】:React Native Network Fails On Android 9Android 9 上的 React Native 网络失败
【发布时间】:2019-12-11 19:24:17
【问题描述】:

访问隐藏方法Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V(浅灰名单,反射)

我使用 fetch 从 https Url 连接和检索数据。 在第一次尝试时,连接需要很长时间并且请求失败。 但是当我第二次点击时,请求成功。 Release 和 Debug apk 的结果是一样的。

我能得到的唯一错误日志是上面的。 我已经在清单中添加了以下内容

 android:usesCleartextTraffic="true"
 tools:targetApi="28"

另外,我应该补充一点,在发送请求时,如果我断开设备与互联网的连接并重新连接手机,请求就会成功。

这是宣言

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.weecomicustomernative">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />

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

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

    <!-- These require runtime permissions on M -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
        android:name=".MainApplication"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        tools:ignore="GoogleAppIndexingWarning"
        tools:targetApi="28">
        <activity
            android:name="com.weecomicustomernative.MainActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
            android:label="@string/app_name"
            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" />

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzaSyCviF26pcJZtKxFx1koGhhJLbwC4bLDTBs" />

    </application>

</manifest>

这是 package.json 文件

"@react-native-community/async-storage": "^1.6.3",
"@react-native-community/geolocation": "^2.0.2",
"@react-native-community/netinfo": "^4.6.1",
"axios": "^0.19.0",
"react": "16.9.0",
"react-native": "0.61.5",
"react-native-camera": "^3.11.1",
"react-native-check-box": "^2.1.7",
"react-native-geolocation-service": "^3.1.0",
"react-native-gesture-handler": "~1.3.0",
"react-native-i18n": "^2.0.15",
"react-native-image-crop-picker": "^0.26.1",
"react-native-image-picker": "^1.1.0",
"react-native-image-placeholder": "^1.0.14",
"react-native-maps": "0.26.1",
"react-native-modal": "^11.5.3",
"react-native-permissions": "^2.0.6",
"react-native-progress-circle": "^2.1.0",
"react-native-pull-to-refresh": "^2.1.3",
"react-native-qrcode-svg": "^5.3.2",
"react-native-reanimated": "^1.4.0",
"react-native-s3-upload": "0.0.12",
"react-native-svg": "^9.13.3",
"react-native-swiper-flatlist": "^2.0.3",
"react-native-vector-icons": "^6.6.0",
"react-navigation": "^4.0.10",
"react-navigation-drawer": "^2.3.3",
"react-navigation-header-buttons": "^3.0.4",
"react-navigation-stack": "^1.10.3",
"react-navigation-tabs": "^2.5.6",
"react-redux": "^7.1.3",
"redux": "^4.0.4"

任何帮助将不胜感激。

【问题讨论】:

  • 你的 RN 版本是多少?
  • “react”:“16.9.0”,“react-native”:“0.61.5”,@alvaropaco

标签: android react-native fetch


【解决方案1】:

尝试解决这个问题:在您的主 AndroidManifest.xml 中添加代码

    <manifest xmlns:tools="http://schemas.android.com/tools"> .... <application 
        android:usesCleartextTraffic="true" tools:targetApi="28"> ... 
    </application> </manifest>

【讨论】:

  • 你用的是安卓模拟器吗?这是连接到您的网络?使用的是 http 还是 https?
  • 你设置网络状态权限了吗? &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt;
  • 在某些情况下您可能需要将 android:targetSandboxVersion 设置为 1;当前默认值为 2,默认设置 useClearTextTraffic=false。
  • 刚刚添加,我用的是https,
  • 但您也需要拥有自签名证书才能正常工作。
猜你喜欢
  • 2021-04-07
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多