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

Posted

技术标签:

【中文标题】使用 Openfire 中的用户服务通过 iOS 的 xmpp 框架注册新用户【英文标题】:Use User Service in Openfire to Register new user via xmpp framework for iOS 【发布时间】:2014-06-19 02:36:58 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您需要通过创建 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 中给您一个错误。

【讨论】:

嗨@skaur 感谢您的回答!我会看看这个!为了正确注册用户,哪些字段是必需的?我还有另一个问题,现在我可以连接并显示 openfire 服务器,我提交了自动获取名册但我没有得到它,我正在使用 xmpp 框架中实现的 coredatarosterstorage,我如何验证名册是否是正确填充?我没有得到该帐户的朋友! 您好@user3741129,您可以从服务器请求注册字段。这是获取注册字段的 XML 查询: NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:register"]; NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"]; [iq addAttributeWithName:@"type" stringValue:@"get"]; [iq addAttributeWithName:@"id" stringValue:@"admin@domain/xmppframework"]; [iq addAttributeWithName:@"to" stringValue:@"domain"]; [智商添加孩子:查询]; [self.xmppStream sendElement:iq]; 您也可以在创建新用户时检查您的openfire服务器,必填字段用*标记,但您在通过代码注册新用户时不需要输入确认密码。【参考方案2】:

这个解决方案对我有用。更有条理的方法

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

【讨论】:

以上是关于使用 Openfire 中的用户服务通过 iOS 的 xmpp 框架注册新用户的主要内容,如果未能解决你的问题,请参考以下文章

在openfire中获取xmpp ios中的所有注册用户

数据包中 getChildElement 中的 Openfire XMPP 组件命名空间

如何使用 xmpp 框架和 openfire 服务器将电话簿联系人添加到 ios 中的聊天应用程序?

XMPP iOS:无法连接 openfire 服务器

无法通过使用 smack、openfire 获得名册

Openfire 会议 iOS 实现