Поддержка Facebook Chat (XMPP) XEP 0080
Я проверял с помощью прототипа тестовой программы возможности XMPP Facebook Chat, X-FACEBOOK. Он прекрасно работал, используя сообщение geoloc XEP 0080 с серверами Gmail, но когда я пытаюсь отправить ту же структуру XML через X-FACEBOOK, он обрезает сообщение и удаляет узел GeoLoc. Я хотел спросить, знает ли кто-нибудь, возможно ли отправлять сообщения XEP 0080 в X-FACEBOOK, и если да, то какую структуру я должен использовать, чтобы XMPP-сервер чата Facebook не урезал информацию GeoLoc.
Отправлено сообщение геолокации XMPP:
<message to="-100002578491827@chat.facebook.com" from="4yony4@chat.facebook.com/19256ca9_4C5CC12947646" type="chat" xml:lang="en">
<event xmlns="http://jabber.org/protocol/pubsub#event">
<items node="http://jabber.org/protocol/geoloc">
<item id="">
<geoloc xmlns="http://jabber.org/protocol/geoloc">
<lat>40.488137</lat>
<lon>-3.397623</lon>
<timestamp>2012-07-27 09:09:50 GMT</timestamp>
<msgType>0</msgType>
</geoloc>
</item>
</items>
</event>
<body>
</body>
Полученное сообщение от клиента:
<message xmlns="jabber:client" from="-1177157556@chat.facebook.com" to="" type="chat">
<active xmlns="http://jabber.org/protocol/chatstates"/>
<body></body>
</message>
Любое решение или мнение будет с благодарностью.
Что ж, изменил XML, чтобы он напоминал тот, который вы опубликовали, без сабвуфера pub, и все еще с той же проблемой: в сообщении, полученном получателем, отсутствуют все пространства имен в узле GeoLoc, что, я думаю, является результатом того, что сервер не поддерживает это. формат. Я могу попытаться использовать опцию подписчика IQ, дело в том, что я предпочитаю найти решение, по которому я могу напрямую отправить информацию пользователю. Если есть возможность, даже небольшая, в которой я могу отправить информацию о GeoLoc от пользователя A к пользователю B на сервере Facebook, это может оказать большую помощь, если не очень хорошо, думаю, мне придется ее принять. Спасибо за помощь, кстати.
3 ответа
Когда я тестировал соединение XMPP в Facebook, оно не поддерживало практически никаких расширений и блокировало любые пользовательские теги на сервере. Он был в состоянии отправить основные присутствия, основные сообщения, открытки, и это было все, что он мог сделать.
События Pubsub следует отправлять в сервисы. Современные XMPP-серверы также поддерживают расширение PEP, и вы можете отправлять pubsub на сами сервера. В других случаях используйте сообщение с целевым пользователем, как советовал Робин.
Я не думаю, что Facebook имеет какой-либо сервер с pubsub. Также я думаю, что он все еще фильтрует любые неподдерживаемые пространства имен. Не стесняйтесь доказать мне, что я не прав, прошло больше года с тех пор, как я в последний раз проверял это.
Я хочу второй Пихан. Похоже, что серверы Facebook XMPP реструктурируют сообщения, чтобы они содержали только тело сообщения, дату и метку времени. Я думаю, что они делают это, чтобы сохранить его идентичным объектам графа комментариев.
Это раздражает, но я подозреваю, что это преднамеренно. В конце концов, их граф является основной проблемой, а не XMPP.
Это не одно и то же сообщение.
Полученное сообщение является просто индикатором состояния чата пользователя, как определено в XEP-0085, и не имеет прямого отношения к отправленному вами сообщению. Это не означает, что первое потенциально не вызывает второго, какая бы библиотека вы ни использовали, возможно, отправляло и состояние чата, когда вы отправляли сообщение. Этот тип сообщения обычно используется в клиентах чата, чтобы указать, что кто-то, с кем вы общаетесь, печатает сообщение.
Проблема, вероятно, в том, что отправляемое вами сообщение на самом деле является сообщением PEP. Он предназначен для отправки службой PEP на сервере, а не с клиента. Я не знаю, поддерживает ли Facebook PEP или нет, но я предполагаю, что он отфильтровывается из-за неправильного использования известного пространства имен. PEP или Pubsub являются рекомендуемыми способами публикации информации о геолокации, но для их использования необходимо отправить пакет IQ службе, а не сообщение другому клиенту.
Попробуйте вместо этого (не говоря уже о том, что это сработает, но, по крайней мере, содержимое pubsub удалено):
<message to="-100002578491827@chat.facebook.com" from="4yony4@chat.facebook.com/19256ca9_4C5CC12947646" type="chat" xml:lang="en">
<geoloc xmlns="http://jabber.org/protocol/geoloc">
<lat>40.488137</lat>
<lon>-3.397623</lon>
<timestamp>2012-07-27 09:09:50 GMT</timestamp>
<msgType>0</msgType>
</geoloc>
<body>
</body>
</message>