【发布时间】:2020-04-25 17:57:00
【问题描述】:
我对 iOS 设备上的颤振 dio 包有一个奇怪的问题。 我编写了一个向 url 发送 GET 请求的应用程序。一切都在 Android 上完美运行,但看起来请求在 iOS 上没有通过。 什么都没有发生,没有错误,什么都没有。我在 android 上也遇到了同样的问题,但我发现我忘记在清单文件中添加 INTERNET 权限。我猜 iOS 中也会出现同样的情况。
iOS 中是否有任何我需要添加 info.plist 的 INTERNET 权限?
void _checkVersionAndPreferences() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String prefsRes = prefs.getString('access_token') ?? '';
String buildNumber = _packageInfo.buildNumber ?? '1';
Dio dio = Dio();
_cancelToken = CancelToken();
Future.delayed(Duration(seconds: 10), () {
if (_getRequestSuccess == false) {
_cancelToken.cancel();
_checkVersionAndPreferences();
_showSnackBar(
content: 'تلاش مجدد برای برقراری ارتباط',
duration: Duration(seconds: 3),
leading: Icon(Icons.refresh, color: Colors.black));
}
});
Response response = await dio.get(
'https://snapmelk.com/api/v1/panel/checkVersion/' + buildNumber,
cancelToken: _cancelToken);
try {
Map respJson = jsonDecode(response.data);
setState(() {
_getRequestSuccess = true;
});
if (respJson['error']) {
_showSnackBar(
content:
(respJson['errorMsg'] != null && respJson['errorMsg'] != '')
? respJson['errorMsg']
: 'خطا در اتصال دریافت اطلاعات آخرین نسخه',
leading: Icon(Icons.warning),
backgroundColor: Colors.red,
textColor: Colors.white);
} else {
if (respJson['NewUpdate']) {
_checkDialogAnswer(respJson, prefsRes);
} else {
_checkPrefs(prefsRes);
}
}
} catch (e) {
_showSnackBar(
content: 'خطا در اتصال با سرور. لطفا در زمانی دیگر مراجعه کنید',
leading: Icon(Icons.warning),
backgroundColor: Colors.red,
textColor: Colors.white);
}
}
【问题讨论】:
-
您是通过 HTTPS 还是纯 HTTP 进行联系? iOS 默认阻止 HTTP 连接,见Preventing Insecure Network Connections
-
我正在使用 HTTPS。
-
您需要出示您的代码。造成这种情况的最常见原因是未能在 URLSessionTask 上调用
.resume(),但是混合了 dio 和颤动,您实际调用的是什么并不明显。 iOS 中没有特殊的“互联网”权限(如果有,您会收到错误消息)。我们需要看代码。 -
你去我的朋友