最近看到很多人在琢磨ios即时通讯这块,于是出去好奇,决定动手试试,今天就先从xmpp这个框架来尝试。
其实xmpp也就一个协议而已,更多人还是喜欢把它叫做Jabber
首先还是提供一下下载地址:
服务端Jabber,这里我用openfire来搭建:http://www.igniterealtime.org/
这里推荐一篇openfire配置的博文:http://www.cnblogs.com/xiaodao/archive/2013/04/05/3000554.html
客户端就是ios的xmppFrame一些库咯,给个github方便:https://github.com/robbiehanson/XMPPFramework
xmppFrame里面有demo,在xcode文件下
第三方类库,第一步还是惯例地导入需要的库文件
懒人喜欢直接上代码,出来吧,代码君!
- - (void)setupStream
- {
- NSAssert(xmppStream == nil, @"Method setupStream invoked multiple times");
- // 初始化XmppStream
- xmppStream = [[XMPPStream alloc] init];
- #if !TARGET_IPHONE_SIMULATOR
- {
- // 想要xampp在后台也能运行?
- //
- // P.S. - 虚拟机不支持后台
- xmppStream.enableBackgroundingOnSocket = YES;
- }
- #endif
- // 初始化 reconnect
- //
- // 这东西可以帮你把意外断开的状态连接回去...具体看它的头文件定义
- xmppReconnect = [[XMPPReconnect alloc] init];
- // 初始化 roster
- xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init];
- // xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] initWithInMemoryStore];
- xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:xmppRosterStorage];
- xmppRoster.autoFetchRoster = YES;
- xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;
- // 初始化 vCard support
- xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
- xmppvCardTempModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:xmppvCardStorage];
- xmppvCardAvatarModule = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:xmppvCardTempModule];
- // 初始化 capabilities
- xmppCapabilitiesStorage = [XMPPCapabilitiesCoreDataStorage sharedInstance];
- xmppCapabilities = [[XMPPCapabilities alloc] initWithCapabilitiesStorage:xmppCapabilitiesStorage];
- xmppCapabilities.autoFetchHashedCapabilities = YES;
- xmppCapabilities.autoFetchNonHashedCapabilities = NO;
- // 激活xmpp的模块
- [xmppReconnect activate:xmppStream];
- [xmppRoster activate:xmppStream];
- [xmppvCardTempModule activate:xmppStream];
- [xmppvCardAvatarModule activate:xmppStream];
- [xmppCapabilities activate:xmppStream];
- // 我们可以加添加委托来获取我们感兴趣的东西
- [xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
- [xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];
- // 下面可以替换成自己的域名和端口
- // 如果你没有提供一个地址,JID也是一样可以代替的,JID的格式类似这样"用户名@域名/roster",框架会自动抓取域名作为你的地址
- // 如果没有设置特殊的端口,默认为5222
- [xmppStream setHostName:@"xxxxx"];
- [xmppStream setHostPort:5222];
- //下面这两个根据你自己配置需要来设置
- allowSelfSignedCertificates = NO;
- allowSSLHostNameMismatch = NO;
- }
好了,具体要前期设置的东西都在上面,接下来就是连接上我们的服务器了
- - (BOOL)connect
- {
- if (![xmppStream isDisconnected]) {
- return YES;
- }
- <span style="white-space:pre"> </span>//这里前提你需要提供一个交互界面,可以填写jid和password的,然后把它们的值保存到NSUserDefaults
- NSString *myJID = [[NSUserDefaults standardUserDefaults] stringForKey:kXMPPmyJID];
- NSString *myPassword = [[NSUserDefaults standardUserDefaults] stringForKey:kXMPPmyPassword];
- if (myJID == nil || myPassword == nil) {
- return NO;
- }
- [xmppStream setMyJID:[XMPPJID jidWithString:myJID]];
- password = myPassword;
- NSError *error = nil;
- if (![xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error])
- {
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting"
- message:@"See console for error details."
- delegate:nil
- cancelButtonTitle:@"Ok"
- otherButtonTitles:nil];
- [alertView show];
- DDLogError(@"Error connecting: %@", error);
- return NO;
- }
- return YES;
- }
如果一切顺利的话,执行下面的方法
- - (void)xmppStreamDidConnect:(XMPPStream *)sender
- {
- DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
- isXmppConnected = YES;
- NSError *error = nil;
- if (![[self xmppStream] authenticateWithPassword:password error:&error])
- {
- DDLogError(@"Error authenticating: %@", error);
- }
- }
- - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
- {
- DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
- [self goOnline];
- }
- - (void)goOnline
- {
- XMPPPresence *presence = [XMPPPresence presence]; // type="available" is implicit
- [[self xmppStream] sendElement:presence];
- }
如果不成功会调用
- - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error
- {
- DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
- }
这种情况JID写错了,或者密码错了,好好检查一下
发个成功后的界面,普天同庆一下!
试试从服务端发一条信息给所有客户端
相关推荐
搭建环境 自己搞定 1.... 只能2台手机 安卓和安卓之间通讯,不能和电脑spark,ios等 。3.发送语音信息 显示 语音信息 点一下可以播放, 这个文字可以改个图片 或者什么符号代替。 有一下bug 初学者可以多熟悉
**标题解析:** "IOS openfire demo" 指的是一个针对iOS平台的Openfire应用程序的演示项目。...通过上述知识点的学习和实践,开发者可以掌握如何在iOS应用中集成Openfire,创建自己的即时通讯解决方案。
以上是基于openfire服务器的iOS即时通讯实现的基本流程和关键知识点。实际开发中还需要考虑用户体验、错误处理、网络条件适应等方面,确保应用的稳定性和易用性。通过不断学习和实践,开发者可以构建出功能丰富、...
在iOS开发中,实现即时通讯(Instant Messaging,简称IM)功能是常见的需求,而OpenFire作为一款开源的XMPP服务器,常被用于构建这样的系统。本文将深入探讨如何利用OpenFire进行iOS应用的聊天功能开发,并基于提供...
基于openfire服务器实现用户注册,登录,花名册获取,聊天,发送文本,发送图片等附件,文档中记录了开发总结,和第三发服务器开发的思路图解,并且有ios 开发即时通讯的案列代码,导入xcode即可使用的
在本文中,我们将深入探讨如何开发一个仿照微信的即时通讯iOS客户端,其后台服务器采用的是Openfire。Openfire是一款开源、基于XMPP协议的实时通信服务器,它为开发者提供了构建即时通讯应用的基础架构。 首先,...
【基于openfire XMPP的即时通讯客服端】是一款专为学校设计的即时通讯软件,它采用了XMPP(Extensible Messaging and Presence Protocol)协议,通过openfire服务器实现强大的在线通信功能。XMPP是一种开放标准,...
ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 转发
Openfire 是一个开源的即时通讯(IM)服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,允许用户进行实时、双向的通信。在移动应用开发中,尤其是在Android和iOS平台上,为了实现消息的即时...
在iOS平台上实现即时聊天功能,通常涉及到多个技术层面和组件的整合。本项目的核心是使用XMPP(Extensible Messaging and Presence Protocol)协议来实现实时通信。XMPP是一种基于XML的开放标准,广泛用于即时消息、...
Openfire是一款开源的即时通讯服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,提供实时通信服务。XMPP是一种标准协议,广泛用于即时消息、在线状态管理以及群组聊天。Openfire支持多平台,...
《Openfire即时通讯服务端4.1.6详解》 Openfire是一款强大的、基于XMPP协议的即时通讯服务端软件,其最新版本为4.1.6。XMPP(Extensible Messaging and Presence Protocol,可扩展消息传递和存在协议)是一种开放...
Openfire是一款开源的即时通讯(IM)服务器,它基于XMPP协议,支持多用户聊天、文件传输、音视频通信等功能。这款服务端软件是用Java语言编写的,因此具有跨平台的优势,可以运行在多种操作系统上,如Windows、Linux...
第三方 OpenFire 的使用 即时通讯
Openfire 是一款开源的即时通讯(IM)服务器软件,它基于XMPP协议,允许用户创建实时、双向的通信网络。在苹果操作系统上安装和配置Openfire可以为用户提供跨平台的聊天、协作和会议功能。以下将详细介绍如何在苹果...
android openfire xmpp smack即时通讯,包括:聊天发生文字,表情,图片,语音。添加删除好友,消息提醒,群聊,邀请好友进入房间,聊天记录保存等等。界面美观。最后说明:此demo是在网上一个叫EIM企信通的demo基础...
【openfire聊天推送】是关于实现聊天和即时通讯服务的一项技术,主要涉及到服务器搭建和推送功能的集成。Openfire是一款开源的即时通讯服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,允许...
### 基于XMPP协议的多端即时通讯方案 #### 一、开发背景 ##### 1、国际背景 ...同时,选择开源的Openfire作为服务器端,结合强大的客户端开发技术,能够构建一个功能全面、性能稳定的即时通讯系统。
Openfire兼容许多XMPP客户端,包括Android和iOS平台的Jabber客户端,如Gajim、Psi、Adium等,使移动设备也能无缝接入即时通讯网络。 **8. 性能与可伸缩性** Openfire设计上考虑了性能和可伸缩性,支持负载均衡和...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准协议,主要用于实现即时通讯(Instant Messaging, IM)和在线状态传播。它以其强大的扩展性和灵活性,在互联网通信领域有着广泛的应用,...