使用 XMPP 框架创建登录和注册
Create a LogIn and Register using XMPP framework
我正在尝试将 XMPP 登录和注册页面彼此分开,服务器是基于明火的。我也没有使用入站注册。我想强调这是我第一次尝试做这样的事情,我以前的经验涉及只使用 NSSession 进行注册/登录。我想说的是,我购买并阅读了 Peter van de Put 所著的 Mastering The XMPP Framework 一书,但他只解释了如何为入站注册/登录做这件事。
还有我遇到的其他链接:
1 - 他们之间的相似答案
XMPP Aklesh Rathaur answer
XMPP Diego answer
2 - 教程
PS: 我注册时需要发送给服务器的信息是:邮箱,创建时的名字和密码
当我登录时:电子邮件、密码
Building a Jabber Client for iOS
在本教程中,我不明白登录是如何进行的,因为它只将用户凭据保存在 NSUserDefaults 中。
您可以下载我在这里实现的内容(使用 Whosebug 的建议):
my code so far and database structure picture
更新,这是我尝试用于注册的代码:
->.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:@"abc@bbc.com"]];
[ 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];
}
所以,经过搜索,发现openFire上可以安装一个允许正常注册的插件,所以我实现了下一个注册方法:
NSString *urlToCall = @"http://MyIP:9090/plugins/userService/userservice?type=add&secret=BigSecretKey&username=testUser&password=testPass&name=testName&email=test@gmail.com";
NSURL *url = [NSURL URLWithString:urlToCall];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
[theRequest setHTTPMethod:@"GET"];
NSError *error = nil;
NSURLResponse *response;
NSData *result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
NSString *responseString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
if ([responseString isEqual: @"<result>ok</result>\r\n"]) {
NSLog(@"user created");
} else {
NSLog( @"user NOT created");
NSLog(@"%@",responseString);
}
我正在尝试将 XMPP 登录和注册页面彼此分开,服务器是基于明火的。我也没有使用入站注册。我想强调这是我第一次尝试做这样的事情,我以前的经验涉及只使用 NSSession 进行注册/登录。我想说的是,我购买并阅读了 Peter van de Put 所著的 Mastering The XMPP Framework 一书,但他只解释了如何为入站注册/登录做这件事。 还有我遇到的其他链接: 1 - 他们之间的相似答案
XMPP Aklesh Rathaur answer XMPP Diego answer
2 - 教程
PS: 我注册时需要发送给服务器的信息是:邮箱,创建时的名字和密码 当我登录时:电子邮件、密码
Building a Jabber Client for iOS 在本教程中,我不明白登录是如何进行的,因为它只将用户凭据保存在 NSUserDefaults 中。
您可以下载我在这里实现的内容(使用 Whosebug 的建议): my code so far and database structure picture
更新,这是我尝试用于注册的代码:
->.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:@"abc@bbc.com"]];
[ 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];
}
所以,经过搜索,发现openFire上可以安装一个允许正常注册的插件,所以我实现了下一个注册方法:
NSString *urlToCall = @"http://MyIP:9090/plugins/userService/userservice?type=add&secret=BigSecretKey&username=testUser&password=testPass&name=testName&email=test@gmail.com";
NSURL *url = [NSURL URLWithString:urlToCall];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
[theRequest setHTTPMethod:@"GET"];
NSError *error = nil;
NSURLResponse *response;
NSData *result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
NSString *responseString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
if ([responseString isEqual: @"<result>ok</result>\r\n"]) {
NSLog(@"user created");
} else {
NSLog( @"user NOT created");
NSLog(@"%@",responseString);
}