Facebook的asmack XMPP客户端返回花名册随机数 [英] Facebook asmack xmpp client returns random numbers for roster
问题描述
我也跟着在下面的SO问题给出的guidlines使用XMPP连接到Facebook的聊天,我能够连接到Facebook和拉接触的正确的号码,但是当它打印了接触,他们都随机数@ chat.facebook .com和所有返回脱机状态。
<一个href=\"http://stackoverflow.com/questions/10946508/android-facebook-chat-example-project/11238124#11238124\">Android Facebook的聊天示例项目
公共无效connectToFb()抛出XMPPException { ConnectionConfiguration配置=新ConnectionConfiguration(chat.facebook.com,5222);
config.setSASLAuthenticationEnabled(真);
config.setSecurityMode(SecurityMode.required);
config.setRosterLoadedAtLogin(真);
config.setTruststorePath(/系统的/ etc /安全/ cacerts.bks);
config.setTruststorePassword(的changeit);
config.setTruststoreType(BKS);
config.setSend presence(假);
尝试{
的SSLContext SC = SSLContext.getInstance(TLS);
sc.init(NULL,MemorizingTrustManager.getInstanceList(本),新java.security.SecureRandom中的());
config.setCustomSSLContext(SC);
}赶上(GeneralSecurityException E){
Log.w(TAG,无法使用MemorizingTrustManager,E);
}
XMPPConnection XMPP =新XMPPConnection(配置);
尝试{
xmpp.connect();
xmpp.login(user.name,密码); //在这里,你必须从facebookusername@chat.facebook.com仅facebookusername
名册名册= xmpp.getRoster();
收集和LT; RosterEntry&GT;条目= roster.getEntries();
的System.out.println(接!);
的System.out.println(\\ n \\ n+ entries.size()+哥们(IES):);
//显示第一次onliners ----&GT;
字符串临时[] =新的String [50];
INT I = 0;
对于(RosterEntry项:项){
字符串用户= entry.getUser();
Log.i(TAG,用户);
}
}赶上(XMPPException E){
xmpp.disconnect();
e.printStackTrace();
}
}
及其XMPP库中的缺陷。有一个变通为。
第1步:连接到XMPP
第二步:通过XMPP登录Facebook帐户
第三步:使用此FQL查询得到在线好友列表
SELECT UID,名称,online_ presence,
从性别用户其中uid IN(SELECT UID2从相知WHERE UID1 =我())
然后我Concat的地址用绳子 uid@chat.facebook.com 并通过XMPP通信。
I followed the guidlines given in the following SO question to connect to facebook chat using xmpp and I am able to connect to facebook and pull the correct number of contacts but when it prints the contacts they are all random numbers @chat.facebook.com and all return offline.
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();
}
}
Its a bug in XMPP library . There is a work around for that .
Step 1: Connect to XMPP.
Step 2: Login to facebook account through xmpp.
Step 3: get online friend list using this fql query .
SELECT uid, name, online_presence ,
sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
Then i concat address with string uid@chat.facebook.com and communicate via XMPP.
这篇关于Facebook的asmack XMPP客户端返回花名册随机数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!