因为要写成一个系列,不想每次写太多,这次就简单的实现一个登陆的功能。
//是否连接
-(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];
}
然后你就可以在你的服务器上面看到你的用户已经亮了,说明登陆成功了。
下一篇准备写如何获取好友列表。