iOS 搭建xmpp聊天的具体步骤如下:
聊天室
[cpp] view plain copy
print?
//初始化聊天室
XMPPJID *roomJID = [XMPPJID jidWithString:ROOM_JID];
xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:self jid:roomJID];
[xmppRoom activate:xmppStream];
[xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
[cpp] view plain copy
print?
//创建聊天室成功
- (void)xmppRoomDidCreate:(XMPPRoom *)sender
{
DDLogInfo(@"%@: %@", THIS_FILE, THIS_METHOD);
}
[cpp] view plain copy
print?
//加入聊天室,使用昵称
[xmppRoom joinRoomUsingNickname:@"quack" history:nil];
[cpp] view plain copy
print?
//获取聊天室信息
- (void)xmppRoomDidJoin:(XMPPRoom *)sender
{
[xmppRoom fetchConfigurationForm];
[xmppRoom fetchBanList];
[xmppRoom fetchMembersList];
[xmppRoom fetchModeratorsList];
}
如果房间存在,会调用委托
[cpp] view plain copy
print?
// 收到禁止名单列表
- (void)xmppRoom:(XMPPRoom *)sender didFetchBanList:(NSArray *)items;
// 收到好友名单列表
- (void)xmppRoom:(XMPPRoom *)sender didFetchMembersList:(NSArray *)items;
// 收到主持人名单列表
- (void)xmppRoom:(XMPPRoom *)sender didFetchModeratorsList:(NSArray *)items;
房间不存在,调用委托
[cpp] view plain copy
print?
- (void)xmppRoom:(XMPPRoom *)sender didNotFetchBanList:(XMPPIQ *)iqError;
- (void)xmppRoom:(XMPPRoom *)sender didNotFetchMembersList:(XMPPIQ *)iqError;
- (void)xmppRoom:(XMPPRoom *)sender didNotFetchModeratorsList:(XMPPIQ *)iqError;
离开房间
[cpp] view plain copy
print?
[xmppRoom deactivate:xmppStream];
[cpp] view plain copy
print?
//离开聊天室
- (void)xmppRoomDidLeave:(XMPPRoom *)sender
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}
其他 ***
[cpp] view plain copy
print?
//新人加入群聊
- (void)xmppRoom:(XMPPRoom *)sender occupantDidJoin:(XMPPJID *)occupantJID
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}
//有人退出群聊
- (void)xmppRoom:(XMPPRoom *)sender occupantDidLeave:(XMPPJID *)occupantJID
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}
//有人在群里发言
- (void)xmppRoom:(XMPPRoom *)sender didReceiveMessage:(XMPPMessage *)message fromOccupant:(XMPPJID *)occupantJID
{
DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}
主要有三种方式:
1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据。但是实现简单,主要缺点:耗电等。
2.Google的C2DM,具体不细说,缺点,服务器在国外,你懂得,不是很稳定。
3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。
接下来说说XMPP在android客户端上的应用。分两部分:服务端搭建和客户端实现。
服务端搭建:
如果想测试一下功能,直接用搭建好的服务就行,下载androidpn-server-0.5.0-bin.zip 。
点击bin目录下得run.bat,直接搭好服务,在浏览器上输入 就进入管理界面。如下图:
客户端实现:
下载工程源码 androidpn-client-0.5.0.zip (347.74 KB, 下载次数: 25185) ,导入工程,运行前更改一处IP地址,修改androidpn.properties文件中的xmppHost为xmppHost=10.0.2.2
原因:模拟器访问本机需要改成10.0.2.2,下图为SDK中说明。
从服务端发送消息,客户端运行的界面:
ProducthuntOSX
Mac 上开源的 Product Hunt OSX 客户端软件
GanHuoCode
干货集中营的第三方iOS客户端
ESTMusicPlayer
一款基于 DOUAudioStreamer 开发的一款优雅简洁的音乐播放器.
beautifulApp
用Swift做的一个高仿最美应用
Geofancy
The Geofancy iOS app. Helping you to get the best out of your automated home, geofencing, iBeacons at your hand.
CocoaChinaPlus
CocoaChina+是一款开源的第三方CocoaChina移动端。整个App都用Swift2.0编写(除部分第三方OC代码外,比如JPush和友盟)。
Dunk
Dribbble客户端
ganchai
干柴(客户端、服务端)
phphub-ios
PHPHub iOS客户端
高仿糯米
高仿糯米
知乎日报
用swift2.0实现的知乎日报iOS客户端
HackerNewsReader
Hacker News iOS客户端
以下是我整理的iOS开源App的一部分,其中不乏有许多不错的项目,后续更多都会整理在:iOS开源项目 - MobDevGroup上
iBBS-Swift
一款用Swift写的BBS客户端
SmallDay
用Swift 实现的高仿小日子
Swift-Radio-Pro
Professional Radio Station App, created w/ Swift 2.0
zulip-ios
Dropbox收购公司内部社交服务商Zulip,然后全部开源,这是iOS App
DesignerNewsApp
Build a Swift App as a designer
firefox-ios
Firefox for iOS
iphone-app
开源中国的iPhone客户端源码
Git@OSC
Git@OSC iPhone 客户端,方便用户查看Git@OSC的项目以及简单的操作issue等
Coding
Coding官方客户端 GitHub地址
Coding iPad版
Coding官方客户端
iOSSF
SegmentFault官方App
ioctocat
GitHub第三方客户端
iTunesPicker
类似AppStore的一个应用
Doppio
寻找最近的星巴克
swiftmi-app
swift迷 - 专业的Apple swift开发中文社区 app版本 采用Swift实现
Cheddar
一个日程管理的App
BeeFancy
仿Fancy官方APP的WIREFRAME,基于BeeFramework
Anypic
类似于Instagram的一款App
SXNews
模仿网易新闻做的精仿网易新闻
iReddit
Reddit iPhone客户端
readdit
Reddit iPad客户端
豆瓣相册
Slowslab iOS应用 豆瓣相册 精选集 开源项目
ChatSecure-iOS
Objective-C写的XMPP聊天应用
NotificationChat
Objective-C写的完整的聊天应用
Swift-ZhihuDaily
用Swift实现的仿知乎日报应用
FakeZhihuDaily
仿知乎日报iOS客户端
edhita
用Swift实现的iOS平台开源文本编辑器。
ruby-china-for-ios
RubyChina官方客户端
Meizi
豆瓣妹子图iOS客户端
HackerNews
用Swift写的Hacker News 阅读 iOS App
SwiftHN
另外一个用Swift写的Hacker News 阅读App
News-YC
Hacker News阅读类iOS App
twidere
twitter 第三方客户端
2048
用SpriteKit实现的2048游戏
PlainReader
一款 iOS(iPhone + iPad) 新闻类客户端,内容抓取自
swift-2048
用Swift实现的2048游戏
iOS-2048
用Objective-C实现的2048游戏
FlappySwift
用swift实现的flappy bird游戏
ECMobile_iOS
基于ECShop的手机商城客户端
kxmovie
用ffmpeg写的iOS视频播放器
*** -ios
*** 官方App, 已上架
Sol
漂亮的扁平风格的天气App
Project-RainMan
用Swift写的天气类App
SwiftWeather
用Swift写的天气类App
v2ex
v2ex第三方iOS客户端
V2EXClient
Swift实现的V2EX iOS客户端
VPNOn
VPN连接管理,支持Apple Watch,已上架
Monkey
GitHub第三方iOS客户端
JokeClient-Swift
基于swift,用糗事百科的API简单做了一个糗百客户端,可以浏览各种段子,浏览搞笑图片,查看精彩评论等.
Watch
Dribbble第三方客户端
MyOne-iOS
用OC写的《一个》 iOS 客户端
BaiduFM-Swift
百度FM swift语言实现
WNXHuntForCity
高仿城觅2.0 by-objective-c
Tomate
圆盘式计时器
eigen
The Art World in Your Pocket or Your Trendy Tech Company's Tote, Artsy's iOS app.
WWDC
WWDC app for OS X