IOS XMPP(即时通讯的框架)
Posted 守望星空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS XMPP(即时通讯的框架)相关的知识,希望对你有一定的参考价值。
#import "AppDelegate.h"
#import "XMPPFramework.h"
/*
* 在AppDelegate实现登录
1. 初始化XMPPStream
2. 连接到服务器[传一个JID]
3. 连接到服务成功后,再发送密码授权
4. 授权成功后,发送"在线" 消息
*/
@interface AppDelegate ()<XMPPStreamDelegate>{
XMPPStream *_xmppStream;
}
// 1. 初始化XMPPStream
-(void)setupXMPPStream;
// 2.连接到服务器
-(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 连接到服务器
-(void)connectToHost{
NSLog(@"开始连接到服务器");
if (!_xmppStream) {
[self setupXMPPStream];
}
// 设置登录用户JID
//resource 标识用户登录的客户端 iphone android
XMPPJID *myJID = [XMPPJID jidWithUser:@"wangwu" domain:@"teacher.local" resource:@"iphone" ];
_xmppStream.myJID = myJID;
// 设置服务器域名
_xmppStream.hostName = @"teacher.local";//不仅可以是域名,还可是IP地址
// 设置端口 如果服务器端口是5222,可以省略
_xmppStream.hostPort = 5222;
// 连接
NSError *err = nil;
if(![_xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&err]){
NSLog(@"%@",err);
}
}
#pragma mark 连接到服务成功后,再发送密码授权
-(void)sendPwdToHost{
NSLog(@"再发送密码授权");
NSError *err = nil;
[_xmppStream authenticateWithPassword:@"123456" error:&err];
if (err) {
NSLog(@"%@",err);
}
}
#pragma mark 授权成功后,发送"在线" 消息
-(void)sendOnlineToHost{
NSLog(@"发送 在线 消息");
XMPPPresence *presence = [XMPPPresence presence];
NSLog(@"%@",presence);
[_xmppStream sendElement:presence];
}
#pragma mark -XMPPStream的代理
#pragma mark 与主机连接成功
-(void)xmppStreamDidConnect:(XMPPStream *)sender{
NSLog(@"与主机连接成功");
// 主机连接成功后,发送密码进行授权
[self sendPwdToHost];
}
#pragma mark 与主机断开连接
-(void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{
// 如果有错误,代表连接失败
NSLog(@"与主机断开连接 %@",error);
}
#pragma mark 授权成功
-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender{
NSLog(@"授权成功");
[self sendOnlineToHost];
}
#pragma mark 授权失败
-(void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error{
NSLog(@"授权失败 %@",error);
}
#pragma mark -公共方法
-(void)logout{
// 1." 发送 "离线" 消息"
XMPPPresence *offline = [XMPPPresence presenceWithType:@"unavailable"];
[_xmppStream sendElement:offline];
// 2. 与服务器断开连接
[_xmppStream disconnect];
}
@end
以上是关于IOS XMPP(即时通讯的框架)的主要内容,如果未能解决你的问题,请参考以下文章
XMPP协议实现即时通讯底层书写 -- IOS XMPPFramework Demo+分析