У меня проблема с подключением к Facebook XMPP для использования chat api. На самом деле единственная проблема заключается в том, что я не знаю JID, когда-то пользователь не предоставил свое имя пользователя, и он не будет работать просто по настройкам его/ее userID как JID.Facebook Сложность проблемы с пользователем JID
Я пробовал свой собственный JID из facebook, который я использую в iChat, и он отлично работал.
Итак, в соответствии с документами я должен скорее зарегистрировать пользователя в чате, используя токен доступа вместо имени пользователя/пароля.
Я успешно вошли в систему, то Accesss маркер в виде: 18112 ... | f6daa87 ...- 1392 ... | Qe7 ...- Sd6 ...
Теперь я используйте XMPPFramework с XMPPStreamFacebook от Эрика Чемберлена. Это мой метод запуска чата
-(void)launchService {
if (xmppStream) {
[xmppStream release];
xmppStream = nil;
}
xmppStream = [[XMPPStreamFacebook alloc] init];
xmpReconnect = [[XMPPReconnect alloc] initWithStream:xmppStream];
if (xmppRosterStorage) {
[xmppRosterStorage release];
xmppRosterStorage = nil;
}
xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init];
if (xmppRoster) {
[xmppRoster release];
xmppRoster = nil;
}
xmppRoster = [[XMPPRoster alloc] initWithStream:xmppStream rosterStorage:xmppRosterStorage];
[xmppStream addDelegate:self];
[xmppRoster addDelegate:self];
[xmppRoster setAutoRoster:YES];
[xmppStream setHostName:@"chat.facebook.com"];
[xmppStream setHostPort:5222];
[xmppStream setMyJID:[XMPPJID jidWithString:@"[email protected]"]];
// You may need to alter these settings depending on the server you're connecting to
allowSelfSignedCertificates = NO;
allowSSLHostNameMismatch = NO;
// Uncomment me when the proper information has been entered above.
NSError *error = nil;
if (![xmppStream connect:&error])
NSLog(@"Error connecting: %@", error);
}
и
- (void)xmppStreamDidConnect:(XMPPStream *)sender {
NSError *error = nil;
// [xmppStream authenticateWithAccessToken:[self appDelegate].token error:&error];
NSLog(@"---------- xmppStreamDidConnect: ----------");
isOpen = YES;
if (![[self xmppStream] authenticateWithAccessToken:[self appDelegate].token error:&error])
{
NSLog(@"Error authenticating: %@", error);
}
}
- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error
{
NSLog(@"---------- xmppStream:didNotAuthenticate: ---------- %@ desc %@",error,[error description]);
}
...
В консоли я получаю:
2011-01-15 19:41:06.547 Facebookwebsiteziosfbconnect[81160:207] SEND: <?xml version='1.0'?>
2011-01-15 19:41:06.548 Facebookwebsiteziosfbconnect[81160:207] SEND: <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' to='chat.facebook.com'>
2011-01-15 19:41:06.920 Facebookwebsiteziosfbconnect[81160:207] RECV: <?xml version="1.0"?><stream:stream id="4788E768" from="chat.facebook.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xml:lang="en">
2011-01-15 19:41:06.922 Facebookwebsiteziosfbconnect[81160:207] RECV: <stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features>
2011-01-15 19:41:06.922 Facebookwebsiteziosfbconnect[81160:207] ---------- xmppStreamDidConnect: ----------
2011-01-15 19:41:07.829 Facebookwebsiteziosfbconnect[81160:207] ---------- xmppStream:didNotAuthenticate: ---------- (null) desc (null)
Я просто хочу, чтобы подтвердить, что если я предоставил реальный логин (т.е. Я использую в iChat) вместо [email protected], и моя аутентификация пароля в didConnect все, что работает аутентификация.
Кто-нибудь видит проблему? Thx заранее.
Я столкнулся с этой же проблемой. Вы нашли какое-нибудь рабочее решение? – KishoreK