我在 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 Chat 中,用户可以从 2 个不同的地方登录同一个帐户,并且可以同时在两个地方接收消息。
谁能告诉我可能是什么问题?它与 Smack API 有什么关系吗?
谢谢,
阿米娅
最佳答案
你要做的就是在登录时设置不同的资源
xmpp.login("admin", "tigase", "a random string here");
资源在概念上类似于 TCP 端口。看这个link .资源字符串用于区分设备登录到同一帐户的方式,即。例如,在桌面上,资源在 Android 上可能是“桌面”和“安卓”。但在您的情况下,您有 2 个 Android 设备,因此您无法预设资源。您可能希望在 Android 设备上使用唯一标识符字符串,例如帐户名或 IMEI 号码。
使用资源字符串,您可以发送给特定用户,例如
admin@server/12345
12345 是您的资源或
admin@server
所有登录用户。
如果您没有在您的应用程序中使用资源字符串,您可以使用 StringUtils.randomString(20)
生成一个包含 20 个字符的随机字符串。 StringUtils
可以在 Smack 包中找到。
关于android - 使用 Smack 从 2 个不同的 android 设备登录到相同的 jabber 帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400801/