ios xmpp+openfire 群聊

        最近在做直播的项目里面用的的群聊的功能,规定是要用xmpp+openfire。以前也没做过通过网上找资料最终还是把这部分功能实现了,只是简单的群聊天功能,当然这里我也只是把网上找到的东西分享给大家而已想学习的可以看一下。要实现群聊得有以下几个步骤:

一、安装openfire

这部分不详细说明,网上大把的资料,根据教程安装好就是了。当openfire安装好了后肯定会看到这样的界面:

ios xmpp+openfire 群聊_第1张图片
这样一个聊天服务器就已经搭建好了。

二、进行群组聊天

单聊这里就不介绍了,着重介绍群聊的功能怎么实现。

群聊首先得先创建房间:

如果要快速创建的话可以直接在openfire的分组聊天里面创建:

ios xmpp+openfire 群聊_第2张图片

ios xmpp+openfire 群聊_第3张图片

ios xmpp+openfire 群聊_第4张图片

这样一个聊天房间就会被创建好了,当然实际开发中肯定要通过代码来创建,代码创建房间:

/**创建一个房间*/

- (void)creatRoomWithName:(NSString *)roomName withTitle:(NSString *)roomTitle withNickName:(NSString *)roomNickName

{

   NSString *roomJid = [NSStringstringWithFormat:@"%@@conference.%@",roomName,kXMPP_Domain];

   NSLog(@"聊天房间id roomJid : %@", roomJid);

    

   _xmppRoom = [[XMPPRoomalloc]initWithRoomStorage:_storagejid:[XMPPJIDjidWithString:roomJid] dispatchQueue:dispatch_get_main_queue()];

    [_xmppRoomactivate:_xmppStream];

    [_xmppRoomjoinRoomUsingNickname:roomNickNamehistory:nil];

    [_xmppRoomaddDelegate:selfdelegateQueue:dispatch_get_main_queue()];

    [_xmppRoomfetchConfigurationForm];

   /**配置房间*/

    [selfconfigNewRoom];

}

/**配置房间信息*/

-(void)configNewRoom{

    NSXMLElement *x = [NSXMLElementelementWithName:@"x"xmlns:@"jabber:x:data"];

    NSXMLElement *p;

    p = [NSXMLElementelementWithName:@"field" ];

    [paddAttributeWithName:@"var"stringValue:@"muc#roomconfig_persistentroom"];//永久房间

    [paddChild:[NSXMLElementelementWithName:@"value"stringValue:@"1"]];

    [xaddChild:p];

    

    p = [NSXMLElementelementWithName:@"field" ];

    [paddAttributeWithName:@"var"stringValue:@"muc#roomconfig_maxusers"];//最大用户

    [paddChild:[NSXMLElementelementWithName:@"value"stringValue:@"10000"]];

    [xaddChild:p];

    

    p = [NSXMLElementelementWithName:@"field" ];

    [paddAttributeWithName:@"var"stringValue:@"muc#roomconfig_changesubject"];//允许改变主题

    [paddChild:[NSXMLElementelementWithName:@"value"stringValue:@"1"]];

    [xaddChild:p];

    

    p = [NSXMLElementelementWithName:@"field" ];

    [paddAttributeWithName:@"var"stringValue:@"muc#roomconfig_publicroom"];//公共房间

    [paddChild:[NSXMLElementelementWithName:@"value"stringValue:@"1"]];

    [xaddChild:p];

    

    p = [NSXMLElementelementWithName:@"field" ];

    [paddAttributeWithName:@"var"stringValue:@"muc#roomconfig_allowinvites"];//允许邀请

    [paddChild:[NSXMLElementelementWithName:@"value"stringValue:@"1"]];

    [xaddChild:p];

    

    [_xmppRoomconfigureRoomUsingOptions:x];

}

参考代码:

https://github.com/adow/Dollarss  

此代码是开源代码里面聊天的代码都有我就是看到这里才实现的,当然我的项目只要实现一些群聊的就可以了没有多少界面,代码里面牵涉到xmpp的注册登录的过程这个地方很关键下面我着重说明一下,在这里我也是遇到很多问题写出来少走弯路。

xmpp登录:

#pragma connect login and register

-(void)signinWithUsername:(NSString *)username

                  password:(NSString *)password

                      host:(NSString *)host

                isregister:(BOOL)isregister {

    self.username=username;

    self.password=password;

    self.host=host;

    if (![_xmppStreamisDisconnected]){

        return;

    }

    _registerAction=isregister;

    //    self.username=@"[email protected]";

    //    self.password=@"cloudq";

    //    NSString* domain=@"shintekimacbook-pro.local";

    self.jid=[NSStringstringWithFormat:@"%@@%@",self.username,self.host];

    [_xmppStreamsetMyJID:[XMPPJIDjidWithString:_jidresource:@"drrr"]];

    [_xmppStreamsetHostName:host];

    NSError *error =nil;

    BOOL result=[_xmppStreamconnectWithTimeout:3.0ferror:&error];

    NSLog(@"connect:%d,%@",result,error);

    [[NSUserDefaultsstandardUserDefaults] setObject:DRRRManager_StoreKey_UsernameforKey:username];

    [[NSUserDefaultsstandardUserDefaults] setObject:DRRRManager_StoreKey_PasswordforKey:password];

    [[NSUserDefaultsstandardUserDefaults] setObject:DRRRManager_StoreKey_HostforKey:host];

    [[NSUserDefaultsstandardUserDefaults] synchronize];

}

username 是注册时候的用户名

password  是注册时候的密码

host            是服务器的名称  比如我这里是 chat.itutu.tv

setHostName  最关键的 这里要服务器的ip地址

登录聊天服务器后接下来就是聊天房间此代码里面都有源码。这些就是我对群聊的理解,把我知道的分享给大家,如有什么问题可以留言。


你可能感兴趣的:(ios,openfire,XMPP)