2014-03-25 80 views
5

我想在iOS中使用xmpp框架以匿名方式連接到openfire服務器。通過提供JID和PW,我可以連接到開火。但是,當我嘗試匿名連接時,它說「服務器不支持匿名身份驗證」。在iOS中使用XMPP框架進行匿名身份驗證

我在xib文件中使用了一個按鈕。當其低於點擊代碼執行:

- (IBAction)login:(id)sender { 

    [[self appDelegate]connect]; 

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

和下面是用於連接方法的代碼:

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

回答

5

的步驟匿名驗證:

1-首先,連接XMPP協議流,然後匿名驗證。

[[self xmppStream] authenticateAnonymously:&error]; 

然後你將被匿名認證。但是非常重要的一件事。驗證之前,獲得一個註冊用戶的用戶名和密碼,連接到XMPP流

1

接受的答案几乎是正確的,但混合的東西(連接認證

你面對的是什麼可能是一個服務器端配置問題,如果你的服務器不允許你匿名登錄,你不能。

反正你仍然可以嘗試匿名連接和處理的事實,你是不是允許,你需要:

1)您JABBERID設置爲匿名@域名(分別訪問您的服務器域)

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

2)由於在地方,你可以連接到服務器(你並不需要一個有效的用戶作爲公認的答案指出)

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

3)一旦你從服務器響應您的XMPP委託方法didConnect將被調用,在那裏你檢查服務器的配置支持匿名身份驗證,如果因此要儘量認證匿名

- (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 )但是,如果您希望服務器不支持匿名身份驗證(可能是知道用戶的用戶名或向用戶顯示警告),或者出現身份驗證錯誤(網絡問題),則可以處理該問題

相關問題