React. Solicitud de networking de búsqueda nativa falló iOS

Estoy intentando enviar una request GET a Facebook Graph API usando fetch:

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); }); 

Pero estoy recibiendo TypeError: Network request failed(…) en la console de JavaScript. Esto solo sucede en iOS, funciona bien en Android.

Por lo que sé, iOS on react nativo permite requestes HTTPS de forma pnetworkingeterminada, por lo que esto no debería requerir ninguna configuration.

Puedo hacer una request a https://google.com utilizando la fetch , y puedo ver el resultado de la request anterior en safari cuando imprimo la var url y la pego directamente.

No parece poder encontrar nada similar, pero lo siento si esto es un duplicado.

Por lo que sé, iOS on react nativo permite requestes HTTPS de forma pnetworkingeterminada, por lo que esto no debería requerir ninguna configuration.

Esto no está del todo bien. Cualquier connection https antigua no es lo suficientemente buena para la Seguridad de transporte de aplicaciones, por lo que puede que tenga que hacer alguna configuration. Aquí está la documentation sobre lo que se requiere exactamente para satisfacer ATS sin configuration:

Con ATS totalmente habilitado, las conexiones HTTP de su aplicación deben usar HTTPS y deben cumplir los siguientes requisitos de security:

El certificate del server debe cumplir con al less uno de los siguientes requisitos de confianza: Emitido por una autoridad de certificación (CA) cuyo certificate raíz se incorpora al sistema operativo Emitido por una CA raíz de confianza e instalado por el usuario o un administrador del sistema La capa de transporte negociada versión de security debe ser TLS 1.2 el set de connection de encryption TLS negociado debe ser compatible con el secreto hacia adelante (FS) y ser uno de los siguientes: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA el certificate de server de la hoja debe ser firmado con uno de los siguientes types de llaves: key Rivest-Shamir-Adleman (RSA) con una longitud de al less 2048 bits Clave de cryptography Elliptic-Curve (ECC) con un tamaño de al less 256 bits Además, el algorithm de hashing de certificate de server de hojas debe ser Secure Hash Algorithm 2 (SHA-2) con una longitud de resumen de al less 256 (es decir, SHA-256 o mayor). Si ATS no está habilitado, el sistema aún realiza la evaluación de confianza del server HTTPS, pero puede anularlo caso por caso, como se describe en HTTPS Server Trust Evaluation. Con ATS totalmente habilitado, no puede anular la evaluación de confianza del server HTTPS pnetworkingeterminado.

Los requisitos enumerados en esta sección son actuales a partir de la date de publicación de este documento, con requisitos más estrictos posibles en el futuro. Los cambios a estos requisitos no romperán la compatibilidad binaria de la aplicación.

También he creado un video tutorial sobre cómo hacer las requestes de networking para su aplicación nativa de reacción: http://codecookbook.co/post/how-to-make-network-requests-in-react-native/

Tal vez, un rebash podría funcionar:

 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); }); }; } 

agregue esto a info.plist

 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key><true/> </dict> 

lea más aquí https://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/