es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué el preflight falla en dispositivos Android más nuevos y no en dispositivos más antiguos y de escritorio?

Estoy utilizando el paquete axios para enviar solicitudes de API desde mi aplicación a mi backend. El backend está construido con Laravel y es una API REST simple. Si ejecuto la aplicación Ionic en el escritorio usando ionic serve, funciona bien. Si construyo un APK e instalo la aplicación en un dispositivo Android con una versión 8 o inferior, funciona bien. Si lo instalo en un dispositivo Android con una versión 9 o superior, las verificaciones previas siguen fallando. (Esto usa la función de dispositivos remotos de Chrome para inspeccionar solicitudes desde la aplicación). Inicialmente, ni siquiera se enviarían las solicitudes y daría un error antes de eso, así que configuré mi configuración de seguridad de red para Android y eso eliminó el error inicial, pero ahora sigue fallando en la verificación previa. Sospecho que podría estar relacionado con el hecho de que las solicitudes en la aplicación se envían desde http://localhost, pero no estoy seguro de cómo resolver esto. ¿Se puede forzar a utilizar SSL? Si es así, ¿cómo? Mi configuración de CORS para Laravel es más flexible que la configuración CORS predeterminada que Laravel proporciona:


return [
'paths' => [''],
'allowed_methods' => ['
'],
'allowed_origins' => [''],
'allowed_origins_patterns' => [],
'allowed_headers' => ['
'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
];

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución

    El problema podría estar relacionado con el envío de solicitudes desde `http://localhost`. Los dispositivos Android con la versión 9 o superior restringen el envío de solicitudes sobre conexiones no seguras.

    Para resolver esto, puedes obligar a tu aplicación a usar SSL configurando la seguridad de red en tu archivo AndroidManifest.xml. Agrega las siguientes líneas de código a tu archivo AndroidManifest.xml debajo de la etiqueta application:

    <application ...="" android:usescleartexttraffic="true">
    

    Esto permitirá que tu aplicación envíe solicitudes sobre conexiones no seguras, sin embargo, se recomienda utilizar SSL para transmisiones de datos seguras.

    Además, también puedes actualizar la configuración CORS de tu backend de Laravel y agregar soporte para solicitudes SSL, actualizando la clave allowed_origins en tu archivo cors.php, de esta manera:

    return [
        'paths' => ['*'],
        'allowed_methods' => ['*'],
        'allowed_origins' => ['https://tu-dominio-ssl.com'],
        'allowed_origins_patterns' => [],
        'allowed_headers' => ['*'],
        'exposed_headers' => [],
        'max_age' => 0,
        'supports_credentials' => false,
    ];
    

    Esto permitirá que las solicitudes desde tu dominio SSL accedan al backend de Laravel. Asegúrate de reemplazar `https://tu-dominio-ssl.com` con tu dominio SSL real.

    Aplicando estos cambios, deberías ser capaz de enviar solicitudes API desde tu aplicación Ionic a tu backend de Laravel en dispositivos Android con la versión 9 o superior, sin errores previos de verificación.

Comments are closed.