我正在尝试注册一个新用户到明火,而不使用入站注册,还有一些其他设置是: bool allowSelfSignedCertificates = NO; bool allowSSLHostNameMismatch = NO; bool useSSL = NO。我播种计算器上的几个例子,但他们都不是为我好,还是我没把握的概念...Registert在iOS中使用XMPP的Openfire服务器的新用户
这里是我的代码:
- > .h文件中:
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "XMPP.h"
#import "XMPPRoster.h"
@interface SignUpViewController : UIViewController <UITextFieldDelegate, UIApplicationDelegate, XMPPRosterDelegate, XMPPStreamDelegate>
{
XMPPStream *xmppStream;
}
@property (nonatomic, strong, readonly) XMPPStream *xmppStream;
@end
- > .m文件
- (void)signUpButtonFunction{
NSLog(@"SignUp function");
[[self xmppStream] setHostName:@"IP_ADDRESS"];
[[self xmppStream] setHostPort:5222];
XMPPJID *jid=[XMPPJID jidWithString:emailTextField.text];
[[self xmppStream] setMyJID:jid];
[[self xmppStream] connectWithTimeout:3.0 error:nil];
NSMutableArray *elements = [NSMutableArray array];
[elements addObject:[NSXMLElement elementWithName:@"username" stringValue:@"venkat"]];
[elements addObject:[NSXMLElement elementWithName:@"password" stringValue:@"dfds"]];
[elements addObject:[NSXMLElement elementWithName:@"name" stringValue:@"eref defg"]];
[elements addObject:[NSXMLElement elementWithName:@"email" stringValue:@"[email protected]"]];
[ xmppStream registerWithElements:elements error:nil];
}
//server connect delegate methods are not working at least it doesn't enter in them
- (void)xmppStreamDidRegister:(XMPPStream *)sender{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Registration" message:@"Registration 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 Failed!" message:regError delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
if([errorCode isEqualToString:@"409"]){
[alert setMessage:@"Username Already Exists!"];
}
[alert show];
}
这是我使用的库: git library
,也是我想指出的是,我的代码是不是进入委托方法
UPDATE:
改变了signUpButtonFunction到:
xmppStream = [[XMPPStream alloc] init]; [xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()]; [[self xmppStream] setHostName:@"IP_ADDRESS"]; [[self xmppStream] setHostPort:5222]; [[self xmppStream] setMyJID:[XMPPJID jidWithString:@"[email protected]"]]; [[self xmppStream] connectWithTimeout:XMPPStreamTimeoutNone error:nil]; NSMutableArray *elements = [NSMutableArray array]; [elements addObject:[NSXMLElement elementWithName:@"username" stringValue:@"username"]]; [elements addObject:[NSXMLElement elementWithName:@"password" stringValue:@"password"]]; [elements addObject:[NSXMLElement elementWithName:@"name" stringValue:@"eref defg"]]; [elements addObject:[NSXMLElement elementWithName:@"email" stringValue:@"[email protected]"]]; [ xmppStream registerWithElements:elements error:nil]; NSError *error = nil; 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]; NSLog(@"%@",error);
而我得到的错误:
错误域= XMPPStreamErrorDomain Cod e = 1“试图在已连接或连接的情况下进行连接。”的UserInfo = {0x7fdc2af1f1c0 = NSLocalizedDescription正在尝试连接时已经连接或连接。}
如果我评论该行:
[ xmppStream registerWithElements:elements error:nil];
然后错误消失,但它剧照不进入委托方法。
要连接两次,先删除'[自xmppStream] connectWithTimeout:XMPPStreamTimeoutNone错误:零]' – vitalyster 2015-02-24 12:39:50
其实你需要在注册新用户之前连接流。尝试使用新的用户标识连接到xmppstream。从xmppStreamDidConnect委托中,您将能够知道该流已连接。请尝试从这一点初始化注册。 – QUserS 2015-03-03 12:22:37