android - 使用 Smack 从 2 个不同的 android 设备登录到相同的 jabber 帐户

标签 android gmail 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 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/

相关文章:

java - libGDX actor draw() 未调用

android - Android 应用程序中的 Firebase 云消息传递仅适用于通知而不适用于数据消息

java - Java 上 Gmail 的 SMTP 客户端使用套接字身份验证问题

email - 无法使用 Delphi 从 Gmail 帐户下载/检索电子邮件(SSL3_GET_RECORD :wrong version number)

ruby-on-rails - 为 Rails 中的邮件将外部 CSS 转换为内联 CSS

xmpp - 目前哪些 XMPP 客户端支持 PubSub (XEP-0060)?

android - Mosby MVI - 如何重试 Intent ?

xmpp - XEP-0077 : In-Band Registration

timeout - GCDAsyncSocket ReadTimeoutError 问题

Android 语言翻译错误