2014-03-25 7 views
5

Ich möchte eine Verbindung zu Openfire-Server anonym mit XMPP-Framework in iOS. Ich kann eine Verbindung zum offenen Feuer herstellen, indem ich JID und PW zur Verfügung stelle. Wenn ich jedoch anonym eine Verbindung herstellen wollte, heißt es "Der Server unterstützt keine anonyme Authentifizierung".anonymisieren mit XMPP-Framework in iOS

Ich verwende eine Schaltfläche in XIB-Datei. Wenn sein Code unten geklickt ausführt:

- (IBAction)login:(id)sender { 

    [[self appDelegate]connect]; 

    NSError *authenticationError = nil; 
    [self.xmppStream authenticateAnonymously:&authenticationError]; 
} 

und unten ist der Code für Connect-Methode:

- (BOOL)connect { 

    [self setupStream]; 
    xmppStream.hostName = @"abc.xyz.com"; 
    //xmppStream.hostName = @"Virtuals-MacBook-Pro.local "; 

    NSString *jabberID = [[NSUserDefaults standardUserDefaults] stringForKey:@"userID"]; 
    NSString *myPassword = [[NSUserDefaults standardUserDefaults] stringForKey:@"userPassword"]; 

    if (![xmppStream isDisconnected]) { 
     return YES; 
    } 

    if (jabberID == nil || myPassword == nil) { 

     return NO; 
    } 

    [xmppStream setMyJID:[XMPPJID jidWithString:jabberID]]; 
    password = myPassword; 

    NSError *error = nil; 
    if (![xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) 
    { 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" 
                  message:[NSString stringWithFormat:@"Can't connect to server %@", [error localizedDescription]] 
                  delegate:nil 
                cancelButtonTitle:@"Ok" 
                otherButtonTitles:nil]; 
     [alertView show]; 
     //[alertView release]; 


     return NO; 
    } 

    return YES; 
} 

Antwort

5

Schritte für anonyme Authentifizierung:

1- allererst den xmpp Strom verbinden, dann authentifizieren Sie sich anonym.

[[self xmppStream] authenticateAnonymously:&error]; 

dann werden Sie anonym authentifiziert. aber eine sehr wichtige Sache. vor der Authentifizierung den Benutzernamen und das Kennwort eines registrierten Benutzers erhalten und

1

Die akzeptierte Antwort fast direkt an den xmpp-Stream-Verbindung ist aber die Dinge (Verbindung und Authentifizierung)

Was Sie konfrontiert sind mixt ist wahrscheinlich ein serverseitiges Konfigurationsproblem, wenn Ihr Server es Ihnen nicht erlaubt, sich anonym anzumelden, können Sie nicht, Punkt.

Auf jeden Fall können Sie immer noch versuchen, anonym zu verbinden und die Tatsache umgehen, dass Sie nicht zulassen, für die Sie benötigen, um:

1) Stellen Sie Ihre JabberID zu anonym @ domain (waren Domain ist Ihre Server-Domäne

)
[self.xmppStream setMyJID:[XMPPJID jidWithString:@"[email protected]"]]; 

2) Mit dem im Ort können Sie Verbindung zum Server her (Sie keinen gültigen benötigen als die akzeptierte Antwort darauf hingewiesen)

[self.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error] 

3) Wenn Sie Antwort von den Sever Ihrer XMPP Delegatmethode didConnect, genannt wird erhalten in Sie es überprüfen, ob die Server-Konfiguration anonyme Authentifizierung unterstützt und wenn ja versuchen zu authentifizieren anonym

- (void)xmppStreamDidConnect:(XMPPStream*)sender 
{ 
    self.isXmppConnected = YES; 

    if ([self.xmppStream supportsAnonymousAuthentication]) { 
     NSError* error = nil; 
     //the server does support anonymous auth 
     [self.xmppStream authenticateAnonymously:&error]; 
    } 
    else { 
     NSLog(@"The server does not support anonymous authentication"); 
    } 
} 

4) Sie behandeln jedoch die Situationen, in denen der Server keine anonyme Authentifizierung unterstützt (möglicherweise mit einem bekannten Benutzer trie oder eine Warnung für den Benutzer anzeigen) oder Sie erhalten einen Fehler bei der Authentifizierung (Netzwerkprobleme)