XMPPFramework – 如何注册一个新的用户帐户

我试图使用XMPPFramework连接到Openfire服务器并创build一个新的用户帐户。 如果我已经以其他用户身份login,则此代码将创build一个新的用户帐户:

NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:register"]; [query addChild:[NSXMLElement elementWithName:@"username" stringValue:userName]]; [query addChild:[NSXMLElement elementWithName:@"password" stringValue:pswd]]; NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"]; [iq addAttributeWithName:@"type" stringValue:@"set"]; [iq addAttributeWithName:@"id" stringValue:@"reg2"]; [iq addChild:query]; [xmppStream sendElement:iq]; 

现在我想要做的是连接到服务器,并创build用户帐户,而不是首先作为一个不同的用户连接。 我已经尝试在xmppStream中设置主机名并build立连接(如下所示),但无法连接。

 NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:register"]; [query addChild:[NSXMLElement elementWithName:@"username" stringValue:userName]]; [query addChild:[NSXMLElement elementWithName:@"password" stringValue:pswd]]; NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"]; [iq addAttributeWithName:@"type" stringValue:@"set"]; [iq addAttributeWithName:@"id" stringValue:@"reg2"]; [iq addChild:query]; [xmppStream sendElement:iq]; [xmppStream setHostName:@"192.168.1.5"]; [xmppStream setHostPort:5222]; NSError *error; if (![xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting" message:@"See console for error details." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; } 

任何想法,我怎么能得到这个连接和注册新用户?

使用这个代码。

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. /// [[self appDelegate] connect]; AppDelegate *delegate=[self appDelegate]; [delegate connect]; useSSL=NO; allowSelfSignedCertificates=NO; allowSSLHostNameMismatch=NO; customCertEvaluation=NO; isRegistering=NO; self.xmppStream= [[self appDelegate] xmppStream]; BOOL *connect=[self.xmppStream isConnected]; [self createAccount]; } - (void)updateAccountInfo { //NSString *domain = [[NSString alloc] initWithString:@"192.168.1.100"]; //int port = 5222; NSString *usname =[[NSString alloc] initWithString:self.txtUsername.text]; NSString *juser =[[NSString alloc] initWithString:[usname stringByAppendingString:@"your server ip"]]; XMPPJID *jid = [XMPPJID jidWithString:juser]; [self xmppStream].myJID =jid; allowSelfSignedCertificates = NSOnState; allowSSLHostNameMismatch = NSOnState; NSUserDefaults *dflts = [NSUserDefaults standardUserDefaults]; //[dflts setObject:domain forKey:@"Account.Server"]; // [dflts setObject:(port ? [NSNumber numberWithInt:port] : nil) // forKey:@"Account.Port"]; [dflts setObject:juser forKey:@"Account.JID"]; [dflts setObject:@"ios" forKey:@"Account.Resource"]; [dflts setBool:useSSL forKey:@"Account.UseSSL"]; [dflts setBool:allowSelfSignedCertificates forKey:@"Account.AllowSelfSignedCert"]; [dflts setBool:allowSSLHostNameMismatch forKey:@"Account.AllowSSLHostNameMismatch"]; [dflts setBool:YES forKey:@"Account.RememberPassword"]; [dflts setObject:self.txtPasswd.text forKey:@"Account.Password"]; [dflts synchronize]; } - (void)createAccount { [self updateAccountInfo]; NSError *error = nil; BOOL success; if(![[[self appDelegate] xmppStream] isConnected]) { if (useSSL) success = [[self xmppStream] oldSchoolSecureConnectWithTimeout:XMPPStreamTimeoutNone error:&error]; else success = [[self xmppStream] connectWithTimeout:XMPPStreamTimeoutNone error:&error]; } else { //NSString *password = [[NSString alloc] initWithString:@"321" ]; success = [[self xmppStream] registerWithPassword:self.txtPasswd.text error:&error]; } if (success) { [self appDelegate].isRegistering = YES; } else { NSLog(@"not succeed "); } } - (void)xmppStreamDidRegister:(XMPPStream *)sender{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Registration" message:@"Registration with XMPP Successful!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alert show]; } - (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error{ DDXMLElement *errorXML = [error elementForName:@"error"]; NSString *errorCode = [[errorXML attributeForName:@"code"] stringValue]; NSString *regError = [NSString stringWithFormat:@"ERROR :- %@",error.description]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Registration with XMPP Failed!" message:regError delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; if([errorCode isEqualToString:@"409"]){ [alert setMessage:@"Username Already Exists!"]; } [alert show]; }