使用XMPP框架创建LogIn和Register

时间:2015-02-23 18:22:44

标签: ios xcode xmpp openfire

我正在尝试使XMPP LogIn和注册页面彼此分离,服务器是开放式的。此外,我不使用入站注册。我想强调这是我第一次尝试这样做,我之前的经验只涉及与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中的用户凭据。

你可以下载我在这里实现的内容(使用stackoverflow建议): 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

- &GT; .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];
}

1 个答案:

答案 0 :(得分:0)

所以,经过搜索后我发现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);
}