我们开发了一个应用程序,它应该只使用应用程序启用对等体之间的交互。我们希望区分通过我们的应用程序和公共聊天客户端登录的用户,例如洋泾。
有一个观察:如果我们通过我们的应用程序和Pidgin登录了相同的用户名,应用程序会不时地丢失节,因为它们只会传递给Pidgin,反之亦然。
我已经开始考虑通过检查应用特定的后缀来为我们的应用用户跟踪一些特定的jid,例如MyName @ OurServer / OurApp(OurApp就是后缀)。但是如果在我们的应用程序和Pidgin上都登录了相同的用户名,我们怎样才能让服务器只向我们的客户端提供节点?
答案 0 :(得分:2)
资源标识符(您称之为“后缀”)不是检测应用程序的可靠方法。服务器能够将其更改为任何感觉。此外,虽然在实践中不太可能,但用户可能会在其客户端中输入此资源字符串,从而导致问题。
识别客户类型的正确方法是通过其存在。标准方法是使用XEP-0115: Entity Capabilities和XEP-0030: Service Discovery。您的客户将在其服务发现结果中包含特定的标识功能。
确定客户端的完整JID后,请始终使用该JID与其进行通信。使用<iq>
节用于请求/响应,或<message>
节带有自定义有效负载(无<body>
)。
答案 1 :(得分:1)
确保发送到完整的JID,而不仅仅是基本JID。
Full JID: MyName@OurServer/OurApp
Base JID: MyName@OurServer
第二个版本可能有两种不同的结果,具体取决于服务器及其配置。使用完整的JID将仅发送到该客户端连接。
答案 2 :(得分:1)
“后缀”在XMPP中称为资源。您可以将XMPP数据包发送到裸JID(user@domian.com)或完整JID(user@domain.com/resource)。您可以轻松使用该资源来识别您的客户端,也可以使用Service Discovery检查客户端软件,请参阅Example 8。