1 带内注册(In-band registration)的概念 2 使用XMPPFramework进行带内注册 NSError *err; NSString *tjid = [[NSString alloc] initWithFormat:@"anonymous@%@", server.text]; [[delegate xmppStream] setMyJID:[XMPPJID jidWithString:tjid]]; if ( ![[delegate xmppStream] connect:&err]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"连接服务器失败" message:[err localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; } 建立连接之后, 不需要进行用户验证, 可以如下处理 -- 如果是在注册,则跳过验证这一步 - (void)xmppStreamDidConnect:(XMPPStream *)sender { DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD); isXmppConnected = YES; NSError *error = nil; if (isRegister == YES) return; if (![[self xmppStream] authenticateWithPassword:password error:&error]) { DDLogError(@"Error authenticating: %@", error); } } xmppStream connect 是立即返回的, 所以connect返回并不能说明连接已经建立好. 连接建立好之后,我们就可以发注册信息 NSString *jid = [[NSString alloc] initWithFormat:@"%@@%@", user.text, server.text]; [[delegate xmppStream] setMyJID:[XMPPJID jidWithString:jid]]; NSError *error=nil; if (![[delegate xmppStream] registerWithPassword:password.text error:&error]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"创建账号失败" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; } registerWithPassword:error 方法也是立即返回的 - (void)xmppStreamDidRegister:(XMPPStream *)sender { DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD); registerSuccess = YES; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"创建账号成功" message:@"" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; } - (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error { DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD); UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"创建账号失败" message:@"用户名冲突" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; }
|
|