在我的应用程序中,我使用 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];
}
任何类型的帮助都会很棒 谢谢......
答案 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];
}
我再次调用身份验证,但是我认为这不是最终解决方案。