一点一滴慢慢的揭开XMPP的神秘面纱
2015-09-23 14:43
197 查看
XMPP是干嘛的在此就不多探讨了,我也是刚开始尝试着学习。
首先我们把
XMPP拉进工程,然后必须导入的几个框架:
CFNetwork.framework
Security.framework
libxml2.dylib
libresolv.dylib
SystemConfiguration.framework
CoreLocation.framework
AudioToolbox.framework
AVFoundation.framework
运行下不报错就对了。。。。。
在我们开发中做聊天的话,我们首先是需要登陆,登陆之后获取用户的信息,
获取到信息之后我们判断下该用户是否已经在
Openfire存在,不存在就直接给用户注册,存在就自动赋值登陆
Openfire
[self XmppLogin:dic];
更多经验请点击
#pragma mark 登陆xmpp -(void)XmppLogin:(NSDictionary*)userdic{ App.IM_Account = [NSString stringWithFormat:@"Bison%@",App.UserId];//拼上前缀 App.IM_Password = @"**************"; [[JEXMPP Shared] XmppLogin]; }
#pragma mark - 登录 退出 -(BOOL)XmppLogin{ if (![XMPP_Stream isDisconnected]) { return YES; } [XMPP_Stream setHostName:kIM_Host];//设置服务器 [XMPP_Stream setHostPort:[kIM_Port intValue]];//设置端口 NSLog(@"jid:%@ ps:%@",App.IM_Account,App.IM_Password); if (App.IM_Account == nil || App.IM_Password == nil) { return NO; } XMPPJID *myjid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",App.IM_Account,kIM_Domain] resource:@"jp"];//设置了 jid 的 resource 即限制了多点登陆 NSError *error ; [XMPP_Stream setMyJID:myjid]; if (![XMPP_Stream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) { NSLog(@"my connected error : %@",error.description); return NO; } return YES; }
接下来就是验证是否登陆了
Openfire
//将要连上 - (void)xmppStreamWillConnect:(XMPPStream *)sender{ NSLog(@"==xmppStreamWillConnect"); } //连上了 还要验证密码 - (void)xmppStreamDidConnect:(XMPPStream *)sender{ NSLog(@"xmppStreamDidConnect"); if (App.IM_Password) { NSError *error ; if (![XMPP_Stream authenticateWithPassword:App.IM_Password error:&error]) { NSLog(@"error authenticate : %@",error.description); } } } //突然掉线了 - (void)xmppReconnect:(XMPPReconnect *)sender didDetectAccidentalDisconnect:(SCNetworkReachabilityFlags)reachabilityFlags { NSLog(@"didDetectAccidentalDisconnect : \n %u ", reachabilityFlags); } //YES 重连 - (BOOL)xmppReconnect:(XMPPReconnect *)sender shouldAttemptAutoReconnect:(SCNetworkReachabilityFlags)reachabilityFlags{ NSLog(@"shouldAttemptAutoReconnect : \n %u ", reachabilityFlags); return YES; } #pragma mark 发送 成功 失败 - (void)xmppStream:(XMPPStream *)sender didSendMessage:(XMPPMessage *)message{ } //发送失败 - (void)xmppStream:(XMPPStream *)sender didFailToSendMessage:(XMPPMessage *)message error:(NSError *)error{ } //发送 成功或失败的 反馈给聊天页面 -(void)XmppSend_Status:(NSInteger)status Msg:(JEChatMessage *)msg{ NSLog(@"XmppSend_Status 消息发送:%@ \n内容:%@", status == 1 ? @"成功" : @"失败",msg.TextContent); } #pragma mark 接收消息 - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{ NSLog(@"%@\n 来新消息了\n from:%@\n to:%@\n type:%@\n message:%@\n body:%@",message,[[message attributeForName:@"from"] stringValue],[[message attributeForName:@"to"] stringValue],[[message attributeForName:@"type"] stringValue],[[message attributeForName:@"message"] stringValue],[[message elementForName:@"body"] stringValue]); }
今天暂时讲到这。。。。。
有不足之处希望大家指点出来哦,因为我也对xmpp刚接触不久
版权归©Bison所有 任何转载请标明出处!
博主app上线啦,快点此来围观吧
相关文章推荐
- [LeetCode]#19 Remove Nth Node From the End of list
- Android-Anim-Playground
- jQuery Validate 表单验证
- 递归打印字符串
- C++ traits萃取技术理解与实例
- IOS 四种保存数据的方式
- 一段倒计时的代码
- strcpy函数的实现
- mysql设置密码报错:mysqladmin: connect to server at 'localhost' failed的解决方法
- iOS开发网络篇—HTTP协议
- 三维数组——与 宝玉QQ群讨论交流之二
- 乱谈安全人才教育与培养
- 洛谷【P1119】 灾后重建
- Boolean和boolean的区别
- 数据库
- 【WF2015】【BZOJ4106】Amalgamated Artichokes
- DNS解析
- 面试题19:二叉树的镜像
- 使用pg_stat_statement监控pgsql遇到的问题
- 可以自定义截屏大小的截屏功能