我已经编写了一个程序来集成在C#中的Facebook用户聊天,但是我总是<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>在将响应发送到服务器之后得到.
我检查了API密钥和App秘密,两者都是正确的.看起来我将一些错误的参数传递给服务器.
这是我的代码.
private void GetDetailsButton_Click(object sender, EventArgs e)
{
TcpClient FacebookClient = new TcpClient();
FacebookClient.Connect("chat.facebook.com", 5222);
NetworkStream myns = FacebookClient.GetStream();
string xml = "<?xml version='1.0'?>" +
"<stream:stream " +
"id='1' " +
"to='chat.facebook.com' " +
"xmlns='jabber:client' " +
"xmlns:stream='http://etherx.jabber.org/streams' " +
"version='1.0' >";
StreamWriter mySw = new StreamWriter(myns);
mySw.WriteLine(xml); //sending initial request
mySw.Flush();
byte[] serverResponseByte = new byte[1024];
int myBytesRead = 0;
StringBuilder myResponseAsSB = new StringBuilder();
//reading response from the server to see the supported …Run Code Online (Sandbox Code Playgroud) 此问题类似于:使用authToken对Google Talk(XMPP,Smack)进行身份验证
我有android.accounts.AccountManager类及其获取Google帐户身份验证令牌的方法:
public AccountManagerFuture<Bundle> getAuthToken (Account account,
String authTokenType, Bundle options, Activity activity,
AccountManagerCallback<Bundle> callback, Handler handler)
Run Code Online (Sandbox Code Playgroud)我知道如何准备身份验证XML:
jidAndToken ="\0" + UTF8(YOURUSERNAME@gmail.com) + "\0" + Auth
Run Code Online (Sandbox Code Playgroud)
(其中"\ 0"旨在是一个值为零的单个八位字节).在最初的SASL auth中使用它:
<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
mechanism='X-GOOGLE-TOKEN'>Base64(jidAndToken)</auth>
Run Code Online (Sandbox Code Playgroud)但是我无法将其与Smack API集成,就像有人在Facebook聊天一样:XMPP与Java Asmack库支持X-FACEBOOK-PLATFORM
有人能帮我吗?
我正在为FACEBOOK创建XMPP客户端.我为gmail做了这个,现在我必须为FaceBook创建相同的.我搜索了很多,因为这有一些代码,我仍然得到这种类型的错误Not connected to server和service-unavailable(503)
在这里,我正在分享我所做的代码.
public class ClientJabberActivity extends Activity {
ArrayList<String> m_discussionThread;
ArrayAdapter<String> m_discussionThreadAdapter;
XMPPConnection m_connection;
private Handler m_handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m_handler = new Handler();
try {
initConnection();
} catch (XMPPException e) {
e.printStackTrace();
}
final EditText recipient = (EditText) this.findViewById(R.id.recipient);
final EditText message = (EditText) this.findViewById(R.id.message);
ListView list = (ListView) this.findViewById(R.id.thread);
m_discussionThread = new ArrayList<String>();
m_discussionThreadAdapter = new ArrayAdapter<String>(this,
R.layout.multi_line_list_item, m_discussionThread);
list.setAdapter(m_discussionThreadAdapter);
Button send = (Button) this.findViewById(R.id.send); …Run Code Online (Sandbox Code Playgroud) 我正在使用X-FACEBOOK-PLATFORM SASL认证机制处理facebook聊天认证.
我正在形成用户和密码,如facebook开发人员论坛和stackoverflow问题中所述.
关键是如果我使用application_secret作为密码我可以登录,但根据stackoverflow问题(下面的链接),它应该是从旧的rest api方法auth.promoteSession生成的会话
我想使用旧的rest api方法,以避免在我们的桌面应用程序jar中分发application_secret.
所以问题是,你是如何设法使用auth.promoteSession登录的?
我已阅读以下帖子,这些帖子非常有帮助:
http://community.igniterealtime.org/message/205739#205739
XMPP与Java Asmack库支持X-FACEBOOK-PLATFORM
我正在使用来自igniterealtime帖子的SASLXFacebookPlatformMechanism.java类,它已经注册了correclty.
我有xmpp_login和offline_access permisions.我已经禁用了删除过时的Auth方法,所以我可以调用旧的rest api方法,在这种情况下:auth.promoteSession我也在使用客户端流认证到facebook.
因此,使用application_secret作为密码,我得到:
<stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features>
<challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dmVyc2lvbj0xJm1ldGhvZD1hdXRoLnhtcHBfbG9naW4mbm9uY2U9NEIxRUQzNTA5MTQ5MDQxRTE4N0QyNTA0NTUzNjBDQjc=</challenge>
<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用auth.promoteSession返回的值,我得到:
<stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features>
<challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dmVyc2lvbj0xJm1ldGhvZD1hdXRoLnhtcHBfbG9naW4mbm9uY2U9MzhFQkUxOTUxNENGRUU4ODc2NzRDREQ0RjhBMUQ0QjI=</challenge>
<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>
Run Code Online (Sandbox Code Playgroud)