Foro

Home Forums PhoneGap Build Socket.io no me funciona en Phonegap Build

This topic contains 6 replies, has 3 voices, and was last updated by  Alexiss 3 meses, 2 semanas .

Viendo 7 respuestas - de la 1 a 7 (de 7 en total)
  • Socket.io no me funciona en Phonegap Build

    Intervenciones
  • elhechizero 
    Participant

    Hola: soy nuevo en Phonegap y claro, me surgen problemas que no sé resolver…
    Estoy haciendo una App (en principio para Android) que debe conectar por Websocket con un servidor que hice con Node.js y Socket.io. El servidor lo tengo alojado en Heroku. He hecho mi página web y, desde mi P.C. funciona perfectamente (conecta por Websocket con ese servidor externo). La subo a Phonegap Build, me crea la .apk y se instala en el móvil correctamente, pero la conexión de Websocket ha dejado de funcionar.
    ¿Tenéis alguna idea de por donde puede andar el error?
    Gracias de antemano.


    Jose Jesus Perez Rivas 
    Keymaster

    Hola @elhechizero,

    Este problema más bien viene por las urls a las que tienes dado permisos de consultas desde tu app, te recomiendo que revises el plugin “whitelist” y que añadas la url del server que está usando para tu proyecto.

    https://www.npmjs.com/package/cordova-plugin-whitelist

    Espero te sea de ayuda :)


    elhechizero 
    Participant

    Hola Jose Jesús, gracias por la respuesta. Mira he añadido el plugin whitelist y la URL del server en el config.xml:

    <plugin name=”cordova-plugin-whitelist” />
    <access origin=”https://mi_host/*” />

    No se si hay que hacer algo más… Me lanza un error:
    Application error
    The connection to the server was unsuccessful (file:///android_asset/www/index.html)

    Sin embargo, añado al config.xml

    <allow-navigation href=”https://host_externo/*” />

    si que me permite abrir esa URL externa…


    Jose Jesus Perez Rivas 
    Keymaster

    Hola,

    Parece que tu problema no es que no puedas ejecutar urls externas, tu problema más bien es que o bien no tienes tu archivo index.html dentro de la carpeta “www” de tu proyecto o bien no tienes referenciado en tu config.xml que este es el archivo de ejecución del tu proyecto phonegap.

    “Application error
    The connection to the server was unsuccessful (file:///android_asset/www/index.html)”

    1.- Revisa si tienes el archivo index.html en tu carpeta “www”.
    2.- Revisa si tienes esta línea de código en tu config.xml:
    1.  <content src="index.html" />

    Ya nos cuentas! :)


    elhechizero 
    Participant

    Hola otra vez, Jose Jesús. Gracias por la respuesta.
    Esos dos detalles est.án bien, la carpeta www contiene el index.html, el config.xml y tres carpetas ( imagenes, estilos y script ); y el config.xml incluye la etiqueta <content src=”index.html” />.
    Te copio el config.xml:

     Code: arbitrary (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.

    <?xml version="1.0" encoding="UTF-8" ?>
    <widget xmlns   = "http://www.w3.org/ns/widgets"
        xmlns:gap   = "http://phonegap.com/ns/1.0"
        id          = "com.herokuapp.xoferapp"
        versionCode = "10"
        version     = "1.0.0" >
    <!-- versionCode is optional and Android only -->
      <name>xoferapp</name>
      <description>App para el conductor.</description>
      <author email="mi_mail@gmail.com" http="http://mi_pagina.tk"/>
      <content src="index.html" />
      <icon src="icon.jpg"/>
      <platform name="android" />
      <plugin name="cordova-plugin-whitelist" />
      <access origin="https://mi_host/*" />
      <allow-navigation href="https://url_externa/*" />
    </widget>

    Y también los scripts que tengo referenciados en el index.html:

     Code: arbitrary (select
    1.
    2.
    3.
    4.
    5.

    <script type="text/javascript" src="script/jquery-3.1.1.min.js"></script>
      <script src="https://mi_host/socket.io/socket.io.js"></script>
      <script type="text/javascript" src="script/herramientas.js"></script>
      <script type="text/javascript" src="script/funciones.js"></script>
      <script type="text/javascript" charset="utf-8" src="cordova.js"></script>

    Es mi primer proyecto con PhoneGap y no sé que estoy haciendo mal. No entiendo porqué abre la URL externa pero no la conexión de websocket (Si entro en la carpeta www y abro el index.html con el explorador si que funciona).
    Gracias de antemano.


    Jose Jesus Perez Rivas 
    Keymaster

    Hola de nuevo,

    Nos has puesto que te retorna este error el proyecto, que supongo que te aparece en una alerta “The connection to the server was unsuccessful (file:///android_asset/www/index.html)”, es correcto?

    Esto significa que algo mal tienes en el proyecto ya que no está iniciando correctamente.

    Yo haría lo siguiente:

    1.- Crearme un proyecto nuevo con phonegap:
    1.  phonegap create mytestapp com.phonegapspain.mytestapp mytestapp
    2.- Ejecutarlo en un dispositivo físico (el mismo que quieras hacer los test de socket)
    3.- Añadir las librerías JS que necesites DENTRO del proyecto phonegap, y referenciarlas en el archivo index.html.
    4.- Añadir los permisos de whitelist con * (estas en tests) en el config.xml
    5.- Compilar de nuevo y ver que continua funcionando bien el proyecto en el dispositivo físico.

    Y a ver que pasa ;)


    Alexiss 
    Participant

    Hola a todos.

    Ha pasado mucho tiempo desde que se comento este problema. Sin embargo, yo tuve el mismo y tarde algo de tiempo buscando la solución, la comento aquí para los que estén en esta situación.

    Estaba trabajando con una app en phonegap utilizando socket.io. Funcionaba perfectamente desde la app de phonegap que descargue en la play store, de igual forma estaba ejecutando la aplicación en un navegador con la opción de inspeccionar para verificar que no existiera algún error. Tanto en la app como en el navegador funcionaba bien, sin ningún error. Pero al construir el apk con: corvoda build android, y al instalarlo ya no funcionó. Se mostraba la vista pero la funcionalidad ya no se llevaba a cabo.

    Encontré el problema al debuggear el apk en android studio. Básicamente esa respuesta ya la dieron. Esto es por querer acceder a url externas. En mi caso era socket.io, así que simplemente descargué la librería en esta direccion(https://github.com/socketio/socket.io-client), la introduje en la carpeta del proyecto y la referencie en mi index.html (<script src=”path/socket.io.js”></script>).

    En conclusión, hay dos opciones.
    1. Descargar toda librería o paquete que se utilizará (por ejemplo, css, jquery,chart.js, socket.io, etc) y hay que hacer referencia de los mismos en los html donde se vayan a utilizar. El punto es que ningún paquete o librería se cargue de forma que tenga que acceder a ellos de forma externa.

    2. Configurar la aplicación que se esta desarrollando a manera de que acepte acceder a url externas. (no sé como se configura, si alguien sabe, sería de gran utilidad que lo mencionara, ya intente con whitelist, y demás pero no me funcionó, por tal motivo opte por la primer opción)

    Saludos, espero les sea de ayuda.


Viendo 7 respuestas - de la 1 a 7 (de 7 en total)

You must be logged in to reply to this topic.