Ich schreibe eine Android-App, die eine Verbindung zu einer Socket.IO-Instanz herstellen muss, die auf einem node.js-Server ausgeführt wird.
Der Versuch, eine Verbindung mit der Instanz herzustellen und Daten mit einem iOS-Gerät zu übertragen, funktioniert einwandfrei, aber wenn ich es mit einem Android-Gerät versuche, schlägt es fehl.
Ich verwende den nativen Java-Client , und dies ist der Code, den ich auf der Android-Seite:
%Vor% Immer wenn ich versuche eine Verbindung herzustellen (grundsätzlich sobald die Zeile mSocket.connect();
) Das Protokoll druckt folgende Zeilen:
So bekomme ich sofort nach dem Verbindungsversuch einen xhr-Poll-Fehler und alle folgenden Verbindungsversuche treffen auf dasselbe Ergebnis.
Ich habe einige Posts gesehen, die besagen, dass ein solches Problem durch ein SSL-Zertifikat-Problem verursacht wurde, obwohl alle Versuche, die ich unternommen habe, um den SSL-Kontext der Socket.IO-Bibliothek zu mildern, nicht funktionierten.
Wenn anyoen eine Idee hat, was ich in der Lage sein könnte, dies zu erreichen, wäre es ausgezeichnet.
Wenn Informationen oder Code-Beispiele fehlen, lassen Sie es mich wissen und ich füge sie hinzu.
Nach weiteren Tests habe ich folgendes gefunden:
Der Code, den ich verwendet habe, um meiner Socket-Anfrage einen Basis-Authentifizierungs-Header hinzuzufügen:
%Vor%Wenn beim Versuch, Socket.IO zu verwenden, ein XHR-Poll-Fehler auftritt, stellen Sie sicher, dass die Verbindung zu Ihrem Socket-Server verfügbar ist und dass Sie eine ordnungsgemäße Verbindung herstellen. Am Ende drehte sich alles um den Server, der eine Standardauthentifizierung erforderte, und ich versorgte ihn nicht, wenn ich den Server kontaktierte.
Auch , weil ich beim Lösen dieses Problems auf diese Lösung gestoßen bin - Wenn Sie versuchen, Ihren Server über HTTPS zu erreichen, brauchen Sie normalerweise keine a spezieller Hostname-Verifier oder spezieller Zertifikatsmanager. Versuche und vermeide solche Lösungen, da sie die Sicherheit deiner App stark beeinträchtigen.
Ich habe Ihren Code verwendet und hatte genau die gleiche Ausgabe, aber Ihre Auflösung hat es nicht für mich gelöst. Die Lösung, die ich gefunden habe, war Daten alle X Sekunden zu emittieren, im Grunde die Verbindung fallengelassen, wenn keine Daten gesendet wurden.
Ich musste keine Autorisierung machen.
Der Code ist genau wie über dem EVENT_TRANSPORT-Teil und das EVENT_CONNECT ist wie folgt:
%Vor%Ich wollte das hier einfach lassen, es könnte jemandem in der Zukunft helfen, ob du es glaubst oder nicht, das war ein unangenehmer Fehler, der "xhr-Umfragefehler" ist sehr vage und viele verschiedene Dinge können dazu führen es. Nachdem ich so viele verschiedene Dinge versucht hatte, löste dieser einfache Code es.