Клиент Facebook asmack xmpp возвращает случайные числа для списка

Я следовал рекомендациям, приведенным в следующем вопросе SO, чтобы подключиться к чату facebook с помощью xmpp, и я могу подключиться к facebook и получить правильное количество контактов, но когда он печатает контакты, все они являются случайными числами @chat.facebook.com и все возвращаются в автономный режим.

Пример проекта чата Facebook для Android

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 [email protected]
            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();
        }
        }

person Peter    schedule 26.10.2012    source источник


Ответы (3)


Похоже, вам просто нужно читаемое имя, поэтому попробуйте использовать

rosterEntry.getName()

который возвращает имя пользователя вместо

rosterEntry.getUser()

который возвращает JID.

Однако не уверен в вашей офлайн-проблеме. Как вы проверяете? Вы должны настроить прослушиватель списка, чтобы получать изменения в присутствии.

person Robin    schedule 30.10.2012
comment
Я сделал это, и это сработало, спасибо, но теперь, когда я пытаюсь проверить, находится ли пользователь в сети, он всегда возвращает, что он не в сети, и я не могу отправлять кому-либо сообщения... - person Peter; 31.10.2012
comment
Использование .getPresence для JID или имени. Как я буду отправлять сообщения? - person Peter; 31.10.2012

Это ошибка в библиотеке XMPP. Для этого есть обходной путь.

Шаг 1. Подключитесь к XMPP.

Шаг 2. Войдите в учетную запись facebook через xmpp.

Шаг 3. Получите список друзей в Интернете с помощью этого запроса fql .

    SELECT uid, name, online_presence ,
      sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

Затем я связываю адрес со строкой [email protected] и общаюсь через XMPP.

person Jan    schedule 24.01.2013
comment
Спасибо за информацию, я обновил свой вопрос своим текущим кодом, куда мне вставить этот код? - person Peter; 24.01.2013
comment
после входа в систему, как получить эти uid, с использованием uid и как я могу получить эти вещи - person Karthick M; 02.04.2014
comment
uid — это идентификатор пользователя друга в вашем списке друзей. - person Jan; 02.04.2014

(Не на 100% ясно, какая проблема у вас возникла в отношении онлайн/оффлайн, может быть ошибкой или чем-то, что вы делаете неправильно), но вы не получите обратно фактические идентификаторы пользователя в ответ, это упоминается в документах:

The user's own Jabber ID (JID) is different from the Jabber ID that their contacts will see because the translation is done internally.

person Igy    schedule 29.10.2012
comment
Тогда как можно создать клиент чата xmpp для facebook? - person Peter; 30.10.2012
comment
Я не уверен, почему это помешает вам создать клиент (примечание: я имею в виду JID, вы должны иметь возможность получать информацию о присутствии, насколько я знаю) - person Igy; 30.10.2012