Facebook使用新的访问令牌在Android上使用asmack聊天

时间:2011-10-03 10:12:43

标签: android facebook

我有一个为Android开发的FB聊天客户端。我一直在使用facebook android-sdk来获取用户的访问令牌。使用asmack,用户登录了聊天室。令牌的形式为:226409362971500 | 3b29bc82baa7901a9baca042.4-72793766 | 9eb417f06fc376897222938295a0dd0c我使用的代码是:

XMPPConnection xmpp = new XMPPConnection(config);
SASLAuthentication.registerSASLMechanism("DIGEST-MD5", SASLDigestMD5Mechanism.class);
SASLAuthentication.supportSASLMechanism("DIGEST-MD5", 0);
xmpp.connect();
xmpp.login("226409362971500", "3b29bc82baa7901a9fbaca042.4-72793766|9eb417f06fc376897222938295a0dd0c", "Application");

现在看来Facebook已经改变了令牌格式。我尝试使用旧令牌登录,但我总是得到XMPPException。我尝试使用新的访问令牌登录:

xmpp.login(token, "Application")
但仍然没有运气。 知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

经过一些研究(official FB documentation上的php示例真的很好),我得出以下结论:
 1. xmpp连接必须使用ssl
 2.在回复中,session_key必须替换为access_token

简而言之:

ConnectionConfiguration config = new ConnectionConfiguration("chat.facebook.com", 5222);
config.setSASLAuthenticationEnabled(true);
config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
XMPPConnection xmpp = new XMPPConnection(config);
SASLAuthentication.registerSASLMechanism("X-FACEBOOK-PLATFORM",SASLXFacebookPlatformMechanism.class);
SASLAuthentication.supportSASLMechanism("X-FACEBOOK-PLATFORM", 0);
xmpp.connect();
xmpp.login(appSecret, accessToken, "Application");    

SASLXFacebookPlatformMechanism是我的课程,从org.jivesoftware.smack.sasl.SASLMechanism

延伸