美文网首页带我飞2iOS开发进阶iOS学习笔记
一点一滴慢慢的揭开XMPP的神秘面纱

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

作者: Bison | 来源:发表于2015-09-23 14:39 被阅读2453次
    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所有 如需转载请保留原文超链接地址!否则后果自负!

    相关文章

      网友评论

      本文标题:一点一滴慢慢的揭开XMPP的神秘面纱

      本文链接:https://www.haomeiwen.com/subject/pcvicttx.html