一点一滴慢慢的揭开XMPP的神秘面纱

xmpp.jpg

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]);
}

推荐一款学习iOS开发的app_____|______| | 传送门 今天暂时讲到这。。。。。 有不足之处希望大家指点出来哦,因为我也对xmpp刚接触不久 技术交流群:534926022(免费) 511040024(0.8/人付费) 原文在:http://www.allluckly.cn/ 版权归©Bison所有 如需转载请保留原文超链接地址!否则后果自负!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4848
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4878
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2060
来自专栏落花落雨不落叶

canvas画简单电路图

61811
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3145
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2645
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4708
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2577
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4025
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4637

扫码关注云+社区