Facebook asmack xmpp 客户端返回名册的随机数
Posted
技术标签:
【中文标题】Facebook asmack xmpp 客户端返回名册的随机数【英文标题】:Facebook asmack xmpp client returns random numbers for roster 【发布时间】:2012-10-26 01:31:33 【问题描述】:我按照以下 SO 问题中给出的指导方针使用 xmpp 连接到 facebook 聊天,我能够连接到 facebook 并提取正确数量的联系人,但是当它打印联系人时,它们都是随机数字 @chat.facebook .com 并全部离线。
android Facebook chat example project
public void connectToFb() throws XMPPException
ConnectionConfiguration config = new ConnectionConfiguration("chat.facebook.com", 5222);
config.setSASLAuthenticationEnabled(true);
config.setSecurityMode(SecurityMode.required);
config.setRosterLoadedAtLogin(true);
config.setTruststorePath("/system/etc/security/cacerts.bks");
config.setTruststorePassword("changeit");
config.setTruststoreType("bks");
config.setSendPresence(false);
try
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, MemorizingTrustManager.getInstanceList(this), new java.security.SecureRandom());
config.setCustomSSLContext(sc);
catch (GeneralSecurityException e)
Log.w("TAG", "Unable to use MemorizingTrustManager", e);
XMPPConnection xmpp = new XMPPConnection(config);
try
xmpp.connect();
xmpp.login("user.name", "password"); // Here you have to used only facebookusername from facebookusername@chat.facebook.com
Roster roster = xmpp.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
System.out.println("Connected!");
System.out.println("\n\n" + entries.size() + " buddy(ies):");
// shows first time onliners---->
String temp[] = new String[50];
int i = 0;
for (RosterEntry entry : entries)
String user = entry.getUser();
Log.i("TAG", user);
catch (XMPPException e)
xmpp.disconnect();
e.printStackTrace();
【问题讨论】:
【参考方案1】:听起来你只是想要可读的名字,所以尝试使用
rosterEntry.getName()
返回用户名,而不是
rosterEntry.getUser()
返回 JID。
但不确定您的离线问题。你怎么检查?您必须设置一个roster listener 才能获得更改。
【讨论】:
我做到了,它成功了,谢谢,但是现在当我尝试检查他们的用户是否在线时,它总是返回他们离线并且我无法向任何人发送消息... 在 JID 或名称上使用 .getPresence。我将如何发送消息?【参考方案2】:这是 XMPP 库中的一个错误。有一个解决方法。
第 1 步:连接到 XMPP。
第 2 步: 通过 xmpp 登录 facebook 帐户。
第 3 步: 使用此 fql 查询获取在线好友列表。
SELECT uid, name, online_presence ,
sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
然后我将地址与字符串 uid@chat.facebook.com 连接并通过 XMPP 进行通信。
【讨论】:
感谢您的信息,我用我当前的代码更新了我的问题,我应该在哪里插入该代码? 登录后如何获取这些 uid,使用 uid 以及如何获取这些东西 uid 是您好友列表中好友的用户 ID。【参考方案3】:(目前还不是 100% 清楚您在在线/离线方面遇到的问题可能是错误或您做错了什么),但您不会在响应中取回用户的实际用户 ID,文档中提到了这一点:
The user's own Jabber ID (JID) is different from the Jabber ID that their contacts will see because the translation is done internally.
【讨论】:
那么如何为 facebook 构建一个 xmpp 聊天客户端呢? 我不知道为什么这会阻止您构建客户端(注意:我指的是 JID,您应该能够获取存在信息我知道)以上是关于Facebook asmack xmpp 客户端返回名册的随机数的主要内容,如果未能解决你的问题,请参考以下文章
XMPP 与 Java Asmack 库和 X-FACEBOOK-PLATFORM
如何在 Android (2014) 中使用 aSmack XMPP 库实现 facebook 聊天? [关闭]
使用 xmpp 的 Android-facebook 聊天客户端