`

IOS+openfire 即时通讯

 
阅读更多

最近看到很多人在琢磨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文件下

 

 

第三方类库,第一步还是惯例地导入需要的库文件

 

       

           

懒人喜欢直接上代码,出来吧,代码君!

 

 

  1. - (void)setupStream  
  2. {  
  3.     NSAssert(xmppStream == nil, @"Method setupStream invoked multiple times");  
  4.       
  5.     // 初始化XmppStream  
  6.   
  7.     xmppStream = [[XMPPStream alloc] init];  
  8.       
  9.     #if !TARGET_IPHONE_SIMULATOR  
  10.     {  
  11.         // 想要xampp在后台也能运行?  
  12.         //   
  13.         // P.S. - 虚拟机不支持后台  
  14.           
  15.         xmppStream.enableBackgroundingOnSocket = YES;  
  16.     }  
  17.     #endif  
  18.       
  19.     // 初始化 reconnect  
  20.     //   
  21.     // 这东西可以帮你把意外断开的状态连接回去...具体看它的头文件定义  
  22.       
  23.     xmppReconnect = [[XMPPReconnect alloc] init];  
  24.       
  25.     // 初始化 roster  
  26.       
  27.     xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init];  
  28. //  xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] initWithInMemoryStore];  
  29.       
  30.     xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:xmppRosterStorage];  
  31.       
  32.     xmppRoster.autoFetchRoster = YES;  
  33.     xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;  
  34.       
  35.     // 初始化 vCard support  
  36.       
  37.     xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance];  
  38.     xmppvCardTempModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:xmppvCardStorage];  
  39.       
  40.     xmppvCardAvatarModule = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:xmppvCardTempModule];  
  41.       
  42.     // 初始化 capabilities  
  43.       
  44.       
  45.     xmppCapabilitiesStorage = [XMPPCapabilitiesCoreDataStorage sharedInstance];  
  46.     xmppCapabilities = [[XMPPCapabilities alloc] initWithCapabilitiesStorage:xmppCapabilitiesStorage];  
  47.   
  48.     xmppCapabilities.autoFetchHashedCapabilities = YES;  
  49.     xmppCapabilities.autoFetchNonHashedCapabilities = NO;  
  50.   
  51.     // 激活xmpp的模块  
  52.   
  53.     [xmppReconnect         activate:xmppStream];  
  54.     [xmppRoster            activate:xmppStream];  
  55.     [xmppvCardTempModule   activate:xmppStream];  
  56.     [xmppvCardAvatarModule activate:xmppStream];  
  57.     [xmppCapabilities      activate:xmppStream];  
  58.   
  59.     // 我们可以加添加委托来获取我们感兴趣的东西  
  60.   
  61.     [xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];  
  62.     [xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];  
  63.   
  64.     // 下面可以替换成自己的域名和端口  
  65.       
  66.     // 如果你没有提供一个地址,JID也是一样可以代替的,JID的格式类似这样"用户名@域名/roster",框架会自动抓取域名作为你的地址  
  67.       
  68.     // 如果没有设置特殊的端口,默认为5222  
  69.       
  70.     [xmppStream setHostName:@"xxxxx"];  
  71.     [xmppStream setHostPort:5222];    
  72.       
  73.   
  74.     //下面这两个根据你自己配置需要来设置  
  75.     allowSelfSignedCertificates = NO;  
  76.     allowSSLHostNameMismatch = NO;  
  77. }  

 

好了,具体要前期设置的东西都在上面,接下来就是连接上我们的服务器了

 

 

  1. - (BOOL)connect  
  2. {  
  3.     if (![xmppStream isDisconnected]) {  
  4.         return YES;  
  5.     }  
  6. <span style="white-space:pre">  </span>//这里前提你需要提供一个交互界面,可以填写jid和password的,然后把它们的值保存到NSUserDefaults  
  7.     NSString *myJID = [[NSUserDefaults standardUserDefaults] stringForKey:kXMPPmyJID];  
  8.     NSString *myPassword = [[NSUserDefaults standardUserDefaults] stringForKey:kXMPPmyPassword];  
  9.       
  10.     if (myJID == nil || myPassword == nil) {  
  11.         return NO;  
  12.     }  
  13.   
  14.     [xmppStream setMyJID:[XMPPJID jidWithString:myJID]];  
  15.     password = myPassword;  
  16.   
  17.     NSError *error = nil;  
  18.     if (![xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error])  
  19.     {  
  20.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting"   
  21.                                                             message:@"See console for error details."   
  22.                                                            delegate:nil   
  23.                                                   cancelButtonTitle:@"Ok"   
  24.                                                   otherButtonTitles:nil];  
  25.         [alertView show];  
  26.   
  27.         DDLogError(@"Error connecting: %@", error);  
  28.   
  29.         return NO;  
  30.     }  
  31.   
  32.     return YES;  
  33. }  



 

如果一切顺利的话,执行下面的方法

 

 

  1. - (void)xmppStreamDidConnect:(XMPPStream *)sender  
  2. {  
  3.     DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);  
  4.       
  5.     isXmppConnected = YES;  
  6.       
  7.     NSError *error = nil;  
  8.       
  9.     if (![[self xmppStream] authenticateWithPassword:password error:&error])  
  10.     {  
  11.         DDLogError(@"Error authenticating: %@", error);  
  12.     }  
  13. }  
  14.   
  15. - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender  
  16. {  
  17.     DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);  
  18.       
  19.     [self goOnline];  
  20. }  

 

  1. - (void)goOnline  
  2. {  
  3.     XMPPPresence *presence = [XMPPPresence presence]; // type="available" is implicit  
  4.       
  5.     [[self xmppStream] sendElement:presence];  
  6. }  

 

 

如果不成功会调用

 

 

  1. - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error  
  2. {  
  3.     DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);  
  4. }  

 

 

这种情况JID写错了,或者密码错了,好好检查一下

 

发个成功后的界面,普天同庆一下!

 

 

试试从服务端发一条信息给所有客户端

 

装载(http://blog.csdn.net/bsdg123/article/details/8993479)

分享到:
评论

相关推荐

    xmpp+Android+openfire 即时通讯,仿微信发语音,文字,图片

    搭建环境 自己搞定 1.... 只能2台手机 安卓和安卓之间通讯,不能和电脑spark,ios等 。3.发送语音信息 显示 语音信息 点一下可以播放, 这个文字可以改个图片 或者什么符号代替。 有一下bug 初学者可以多熟悉

    IOS openfire demo

    **标题解析:** "IOS openfire demo" 指的是一个针对iOS平台的Openfire应用程序的演示项目。...通过上述知识点的学习和实践,开发者可以掌握如何在iOS应用中集成Openfire,创建自己的即时通讯解决方案。

    ios xmpp即时通讯实现

    以上是基于openfire服务器的iOS即时通讯实现的基本流程和关键知识点。实际开发中还需要考虑用户体验、错误处理、网络条件适应等方面,确保应用的稳定性和易用性。通过不断学习和实践,开发者可以构建出功能丰富、...

    IOS 开发OPENFIRE聊天DEMO

    在iOS开发中,实现即时通讯(Instant Messaging,简称IM)功能是常见的需求,而OpenFire作为一款开源的XMPP服务器,常被用于构建这样的系统。本文将深入探讨如何利用OpenFire进行iOS应用的聊天功能开发,并基于提供...

    iOS xmpp即时通讯

    基于openfire服务器实现用户注册,登录,花名册获取,聊天,发送文本,发送图片等附件,文档中记录了开发总结,和第三发服务器开发的思路图解,并且有ios 开发即时通讯的案列代码,导入xcode即可使用的

    仿照微信的即时通讯ios客户端,后台为openfire

    在本文中,我们将深入探讨如何开发一个仿照微信的即时通讯iOS客户端,其后台服务器采用的是Openfire。Openfire是一款开源、基于XMPP协议的实时通信服务器,它为开发者提供了构建即时通讯应用的基础架构。 首先,...

    基于openfire XMPP的即时通讯客服端

    【基于openfire XMPP的即时通讯客服端】是一款专为学校设计的即时通讯软件,它采用了XMPP(Extensible Messaging and Presence Protocol)协议,通过openfire服务器实现强大的在线通信功能。XMPP是一种开放标准,...

    ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 您可以上传小于60MB的文件

    ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 转发

    Openfire 推送(Android + iOS)

    Openfire 是一个开源的即时通讯(IM)服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,允许用户进行实时、双向的通信。在移动应用开发中,尤其是在Android和iOS平台上,为了实现消息的即时...

    iOS 实现的即时聊天

    在iOS平台上实现即时聊天功能,通常涉及到多个技术层面和组件的整合。本项目的核心是使用XMPP(Extensible Messaging and Presence Protocol)协议来实现实时通信。XMPP是一种基于XML的开放标准,广泛用于即时消息、...

    基于openfire,XMPPFramework实现的iOS聊天应用

    Openfire是一款开源的即时通讯服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,提供实时通信服务。XMPP是一种标准协议,广泛用于即时消息、在线状态管理以及群组聊天。Openfire支持多平台,...

    openfire_4_1_6.zip

    《Openfire即时通讯服务端4.1.6详解》 Openfire是一款强大的、基于XMPP协议的即时通讯服务端软件,其最新版本为4.1.6。XMPP(Extensible Messaging and Presence Protocol,可扩展消息传递和存在协议)是一种开放...

    openfire聊天服务端源码

    Openfire是一款开源的即时通讯(IM)服务器,它基于XMPP协议,支持多用户聊天、文件传输、音视频通信等功能。这款服务端软件是用Java语言编写的,因此具有跨平台的优势,可以运行在多种操作系统上,如Windows、Linux...

    ios-XMPP Pod OpenFire.zip

    第三方 OpenFire 的使用 即时通讯

    如何安装配置Openfire for苹果

    Openfire 是一款开源的即时通讯(IM)服务器软件,它基于XMPP协议,允许用户创建实时、双向的通信网络。在苹果操作系统上安装和配置Openfire可以为用户提供跨平台的聊天、协作和会议功能。以下将详细介绍如何在苹果...

    android openfire xmpp smack即时通讯,包括:聊天发生文字,表情,图片,语音等

    android openfire xmpp smack即时通讯,包括:聊天发生文字,表情,图片,语音。添加删除好友,消息提醒,群聊,邀请好友进入房间,聊天记录保存等等。界面美观。最后说明:此demo是在网上一个叫EIM企信通的demo基础...

    openfire聊天推送

    【openfire聊天推送】是关于实现聊天和即时通讯服务的一项技术,主要涉及到服务器搭建和推送功能的集成。Openfire是一款开源的即时通讯服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,允许...

    基于xmpp协议的多端即时通讯方案

    ### 基于XMPP协议的多端即时通讯方案 #### 一、开发背景 ##### 1、国际背景 ...同时,选择开源的Openfire作为服务器端,结合强大的客户端开发技术,能够构建一个功能全面、性能稳定的即时通讯系统。

    openfire3.10.0

    Openfire兼容许多XMPP客户端,包括Android和iOS平台的Jabber客户端,如Gajim、Psi、Adium等,使移动设备也能无缝接入即时通讯网络。 **8. 性能与可伸缩性** Openfire设计上考虑了性能和可伸缩性,支持负载均衡和...

    XMPP本地服务器的即时通讯

    XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准协议,主要用于实现即时通讯(Instant Messaging, IM)和在线状态传播。它以其强大的扩展性和灵活性,在互联网通信领域有着广泛的应用,...

Global site tag (gtag.js) - Google Analytics