Мы пытаемся внедрить XMPP
сверх BOSH
для нашего продукта. Библиотека Strophe.js
javascript отлично работает для наших нужд на WWW-сайте. Мы запрашиваем предварительную привязку, она доставляется, и затем мы используем метод присоединения Strophe, чтобы начать наш сеанс - тогда мы можем обновить присутствие и отправлять / получать сообщения. Что касается iOS, мы используем robbiehanson XMPPFramework
, который включает транспорт BOSH, но нет метода присоединения. Ниже приведено мое горе от попыток заставить это работать.
Я делаю предварительную привязку, получаю sid / jid / rid, затем устанавливаю внутреннюю логику внутри транспорта bosh и других файлов, чтобы сказать, что мы уже подключены. Затем, если я пытаюсь обновить информацию о присутствии, включая указанный SID, я отправляю:
BOSH: ОТПРАВИТЬ [1248340729] = <присутствие> </ присутствие>
но не получайте никакого ответа. Это последнее из этого. Если я пытаюсь обновить информацию о присутствии без указания SID, я отправляю:
BOSH: ОТПРАВИТЬ [1064338700] = <присутствие> </ присутствие>
и вернитесь:
BOSH: RECD [1342811427] = <поток: функции> <механизмы xmlns =" urn: ietf: параметры: xml: ns: xmpp-sasl "> <механизм> PLAIN </ механизм> </ механизмов> < сжатие xmlns = "http://jabber.org/features/compress">< method> zlib </ stream: features>
, который выглядит как подтверждение соединения или раздел запроса на соединение, ожидающий, что я отвечу информацией PLAIN - но это уже было установлено с предварительной привязкой. Если это подтверждение соединения, то следующие строки не имеют смысла. Если используется SID, указанный в строке подключения выше, как будто это подтверждение (я не уверен), это следующие строки:
BOSH: SEND [1342811427] = api
BOSH: RECD [1342811427] = http://jabber.org/protocol/httpbind'>< iq xmlns = "jabber: client" type = "error" to = "chat. *. Com / 9ef0ccdb"> api <неавторизованный xmlns = "urn: ietf: params: xml: ns: xmpp-stanzas "/>
Я не авторизован. Теперь, если я попытаюсь использовать SID, согласованный во время предварительной привязки, последние две строки будут другими:
BOSH: SEND [1172064714] = api
BOSH: RECD [1172064714] =
пустой ответ. Затем, если я попытаюсь обновить свое присутствие снова, он выдаст мне буквальную страницу 404
, говорящую о том, что есть неверный SID. Когда я использовал SID, предоставленный openfire, если бы я снова попробовал обновление присутствия, оно просто продолжало бы давать мне 401 not authorized
.
Любая помощь будет принята с благодарностью.