ええと、私はおそらく何かばかげたことをしているのですが、ここ数時間、これで頭を悩ませてきました。これまでのところ、何が間違っていたのかわかりません。
現時点では、Facebook が OAuth2 を Web 以外のアプリに積極的に導入しているように見えるため、PLAIN SASL でこれを機能させようとしていますが、これを何らかの方法で機能させることができる限り、実際には違いはありません。
現在のコード:
_client = new Client(JID(username /* no @chat.facebook.com */), password);
_client->setServer("chat.facebook.com");
_client->setPort(5222);
_client->setSASLMechanisms(gloox::SaslMechPlain);
_client->setTls(gloox::TLSPolicy::TLSRequired);
_client->connect(false);
_client->login(); // not necessary?
QThread::sleep(10); // arbitrary sleep; should be sufficient
std::cout << _client->authed() << std::endl; // false
std::cout << _client->authError() << std::endl; // AuthErrorUndefined
_client->rosterManager()->fill();
// neither one has any effect
MessageSession(_client, JID("friend@chat.facebook.com")).send("balls");
MessageSession(_client, JID("friend")).send("balls");
std::cout << _client->rosterManager()->roster()->size() << std::endl; // 0
編集:さらに言えば、GlooxをGmailでも動作させることはできません(他のXMPPサーバーは試していません)。