IOS使用XMPP最新教程(二)登陆实现

时间:2022-11-18 23:28:01

因为要写成一个系列,不想每次写太多,这次就简单的实现一个登陆的功能。


//是否连接

-(BOOL)connect;


//终止连接

- (void)disconnect


//设置xmppStream

-(void)setupStream;


//上线

-(void)goOnline;


//下线

-(void)goOffline;


主要就是这几个函数

@property (nonatomic,readonly)XMPPStream * xmppStream;


在定义一个上面的属性


-(void)setupStream

{

    xmppStream = [[XMPPStream alloc]init];

    [xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];

}


- (void)goOnline {

    XMPPPresence *presence = [XMPPPresence presence];

    [[self xmppStream] sendElement:presence];

}


- (void)goOffline {

    XMPPPresence *presence = [XMPPPresence presenceWithType:@"unavailable"];

    [[self xmppStream] sendElement:presence];

}



- (void)disconnect

{

    [self goOffline];

    [xmppStream disconnect];

}



上面的函数的实现(完全是可以粘贴过去的),其中我去掉了花名册相关的部分,因为现在还用不到。

最重要的是下面的connect函数

- (BOOL)connect {

    

    [self setupStream];

    

    

    if (![xmppStream isDisconnected]) {

        return YES;

    }

    

    [xmppStream setMyJID:[XMPPJID jidWithString:@"1@127.0.0.1"]];

    [xmppStream setHostName:@"127.0.0.1"];

    password = @"1";

    

    NSError *error = nil;

    if (![xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error])

    {

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"

                                                            message:[NSString stringWithFormat:@"Can't connect to server %@", [error localizedDescription]]

                                                           delegate:nil

                                                  cancelButtonTitle:@"Ok"

                                                  otherButtonTitles:nil];

        [alertView show];

        

        

        return NO;

    }

    

    return YES;

}

为了帮助新手理解,我去掉了NSUserDefaults的部分,把用户名和密码写死在里面了。

注意那个connectWithTimeout函数,在网上搜到的很多都是直接用connect,但是那个函数在最新版的framwork里面已经被去掉了,要用我这个才行。

上面函数是一个连接的功能,连接到服务器,下面这个函数是验证功能,验证你的密码然后登录到服务器。



- (void)xmppStreamDidConnect:(XMPPStream *)sender{

    NSError *error = nil;

    //验证密码

    [[self xmppStream] authenticateWithPassword:password error:&error];

    

}


- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender{

    

    [self goOnline];

}



然后你就可以在你的服务器上面看到你的用户已经亮了,说明登陆成功了。





下一篇准备写如何获取好友列表。