XMPP中文文档:http://wiki.jabbercn.org/
参考博文:
XMPP系列博客https://blog.csdn.net/u011619283/article/category/6402547
详细介绍XMPP类:https://www.jianshu.com/p/c196135efc45
设置后台模式(还未成功?已成功):https://blog.csdn.net/reylen/article/details/12567971
XMPP系列开发:https://www.jianshu.com/p/eb273cb8ac94
iOS即时通讯,从入门到放弃?https://juejin.im/entry/58909369570c3500621cc4ea
本文Demo:https://github.com/cxymq/XMPPSwift
项目用Swift实现,CocoaPod集成XMPPFramework。
详细介绍都可在上述文章中获取,对号入座,不重复赘述。Demo只是简单接口调用,并非完整项目。
类文件简介
1.XMPPJID
标识用户,三部分组成:node identifier、domain、resource
2.XMPPMessage
消息类,组装消息体,type包含chat、groupchat、error、headline、normal
3.XMPPPresence
表明用户状态,如在线、离线、勿扰
4.XMPPStream
服务器连接类,设置delegate可以在回调中获取连接状态、认证情况、发送或接收消息情况以及发送自身状态的情况。
5.XMPPRoster
好友列表类,处理好友相关事务,获取好友列表、好友请求以及拒绝或同意请求。设置delegate在回调中拉取好友列表,获取好友的操作行为。
补充:
因为公司项目用OC实现,想直接把XMPPManager.swift桥接到项目,但是出现无法调用方法的问题,于是用OC重写了XMPPManager类。
出现以下问题:
1.CocoaPod集成之后,framework报错,需要在framework中修改头文件,但是这样对于多人开发产生不便。因此可以直接下载源码(https://github.com/robbiehanson/XMPPFramework),拷贝部分文件到项目中。
补充2:
之前设置后台模式,一直未成功。即使设置后台模式(background modes)加上Voice over IP 还是不行,后来发现需要在Applegate中加上后台模式代码。
OC代码如下:(Swift版会补充到Demo中)
static UIBackgroundTaskIdentifier _taskId;
- (void)getBackgroundTask {
UIBackgroundTaskIdentifier tempTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
//后台任务
}];
if (_taskId != UIBackgroundTaskInvalid) {
[self endBackgroundTask];
}
_taskId = tempTaskId;
[self performSelector:@selector(getBackgroundTask) withObject:nil afterDelay:120];
}
- (void)endBackgroundTask {
[[UIApplication sharedApplication] endBackgroundTask:_taskId];
_taskId = UIBackgroundTaskInvalid;
}
#pragma mark - application
- (void)applicationDidEnterBackground:(UIApplication *)application {
LOGI(@"%@", NSStringFromSelector(_cmd));
[self getBackgroundTask];
}
-(void)applicationWillEnterForeground:(UIApplication *)application {
[self endBackgroundTask];
}