如何使用 XMPPFramework 设置匿名登录 - iOS Objective-C

Posted

技术标签:

【中文标题】如何使用 XMPPFramework 设置匿名登录 - iOS Objective-C【英文标题】:How to set up anonymous login with XMPPFramework - iOS Objective-C 【发布时间】:2015-07-30 18:09:48 【问题描述】:

我正在尝试设置一个匿名登录,这样我的用户就不必在 eJabberd 服务器上创建一个帐户来使用聊天室。 ejabberd.cfg 中服务器的配置是:

host_config, "bubble", [auth_method, anonymous,
                         anonymous_protocol, login_anon].

我将客户端连接到 XMPPStream 的方法:

- (BOOL)connect 
    [self setupStream];

    if (![self.xmppStream isDisconnected]) 
        return YES;
    

    if (![PFUser currentUser]) 
        return NO;
    

    NSString *currentUserId = [NSString stringWithFormat:@"%@@bubble",[PFUser currentUser].objectId];

    [self.xmppStream setMyJID:[XMPPJID jidWithString:currentUserId]];
    self.xmppStream.hostName = kJABBER_HOSTNAME;

    NSError *error = nil;


    if (![self.xmppStream connectWithTimeout:10 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];


        return NO;
    

    return YES;

以及 xmppStreamDidConnect 方法:

- (void)xmppStreamDidConnect:(XMPPStream *)sender 
    self.isOpen = YES;
    NSError *error = nil;
    if(![self.xmppStream authenticateAnonymously:&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];
    

当我尝试登录服务器时,它不断收到“服务器不支持匿名身份验证”。

不知道我在这里做错了什么,请告诉我你的想法。

【问题讨论】:

我目前面临同样的问题! @funkenstrahlen 我很久以前就想通了,最后写了一篇关于它的博客文章medium.com/@dylanshine/…。 【参考方案1】:

来自 XMPPFramework 文档:

如果您希望使用匿名身份验证,您仍应在调用 connect 之前设置 myJID。您可以简单地将其设置为类似 "anonymous@domain",其中“domain”是正确的域。在认证过程之后,您可以查询 myJID 属性以查看您分配的 JID 是什么。

确保服务器上的设置也允许匿名登录。

如果您无权访问服务配置,您仍然可以使用以下方式检查服务器是否允许匿名登录:

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

一定要把它放在 didConnect 委托方法中,因为它需要先连接。

【讨论】:

以上是关于如何使用 XMPPFramework 设置匿名登录 - iOS Objective-C的主要内容,如果未能解决你的问题,请参考以下文章

XMPPFramework - 无法连接到 Openfire 服务器

iOS开发--XMPPFramework--好友模块

使用 xmppFramework 连接到服务器时卡住

XMPPFramework - 如何向 XMPPUserCoreDataStorageObject 添加自定义属性?

如何使用 XMPPFramework 响应 Openfire ping 请求

如何检查用户 JID 是不是已在 XMPPFrameWork 中使用