Поддержка 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>
Другие вопросы по тегам