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 聊天客户端

在android中使用xmpp的android-facebook聊天客户端

asmack vs tigase xmpp 库

无法使用 Beem-Asmack 在 XMPP FileTransfer 中处理上传