我是个初学者。我热爱iOS开发。最近迷上了即时通讯。然后在自己电脑上面搭建一个服务器自己是弄一下。在这里记录自己学习的历程以此鞭策自己。
这里忽略建立服务器的艰辛。哈哈,也可以和我讨论一下。
感谢博主的博客http://blog.csdn.net/kangkangz4/article/category/1089711,让我学习到了XMPP的知识。
今天就是xmpp的登录以及注销的demo。
AppDelegate.h 文件
//
// AppDelegate.h
// xmpp框架导入
//
// Created by 陆巧怡 on 15/7/16.
// Copyright (c) 2015年 Simon. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
/**
* 注销登录
*/
-(void)logout;
@end
AppDelegate.m 文件
//
// AppDelegate.m
// xmpp框架导入
//
// Created by 陆巧怡 on 15/7/16.
// Copyright (c) 2015年 Simon. All rights reserved.
//
#import "AppDelegate.h"
#import "XMPPFramework.h"
/**
* 在AppDelegate实现登录
1.初始化XMPPStream
2.连接服务器时候要【传一个JID】
3.连接到服务器后,在发送密码授权
4.授权成功后,发送"在线"消息
*/
@interface AppDelegate ()<XMPPStreamDelegate>{
XMPPStream *_xmppStream;
}
// 1.初始化XMPPStream
-(void)setupXMPPStream;
// 2.连接服务器时候要【传一个JID】
-(void)connectToHost;
// 3.连接到服务器后,在发送密码授权
-(void)sendPwdToHost;
// 4.授权成功后,发送"在线"消息
-(void)sendOnlineToHost;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 程序一启动就连接主机
[self connectToHost];
return YES;
}
#pragma mark -私用方法
#pragma mark -初始化初始化XMPPStream
-(void)setupXMPPStream{
_xmppStream = [[XMPPStream alloc]init];
//设置代理
[_xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
}
#pragma mark -连接服务器时候要【传一个JID】
-(void)connectToHost{
NSLog(@"1.开始连接到服务器");
if (!_xmppStream) {
[self setupXMPPStream];
}
//设置用户JID
/**
* jidWithUser:用户名
domain:服务器
resource:标识用户登录的客户端 iPhone Android
*/
XMPPJID *myJID =[XMPPJID jidWithUser:@"dadong" domain:@"simon.local" resource:@"iPhone"];
_xmppStream.myJID = myJID;
//设置服务器域名
//不仅可以是域名,还可以是IP地址。
_xmppStream.hostName = @"simon.local";
//设置端口 如果服务器的端口是5222 则可以省略不写
_xmppStream.hostPort = 5222;
/**
* 在配置hostPort连接配置的主机名。超时是可选的。没有超时则使用XMPPStreamTimeoutNone。如果还没有设置主机名或myJID,这个方法将返回没有和参数设置错误。
*
* @param NSTimeInterval <#NSTimeInterval description#>
*
* @return <#return value description#>
*/
NSError *err =nil;
BOOL state =[_xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&err];
if (!state) {
NSLog(@"%@",err);
}
}
#pragma mark -连接到服务器后,在发送密码授权
-(void)sendPwdToHost{
NSError *err = nil;
[_xmppStream authenticateWithPassword:@"123456" error:&err];
if (err) {
NSLog(@"%@",err);
}
}
#pragma mark -授权成功后,发送"在线"消息
-(void)sendOnlineToHost{
NSLog(@"3.发送 在线 消息");
XMPPPresence *presence = [XMPPPresence presence];
NSLog(@"%@",presence);
[_xmppStream sendElement:presence];
}
#pragma mark -XMPPStream代理
#pragma mark 与主机连接成功
-(void)xmppStreamDidConnect:(XMPPStream *)sender{
NSLog(@"与主机连接成功");
NSLog(@"2.再发送密码授权");
//主机连接成功,发送密码进行授权
[self sendPwdToHost];
}
#pragma mark 与主机连接失败
-(void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{
if (error) {
NSLog(@"与主机连接失败