使用iOS中的XMPP框架匿名进行身份验证

时间:2014-03-25 14:59:15

标签: ios xmpp xcode5 xmppframework

我想在iOS中使用xmpp框架匿名连接到openfire服务器。我可以通过提供JID和PW连接到开火。但是,当我尝试匿名连接时,它说"服务器不支持匿名身份验证"。

我在xib文件中使用了一个按钮。当点击下面的代码时执行:

- (IBAction)login:(id)sender {

    [[self appDelegate]connect];

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

及以下是connect方法的代码:

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

2 个答案:

答案 0 :(得分:5)

匿名身份验证的步骤:

1-首先连接xmpp-stream,然后匿名进行身份验证。

[[self xmppStream] authenticateAnonymously:&error];

然后您将匿名进行身份验证。但是一件非常重要的事情。在进行身份验证之前,获取已注册用户的用户名和密码并连接到xmpp-stream

答案 1 :(得分:1)

接受的答案几乎是正确的,但混合了一些东西(连接身份验证

您面临的问题可能是服务器端配置问题,如果您的服务器不允许您匿名登录,则不能。期待。

无论如何,您仍然可以尝试匿名连接并处理您不允许的事实,因为您需要:

1)将您的JabberID设置为匿名@域(域名是您的服务器域)

[self.xmppStream setMyJID:[XMPPJID jidWithString:@"anonymous@domain"]];

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)你可以处理你想要的情况是服务器不支持匿名身份验证(可能与知道用户交配或向用户显示警告)或者您收到身份验证错误(网络问题)