jquery - generar - cordova ios run
Falló la carga de HTTP(kCFStreamErrorDomainSSL,-9813) en la aplicación Cordova (5)
La versión Swift de la share de share (tomada de here ):
extension NSURLRequest {
static func allowsAnyHTTPSCertificateForHost(host: String) -> Bool {
return true
}
}
He creado una aplicación para iOS usando Cordova 3.2 y jquery mobile 1.3. Utilizo jquery ajax para enviar solicitudes a un servicio RESTfull para recuperar / actualizar información.
Tengo varios dispositivos de prueba, varios iPhones, con varias versiones diferentes de iOS. En un iPhone 4S, ejecutando iOS 7 recibo el siguiente error cuando se envía cualquier solicitud ajax:
NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
Esto solo sucede en este dispositivo, en otro iPhone 4S, que también ejecuta iOS 7, funciona absolutamente bien, como lo hace en todos los otros dispositivos de prueba que estoy usando.
He leído que esto indica que el certificado no es válido de alguna manera, de ser así, ¿se puede ignorar y por qué afectaría en un dispositivo?
¿Alguien puede sugerir por qué podría estar sucediendo esto y qué podría ser diferente acerca del dispositivo que evitaría que funcionara solo en uno de mis dispositivos? Gracias
Si está funcionando en algunos dispositivos y no en otros, hay alguna diferencia en los parámetros de validación de certificados para esos dispositivos. Aquí hay algunas cosas para mirar:
- ¿Los dispositivos felices tienen algún certificado raíz que los dispositivos descontentos no tienen? En particular, si están ejecutando diferentes versiones de iOS, también pueden tener diferentes listas de certificados de confianza. Intente ir a Configuración> General> Acerca de y compare los números de "Trust Store" en la parte inferior. Ver más información here .
- ¿Aceptó manualmente algún certificado intermedio (utilizado para firmar este certificado) en los dispositivos felices en algún momento en el pasado? *
- ¿La fecha / hora es incorrecta en el dispositivo infeliz? Si se establece en un tiempo posterior a la fecha de caducidad del certificado o antes de la fecha de emisión del certificado, lo rechazará. ¡Siempre me estoy disparando en el pie con este!
Si accede a su URL de punto final en el navegador en el dispositivo infeliz, ¿qué error le produce? (Nota: obviamente, su servidor también le dará algún error porque no está solicitando con los encabezados y parámetros correctos. Sin embargo, estoy hablando de Safari en sí. Debería dar un mensaje más detallado sobre lo que (piensa) es mal con el certificado.)
* Editado para corregir algo que recordé mal: no tiene la opción de aceptar el certificado de hoja si va a la URL en Safari, solo tiene la opción de aceptar certificados intermedios si intenta cargarlos directamente.
Tengo el mismo problema al ejecutar la aplicación en el simulador. La razón detrás de esto es que no hay un certificado confiable en el simulador.
simplemente arrastre y suelte sus archivos .cer en la ventana del simulador en ejecución. Verá Safari parpadeando y luego el cuadro de diálogo de importación para su Certificado (o Autoridad de Certificación) ...
Tuve un problema similar, pero en mi caso, en todos los dispositivos esto solía suceder y solo durante una llamada ajax con https.
Si ese es su caso, agregar el siguiente código al final del archivo appDelegate.m mitigará su problema.
@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
Pero dudo que si está funcionando en otros dispositivos, la solución que he dado podría no ser efectiva. Pero dale una oportunidad.
Xcode 7.3 Swift 2.2
Para que esto funcionara tuve que hacer 3 cosas:
- Tuve que agregar la respuesta de Chris ^ al final del AppDelegate.swift después del cierre} para la clase
- luego modifique Info.plist usando esta respuesta https://.com/a/32701693
- Puede obtener información adicional en Apple Developer
- Asegúrese de establecer un nombre de dominio para el servidor en lugar de una dirección IP