1

我想在我的 iOS 应用程序中实现 XMPP 框架,我已经完成了所有的事情(与其他用户聊天,显示其他用户的存在等)

但问题是,我无法从我的应用程序中注册新用户。我为此使用以下代码,

if ([appDel.xmppStream supportsInBandRegistration])
    [appDel.xmppStream registerWithPassword:txt_Password.text error:nil];

但是为此,supportsInBandRegistration 方法总是返回 NO 并且我不会被称为方法 never registerWithPassword: 。

如果有任何可用的解决方案,请帮助我

4

2 回答 2

6

你用的是什么服务器?一些服务器支持带内注册,即使它们没有发送正确的流:根据 XEP-0077 的功能。然而,他们中的大多数人应该在迪斯科结果中给出该功能。

---- OR ---- 您可以通过以下代码解决此问题。它对我来说很好。:

- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate: 
(NSXMLElement *)error; 
{ 
NSLog(@"Did not authenticate"); 

 [xmppStream registerWithPassword:[[NSUserDefaults 
standardUserDefaults] stringForKey:@"userPassword"] error:nil]; 

NSError * err = nil; 

if(![[self xmppStream] registerWithPassword:password error:&err]) 
{ 
    NSLog(@"Error registering: %@", err); 
} 

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

NSLog(@"I'm in register method"); 

    } 

- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement 
*)error{ 
NSLog(@"Sorry the registration is failed"); 

} 

我在 didNotAuthenticate: 方法中声明了 registerWithPassword:error: 方法,因为在连接到服务器后,它将通过我的注册方法正常工作的地方进入这个 didNotAuthenticate 方法

于 2013-02-13T12:20:19.893 回答
0

我遇到了同样的问题,即[xmppStream supportsInBandRegistration]方法返回 false,因为我正在传递已经在服务器中注册的 Jid。

[xmppStream setMyJID:[XMPPJID jidWithString:jabberID]];

更改 JID 对我有用。

于 2014-02-13T08:14:41.390 回答