Ios 响应本机获取网络请求失败
我正在尝试使用fetch向Facebook Graph API发送GET请求:Ios 响应本机获取网络请求失败,ios,facebook,post,react-native,Ios,Facebook,Post,React Native,我正在尝试使用fetch向Facebook Graph API发送GET请求: var url = "https://graph.facebook.com/v2.7/" +FACEBOOK_APP_ID +"?fields=context" +"{friends_using_app{id,name,picture.type(normal)}}" +"&access_token="+_this.props.user.facebook_access_token; fetch(url) .t
var url = "https://graph.facebook.com/v2.7/"
+FACEBOOK_APP_ID
+"?fields=context"
+"{friends_using_app{id,name,picture.type(normal)}}"
+"&access_token="+_this.props.user.facebook_access_token;
fetch(url)
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson);
})
.catch(function(error) {
console.log(error);
});
但是我在JavaScript控制台中得到了TypeError:networkrequest失败(…)
这只发生在iOS上,在Android上运行良好。
据我所知,react native上的iOS默认允许HTTPS请求,所以这不需要任何配置
我可以使用fetch
请求,并且当我打印url
var并直接粘贴时,我可以在safari中查看上述请求的结果
似乎找不到任何类似的内容,但如果这是重复的,则很抱歉。可能,重试可能会起作用:
static sendCard(card, account, retries) {
return (dispatch, getStore) => {
if (retries && retries > 1) {
return;
}
fetch(apiUrls.sendCardUrl, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Api-Key': account.token,
},
body: JSON.stringify({
card
})
})
.then(response => {
// do something
})
.catch(err => {
// retry again!
retries = retries || 0;
retries++;
setTimeout(() => {
CardActions.sendCard(card, account, retries);
}, 1000);
});
};
}
将此添加到Info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
在这里阅读更多
据我所知,react native上的iOS默认允许HTTPS请求,所以这不需要任何配置
这不太正确。任何旧的https连接都不足以保证应用程序传输安全,因此您可能仍然需要进行一些配置。以下是满足无配置ATS的具体要求:
在完全启用ATS的情况下,应用程序的HTTP连接必须使用HTTPS和
必须满足以下安全要求:
服务器证书必须至少满足以下信任之一
要求:由根证书颁发机构(CA)颁发
证书被合并到由
受信任的根CA,由用户或系统管理员安装
协商的传输层安全版本必须是TLS 1.2
协商TLS连接密码套件必须支持前向保密
(FS)并应为以下情况之一:
TLS_ECDHE_ECDSA_与_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_与_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_与_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_与_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_与_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_与_AES_128_CBC_SHA
TLS_ECDHE_RSA_与_AES_256_GCM_SHA384
TLS_ECDHE_RSA_与_AES_128_GCM_SHA256
TLS_ECDHE_RSA_与_AES_256_CBC_SHA384
TLS_ECDHE_RSA_与_AES_128_CBC_SHA256
TLS_ECDHE_RSA_与_AES_128_CBC_SHA叶服务器证书必须是
使用以下类型的密钥之一签名:Rivest Shamir Adleman
(RSA)长度至少为2048位椭圆曲线的密钥
此外,密码(ECC)密钥的大小至少为256位,
叶服务器证书哈希算法必须是安全哈希
算法2(SHA-2),摘要长度至少为256(即,
SHA-256或更高)。如果未启用ATS,系统仍将执行
HTTPS服务器信任评估,但您可以在
根据具体情况,如HTTPS服务器信任评估中所述。
在ATS完全启用的情况下,您无法覆盖默认的HTTPS服务器
信任评估
本节所列要求自本节起为最新要求
文件的发布日期,可能有更严格的要求
未来。对这些要求的更改不会破坏应用程序二进制文件
兼容性
我还创建了一个视频教程,介绍如何为react本机应用程序发出网络请求:我在模拟器中获取时遇到了类似的错误。如果我重做提取,它似乎可以工作。不确定0.31版本中的fetch是否有问题。重做是什么意思?我的意思是重试fetch。您能提供一个代码示例吗?我尝试在
.catch()
方法中重试该请求,但它不起作用。我尝试了此方法,但没有效果,即使在重新启动/重置模拟器和我的计算机后也是如此。