1 | 最近在做一个即时通讯的项目,客户端用的是安卓asmark,服务端用的是tigase。 |
本人是第一次写博客来分享经验,是一只开发小菜鸟,希望这些经验可以让其他人少走些弯路。
好了废话进不多说了,开始正题。
现在开发xmpp及时通讯,大多是使用openfire,国内使用tigase还是较少的。遇到问题总是各种查。查不到也就只能自己一个个慢慢试了
创建聊天室的代码很简单,但是使用不同的服务端还是有区别的。
tigase下创建聊天室
1 | MultiUserChat muc = new MultiUserChat(ClientConServer.connection, roomName |
2 | + "@muc." + ClientConServer.connection.getServiceName()); |
openfire下创建聊天室
1 | MultiUserChat muc = new MultiUserChat(ClientConServer.connection, roomName |
2 | + "@conference." + ClientConServer.connection.getServiceName()); |
大家看到区别了吗? 当初楼主我使用了openfire的代码在tigase下创建房间结果tigase返了 404,s2s错误,到处找这个错误的解决方式。呵呵,都怪楼主学艺不精啊。
创建完聊天室,就该进行了聊天室的属性进行配置了。至于聊天室有哪些属性,大家可以去看协议(群聊协议xep 0045)。不过不同的服务端对实现的协议的内容是不一样的
要对房间的属性进行配置,就得从服务端拿到对应的表单。根据楼主debug的结果,openfire返回的表单信息大概有25条。而tigase只有13条。
不过openfire和tigase获取表单的代码是一样的
1 | Form form = muc.getConfigurationForm(); |
1 | Form submitForm = form.createAnswerForm(); |
1 | for (Iterator<FormField> fields = form.getFields(); fields |
3 | FormField field = (FormField) fields.next(); |
4 | if (!FormField.TYPE_HIDDEN.equals(field.getType()) |
5 | && field.getVariable() != null ) { |
7 | submitForm.setDefaultAnswer(field.getVariable()); |
获取到的表单之后就得进行配置了。
1 | submitForm.setAnswer( "muc#roomconfig_persistentroom" , true ); |
以上这个方法多个重载方法。第一个参数是根据服务端提供的来写的,如果所写的是tigase不提供的就会报java.lang.IllegalArgumentException
现在我们就来看看tigase提供了哪些。
muc#roomconfig_roomname 房间名称 muc#roomconfig_roomdesc 房间描述 muc#roomconfig_persistentroom 房间是持久的 muc#roomconfig_publicroom Make Room Publicly Searchable muc#roomconfig_moderatedroom 房间是临时的 muc#roomconfig_membersonly 房间仅对成员开放 muc#roomconfig_passwordprotectedroom 需要密码才能进入的房间 muc#roomconfig_roomsecret 设置房间密码 muc#roomconfig_anonymity 匿名的房间 muc#roomconfig_changesubject 允许占有者更改主题 muc#roomconfig_enablelogging 登陆房间对话 muc#maxhistoryfetch
在tigase下能配置的房间属性也就只有这些了。至于openfire提供了哪些这里我就不一一列出了,国内使用的还是比较多的。
第一次写博客写的不咋样,大家勿喷哈!写博客是为何和大家分享经验,希望大家也积极参与,共同学习,共同进步。
|