2011-01-15 4 views
0

У меня проблема с подключением к 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 заранее.

+0

Я столкнулся с этой же проблемой. Вы нашли какое-нибудь рабочее решение? – KishoreK

ответ

0

Прежде всего, введите uid для зарегистрированного пользователя, используя SDK для iphone, а затем используйте этот uid вместо имени пользователя в качестве JID.

[email protected] instead of [email protected] 
0

Я считаю, что единственный способ, которым Вы можете использовать 3rd клиент партии с FB чате, если пользователь создал идентификатор пользователя FB.

Кроме того, чтобы убедиться, что после проверки подлинности XMPP вы должны получить полный JID с сервера. что-то вроде этого

<iq id="0" type="result"> 
    <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> 
    <jid>[email protected]/resource</jid> 
    </bind> 
</iq> 

это JID вы используете.