如何真正为Android创建Facebook聊天客户端?

时间:2011-08-16 10:35:12

标签: android facebook xmpp chat smack

在任何人甚至哭泣重复之前,我想说StackOverflow中目前发布的所有问题都没有让我开始。

我目前的任务是为Android创建一个简单的Facebook聊天客户端。基本上,我只是登录并查看我的在线联系人是谁,然后,我发送和/或接收消息。我之前从未做过这样的事情,所以我继续研究XMPP,甚至试图在http://developers.facebook.com/apps中创建一个应用程序,这样我就可以得到一个API密钥,用于我认为需要进行的所有身份验证。但经过五天研究XMPP和asmack以及Graph和Chat API之后,我被告知我不需要研究所有这些和SASLAuthentication类,而且我不需要获得API密钥。我所要做的就是使用X-FACEBOOK-PLATFORM机制(我已经阅读过网上的每个相关文档)并直接发送消息到username@chat.facebook.com。但是关于它是如何用Java或Android编码的,没有一个好的和完整的指南。

帮助我开始吧? asmack与此有什么关系?我完全不明白我需要如何使用asmack而不需要SASLAuthentication。感谢。

3 个答案:

答案 0 :(得分:1)

只是一些信息。

  • asmack是专为在Android平台上启用Smack而设计的Smack的分支。
  • Smack是XMPP的客户端库,您知道如何与FB用户聊天。
  • SASLAuthentication只是在XMPP中用于登录XMPP服务器的身份验证方法。在您的情况下,此服务器是FB服务器。

使用Smack连接到FB时有一个discussion thread at Ignite Realtime(实际上有几个search)。

作为旁注,我相信我在某处读到asmack不再被维护/开发。我认为大多数开发人员只是对Smack源进行一些调整,以使其在Android上运行。

答案 1 :(得分:1)

您可以使用XmppConnection与服务器连接..然后使用名册获取在线朋友.. 这里有一些连接,登录和获取朋友的代码 并在主要ui线程中的异步任务中使用此代码..

ConnectionConfiguration connConfig = new ConnectionConfiguration("chat.facebook.com", 5222 , "chat.facebook.com");
    connConfig.setSASLAuthenticationEnabled(true);
    connConfig.setSecurityMode(SecurityMode.required);
    connConfig.setRosterLoadedAtLogin(true);
    connConfig.setSendPresence(false);
    connection = new XMPPConnection(connConfig);

    try 
    {
        connection.connect();
        Log.i("XMPPClient", "[SettingsDialog] Connected to " + connection.getHost());
    }
    catch (XMPPException ex) 
    {
        Log.e("XMPPClient", "[SettingsDialog] Failed to connect to " + connection.getHost());

        XMPPLogic.getInstance().setConnection(null);
    }

    try 
    {
        connection.login(username, password);
        try 
        {
            Thread.sleep(time);
        } 
        catch (InterruptedException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.i("XMPPClient", "Logged in as " + connection.getUser());

        // Set the status to available
        Presence presence = new Presence(Presence.Type.available);
        connection.sendPacket(presence);

        XMPPLogic.getInstance().setConnection(connection);
        Roster roster = connection.getRoster();
        Collection<RosterEntry> entries = roster.getEntries();
        ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());

        Log.i("Roster", "Roster Connected");
        Log.i("Entries", "\n\n" + entries.size() + " buddy(ies):");

        for (RosterEntry entry : entries) 
        {

            if (roster.getPresence(entry.getUser()).isAvailable()) 
            {


            HashMap<String, Object> contact = new HashMap<String, Object>();
            contact.put(NAME, entry.getName());
            contact.put(USERID, entry.getUser());
            datatList.add(contact);

            Log.i("TAG", entry.getName() + entry.getUser());
            Log.i("Contact", contact.toString());

            }

        }



    }
    catch (XMPPException ex) 
    {
        Log.e("XMPPClient", "[SettingsDialog] Failed to log in as " + username);

        XMPPLogic.getInstance().setConnection(null);
    }

答案 2 :(得分:0)

伤心地听到你的老板。不要试图理解XMPP。 FB有自己的聊天API。阅读http://developers.facebook.com/docs/chat/