Ame*_*dke 3 gmail android xmpp smack
我在Android上开发了一个应用程序,它利用Smack API连接到XMPP服务器.在这个应用程序中,我硬编码用户登录信息,即用户名和密码.
xmpp.login("admin","tigase");
我收到来自不同用户的数据包
PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class),new FromContainsFilter("ameya @ mwbn43-1"));
现在我面临的问题是,当我在2个不同的Android设备上运行相同的应用程序时,一个设备会覆盖其他设备凭据,因此当我尝试发送数据时,只有其中一个获得它.AFAIK在普通的Google聊天中,用户可以从两个不同的地方登录同一个帐户,并且可以同时在这两个地方接收消息.
谁能告诉我可能是什么问题?它与Smack API有什么关系?
谢谢,
Ameya
您需要做的是在登录时设置不同的资源
xmpp.login("admin", "tigase", "a random string here");
Run Code Online (Sandbox Code Playgroud)
资源在概念上类似于TCP端口.看到这个链接.资源字符串用于区分设备登录到同一帐户的方式,即.在桌面上,资源可能是Android上的"桌面"和"android".但在您的情况下,您有2个Android设备,因此您无法预设资源.您可能希望在Android设备上使用唯一标识符字符串,例如帐户名称或IMEI号码.
使用资源字符串,您可以发送给特定用户,例如
admin@server/12345
Run Code Online (Sandbox Code Playgroud)
其中12345是您的资源或
admin@server
Run Code Online (Sandbox Code Playgroud)
所有登录用户.
如果您未在应用程序中使用资源字符串,则可以使用StringUtils.randomString(20)生成20个字符的随机字符串.StringUtils可以在Smack包中找到.
作为一般规则,jabber消息被发送到连接到服务器的最后一个设备,因此如果您正在连接
youruser@yourserver.org
从两个不同的设备,后来连接的设备将获得消息.
但是,如果您指定资源,那么一切都会更容易,因此,假设您已经从笔记本电脑和手机连接,那么您可以使用资源登录完整的jid(jabber id).
youruser@yourserver.org/laptop
youruser@yourserver.org/cellphone
现在,如果您想发送一条jabber消息,以便通过手机连接的客户专门收到,请确保将消息发送到"youruser@yourserver.org/cellphone"而不仅仅是"youruser@yourserver.org"
| 归档时间: |
|
| 查看次数: |
2722 次 |
| 最近记录: |