2011-01-15 16 views
0

Ich habe ein Problem, Verbindung zu Facebooks XMPP herzustellen, um chat api zu benutzen. Tatsächlich ist das einzige Problem, dass ich die JID nicht kenne, manchmal hat der Benutzer seinen Benutzernamen nicht angegeben und es wird nicht funktionieren, einfach indem er seine Benutzerkennung als JID einstellt.Facebook Chat Schwierigkeit JID des Benutzers

Ich habe meine eigene JID von Facebook ausprobiert, die ich in iChat verwende und es hat perfekt funktioniert.

Also, nach den Dokumenten sollte ich eher Benutzer in den Chat protokollieren, indem Sie Zugriffstoken anstelle von Benutzername/Passwort verwenden.

I successfuly bin angemeldet, das accesss Token in Form ist: 18112 ... | f6daa87 ...- 1392 ... | Qe7 ...- Sd6 ...

Now I Verwenden Sie das XMPPFramework mit XMPPStreamFacebook von Eric Chamberlain. Ich bekommen Das ist meine Methode

-(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); 
} 

und

- (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]); 
} 
... 

in der Konsole den Chat starten:

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) 

Ich mag nur bestätigen, dass, wenn ich die reale Login zur Verfügung gestellt (das Ich benutze in iChat) anstelle von [email protected], und meine Passwort-Authentifizierung in didConnect alles funktioniert die Authentifizierung.

Hat jemand das Problem? Thx im Voraus.

+0

Ich steckte mit dem gleichen Problem. Haben Sie eine funktionierende Lösung gefunden? – KishoreK

Antwort

0

Zuerst die UID des eingeloggten Benutzers mit dem Facebook SDK für iPhone und dann diese UID anstelle von Benutzernamen als JID verwenden.

[email protected] instead of [email protected] 
0

Ich glaube, der einzige Weg, ein 3rd-Party-Client mit FB Chat verwenden können, ist, wenn der Benutzer einen FB-Benutzer-ID erstellt hat.

Darüber hinaus, nur um sicher zu sein, sollten Sie nach Ihrer XMPP-Authentifizierung die vollständige JID vom Server erhalten. etwas wie das

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

das ist die JID, die Sie verwenden.

Verwandte Themen