2017-02-18 3 views
2

J'ai une application qui utilise socket.io (1.4.5) pour établir une connexion websocket. L'application est disponible via une URL Web et également comme une application Android packagée utilisant Trigger.io.Erreur lors de la création d'une connexion websocket dans une application hybride

L'application Android ne parvient pas à se connecter à mon serveur Websocket. Ceci est l'erreur que je reçois

WebSocket connection to 'wss://myserver.com/socket.io/?user_id=xxx&session_token=xxx&EIO=3&transport=websocket' failed: Unspecified reason 

La ligne elle fait référence dans le client socket.io est dans la méthode doOpen().

this.ws = BrowserWebSocket ? new WebSocket(uri) : new WebSocket(uri, protocols, opts); 

Pour autant que je sache, je n'ai apporté aucune modification au serveur WebSocket. Et le site lui-même fonctionne bien et capable de se connecter au serveur websocket.

J'ai inspecté l'application Android Trigger.io en utilisant Chrome Devtools et lorsque j'essaie manuellement de me connecter à mon serveur websocket, j'ai la même erreur. La ligne de code suivante ne fonctionne pas. L'exécution de la même ligne de code dans le navigateur Chrome fonctionne très bien.

En outre, la réponse d'erreur semble trop rapide. Il semble que le webview de l'application hybride n'essaie même pas de se connecter. La réponse est la même, que le serveur websocket soit en cours d'exécution ou non. Taper dans une URL non-sens donne la même erreur.

new WebSocket("wss://blahblah"); //gives the same error and response immediately 

La version Chrome dans l'application de déclenchement est 55.0.2883.91.

EDIT: J'ai testé la connexion websocket sur le navigateur mobile de l'appareil qui exécute l'application, juste pour s'assurer qu'il ne s'agit pas d'un problème de proxy/connexion. Et cela a bien fonctionné.

+1

Pouvez-vous créer une connexion à un autre serveur? Essayez également sans connexion sécurisée pour vous assurer que vous pouvez vous connecter quelque part. – Janne

+1

@Janne J'ai essayé de me connecter à deux serveurs de socket différents que je connais, mais ça ne s'est toujours pas passé avec la même erreur. – JohnP

+1

Voir cet article http://stackoverflow.com/questions/16675450/support-for-websockets-on-android – Janne

Répondre

1

La solution consiste à utiliser le module httpd dans Trigger.

La configuration du serveur httpd permet de diffuser l'application avec une URL http://localhost au lieu du contenu: ou un fichier: protocole. Grâce à cela, tout problème de Chrome CSP bloquant la connexion est levé.

Module docs: https://trigger.io/modules/httpd/current/