在Openfire中使用用户服务,通过iOS的xmpp框架注册新用户

在Openfire中使用用户服务,通过iOS的xmpp框架注册新用户,ios,web-services,openfire,xmppframework,user-registration,Ios,Web Services,Openfire,Xmppframework,User Registration,我现在可以看到在我的openfire服务器中手动创建的用户,我正在编写一本书来实现这一点,但是,程序员可以通过http使用openfire和用户服务插件注册用户。我想知道如何使用此功能注册新用户,以及是否可以检查该用户是否已存在于使用iOS应用程序的openfire服务器上。我如何获得openfire的http链接以实现注册,还是有其他方法?我读到,对于自定义注册,创建一个Web服务是很好的,但我对Web服务知之甚少,所以请任何人都能帮助我,谢谢。您需要通过创建NSXMLElement来注册用户

我现在可以看到在我的openfire服务器中手动创建的用户,我正在编写一本书来实现这一点,但是,程序员可以通过http使用openfire和用户服务插件注册用户。我想知道如何使用此功能注册新用户,以及是否可以检查该用户是否已存在于使用iOS应用程序的openfire服务器上。我如何获得openfire的http链接以实现注册,还是有其他方法?我读到,对于自定义注册,创建一个Web服务是很好的,但我对Web服务知之甚少,所以请任何人都能帮助我,谢谢。

您需要通过创建NSXMLElement来注册用户,并将其传递给xmppstream以注册新用户。请确保您拥有xmppstream对象,以便能够向服务器发出查询并获得所需的输出

NSMutableArray *elements = [NSMutableArray array];
[elements addObject:[NSXMLElement elementWithName:@"username" stringValue:@"abc"]];
[elements addObject:[NSXMLElement elementWithName:@"password" stringValue:@"xyz"]];
[elements addObject:[NSXMLElement elementWithName:@"name" stringValue:@"abc"]];
[elements addObject:[NSXMLElement elementWithName:@"email" stringValue:@"abc@xyz.com"]];
[self.xmppStream registerWithElements:elements error:nil];
[self connect];

这将注册一个新用户,或者如果该用户已经存在于您的服务器上,则会在收到的iq中给您一个错误。

此解决方案对我有效。更有组织的方法

NSString *username = @"rohit@XMPP_SERVER_IP_HERE"; // OR [NSString stringWithFormat:@"%@@%@",username,XMPP_BASE_URL]]
NSString *password = @"SOME_PASSWORD";

AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];

del.xmppStream.myJID = [XMPPJID jidWithString:username];

NSLog(@"Does supports registration %ub ", );
NSLog(@"Attempting registration for username %@",del.xmppStream.myJID.bare);

if (del.xmppStream.supportsInBandRegistration) {
    NSError *error = nil;
    if (![del.xmppStream registerWithPassword:password error:&error])
    {
        NSLog(@"Oops, I forgot something: %@", error);
    }else{
        NSLog(@"No Error");
    }
}

// You will get delegate called after registrations in either success or failure case. These delegates are in XMPPStream class
// - (void)xmppStreamDidRegister:(XMPPStream *)sender
//- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error

嗨@skaur谢谢你的回答!我会查出来的!为了正确注册用户,哪些字段是必需的?我还有一个问题,现在我可以连接openfire服务器并显示,我提交了autofetch花名册,但我没有得到它,我正在使用在xmpp框架中实现的coredatarosterstorage,如何验证花名册是否正确填充?我没有得到朋友的帐户!您好@user3741129,您可以从服务器请求注册字段。这是获取注册字段的XML查询:NSXMLElement*query=[NSXMLElement elementWithName:@“query”xmlns:@“jabber:iq:register”];NSXMLElement*iq=[NSXMLElement元素名称:@“iq”];[iq addAttributeWithName:@“type”stringValue:@“get”];[iq addAttributeWithName:@“id”stringValue:@”admin@domain/xmppframework“];[iq addAttributeWithName:@“至”stringValue:@“域”];[iq addChild:query];[self.xmppStream sendElement:iq];创建新用户时,您也可以在openfire服务器上进行检查,必填字段用*标记,但从代码注册新用户时无需输入确认密码。