Flutter HTTP请求在最新Android设备无响应问题排查求助
Flutter跨平台应用在最新Galaxy设备上HTTP请求无响应问题排查
问题描述
我用Flutter开发跨平台应用时,遇到仅Galaxy S23 Ultra、Galaxy S24+等最新Android设备上HTTP请求无响应的问题,后端确认未收到任何请求,定位为客户端问题。该请求在iOS设备、旧款Android设备(如Galaxy Tab A7 Lite)及Android Studio的Android 14模拟器上均可正常工作。
注册接口代码
Future<int> register( String name, String password, String phoneNo, String birthday, String gender ) async { var pref = await SharedPreferences.getInstance(); var token = pref.getString(SharedPreferencesKeys.fcmToken) ?? ''; Map data = { 'username': name, 'userbirth': birthday, 'gender': gender, 'phoneno': phoneNo, 'password': password, 'fcm': token, }; var url = Uri.parse(Url.getSignupUrl()); var body = json.encode(data); try { var response = await http.post( url, headers: { 'Content-Type': 'application/json', }, body: body, ).timeout(const Duration(seconds: 10)); if (response.statusCode == 200) { Map<String, dynamic> decodedJson = json.decode(response.body); // for future use String accessToken = decodedJson['result']['tokens']['accessToken']['accessToken']; int accessTokenTimeout = decodedJson['result']['tokens']['accessToken']['timeout']; String refreshToken = decodedJson['result']['tokens']['refreshToken']['refreshToken']; int refreshTokenTimeout = decodedJson['result']['tokens']['refreshToken']['timeout']; String userId = decodedJson['result']['userId']; const storage = FlutterSecureStorage( aOptions: AndroidOptions( encryptedSharedPreferences: true, ) ); print('register: $userId, $name, $phoneNo, $birthday, $sex'); storage.write(key: SecureStorageKeys.userId, value: userId); storage.write(key: SecureStorageKeys.name, value: name); storage.write(key: SecureStorageKeys.phoneNo, value: phoneNo); storage.write(key: SecureStorageKeys.birthday, value: birthday); storage.write(key: SecureStorageKeys.sex, value: sex); await pref.setString(SharedPreferencesKeys.accessToken, accessToken); await pref.setString(SharedPreferencesKeys.refreshToken, refreshToken); await pref.setInt(SharedPreferencesKeys.accessTokenTimeout, accessTokenTimeout); await pref.setInt(SharedPreferencesKeys.refreshTokenTimeout, refreshTokenTimeout); return(response.statusCode); } else { return(-1); } } catch (e) { return(-1); } }
API端点
http://WW.XXX.YYY.ZZZ:3000/my/route
网络安全配置(network_security_config.xml)
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">WW.XXX.YYY.ZZZ</domain> </domain-config> </network-security-config>
AndroidManifest配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:label="mylabel" android:name="${applicationName}" android:extractNativeLibs="true" android:networkSecurityConfig="@xml/network_security_config" 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" android:showWhenLocked="true" android:turnScreenOn="true" > <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> <activity android:name=".VerificationActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar" /> <meta-data android:name="flutterEmbedding" android:value="2" /> <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" android:exported="false" /> <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver" android:exported="false" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" /> </intent-filter> </receiver> </application> <queries> <intent> <action android:name="android.intent.action.PROCESS_TEXT"/> <data android:mimeType="text/plain"/> </intent> </queries> <uses-feature android:name="android.hardware.bluetooth_le" android:required="false" /> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.BLUETOOTH_SCAN"/> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"/> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="28" /> </manifest>
Flutter环境信息
[✓] Flutter (Channel stable, 3.24.0, on macOS 14.2 23C64 darwin-arm64, locale ko-KR) [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [✓] Xcode - develop for iOS and macOS (Xcode 15.4) [✓] Chrome - develop for the web [✓] Android Studio (version 2024.1) [✓] VS Code (version 1.94.2) [✓] VS Code (version 1.91.1) [✓] Network resources
排查建议
- 检查目标设备网络:确认设备连接正常网络,切换Wi-Fi/蜂窝数据测试
- 完善错误日志:在catch块中打印具体错误信息,请求前打印URL和请求体,验证参数正确性
- 替换HTTP库测试:尝试用
dio库替代http库,排查库兼容性问题 - 验证Android 14+网络限制:检查设备系统隐私设置、厂商安全软件是否拦截目标域名请求
- 调整cleartext配置:在network_security_config.xml中添加
<base-config cleartextTrafficPermitted="true"/>作为兜底配置 - 检查FCM Token:确认最新设备上FCM Token是否正常获取,避免异常Token导致请求失败
- 简化请求测试:发送无参数的基础POST请求到目标端点,排除请求体参数问题
内容的提问来源于stack exchange,提问作者Runnan
相关产品推荐
相关产品推荐

