在XMPP用户注册后,在Openfire中使用OffLine

时间:2013-12-10 10:47:42

标签: ios iphone xmpp xcode5 openfire

在我的应用程序中,我使用 XMPP 成功注册 openfire 中的用户。

但当我第一次注册用户时,即将离线
我必须再次连接它。

断开连接并再次连接后,它正常工作。

我不知道为什么会这样。

我的代码是

-(void)xmppStreamDidConnect:(XMPPStream *)sender
{

NSLog(@"Did Connected pw:%@",_myTextViewCustom.text);
isOpen = YES;
NSError *error = nil;
[xmppStream authenticateWithPassword:_myTextViewCustom.text error:&error];

}  


-(void)xmppStreamDidRegister:(XMPPStream *)sender
{

NSLog(@"xmppStreamDidRegister Method");

XMPPPresence *presence = [XMPPPresence presence];
[xmppStream sendElement:presence];


[xmppStream setMyJID:[XMPPJID jidWithString:[NSString stringWithFormat:@"%@@server_Id",_jidTextView.text]]];
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];
}
else
{
    NSLog(@"Connection is in making");

}


[self goOnline];

}  


- (void)goOnline {
XMPPPresence *presence = [XMPPPresence presence];
[xmppStream sendElement:presence];
XMPPSystemInputActivityMonitor *activiyMonitor = [[XMPPSystemInputActivityMonitor alloc]init];
activiyMonitor.inactivityTimeInterval = 1;
[activiyMonitor addDelegate:self delegateQueue:dispatch_get_main_queue()];
NSLog(@"Active : %d",[activiyMonitor isActive]);


UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Successfull!!!"
                                                    message:[NSString stringWithFormat:@"Connected"]
                                                   delegate:nil
                                          cancelButtonTitle:@"Ok"
                                          otherButtonTitles:nil];
[alertView show];


}  

任何类型的帮助都会很棒 谢谢......

2 个答案:

答案 0 :(得分:0)

完成注册后。您需要对openfire服务器进行身份验证。

 [[self xmppStream] authenticateWithPassword:passwordString error:&error];

调用此方法后,它将响应

// get called on authenitcation successful 
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender

//Error while authenticating 
- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error

然后

[self goOnline];

答案 1 :(得分:0)

我解决了这个问题,但不确定它是否完美,如果你找到另一个,那么请在这里告诉我。

我确实改变了

-(void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error
{
NSLog(@"didNotAuthenticate Method");

if(isRegister == TRUE)
{
    [xmppStream registerWithPassword:_myTextViewCustom.text error:nil];
    NSError * err = nil;

    if(![xmppStream registerWithPassword:_myTextViewCustom.text error:&err])
    {
        NSLog(@"Error registering: %@", err);

        [self performSelector:@selector(connect1) withObject:nil afterDelay:2.0];

    }

}
}  

-(void)connect1
{
isOpen = YES;
NSError *error = nil;
[xmppStream authenticateWithPassword:_myTextViewCustom.text error:&error];

}

我再次调用身份验证,但是我认为这不是最终解决方案。

相关问题