openfire这个im服务器是开源的,但是bug不少,一堆坑。
配合android端使用的是smack,现在目前最新的是4.2.1,以前我已经搭建了4.1.4,但是smack维护还是比较多的,看看他们的更新日志,呃,新功能不少,而且还不错的样子,但是对于旧版本的话,呵呵,不好意思,不太支持,因为新版本对于旧版本来说,经常有不少的变动,主要的方法还经常改着改那的,所有更新的话需要重新去适应。
主题来了:
首先介绍资源(上不了请):
官方文档地址:https://download.igniterealtime.org/smack/docs/latest/documentation/
官方论坛(比较好找问题处理的地方):https://discourse.igniterealtime.org/
官方smack的下载地址和openfire服务器或者是各种客户端都可以在官网找得到:https://www.igniterealtime.org/index.jsp
步骤(android studio)
先构建Gradle,直接上jar
compile files('libs/xpp3-1.1.6.jar')
compile files('libs/fscontext.jar') compile files('libs/providerutil.jar')
compile group: 'de.measite.minidns', name: 'minidns-hla', version: '0.2.2'compile files( 'libs/smack-android-4.2.1.jar')compile files( 'libs/smack-core-4.2.1.jar')compile files( 'libs/smack-extensions-4.2.1.jar')compile files( 'libs/smack-im-4.2.1.jar')compile files( 'libs/smack-resolver-minidns-4.2.1.jar')compile files( 'libs/smack-sasl-provided-4.2.1.jar')compile files( 'libs/smack-tcp-4.2.1.jar')compile files( 'libs/jxmpp-core-0.5.0.jar')compile files( 'libs/jxmpp-jid-0.5.0.jar')compile files( 'libs/jxmpp-util-cache-0.5.0.jar')compile files( 'libs/smack-android-extensions-4.2.1.jar')
构建的问题比较多。一个个处理
1.xpp3 ,Error:trouble processing "javax/xml/namespace/QName.class这个jar下载地址:点击打开链接,完了还要删除QName.class文件后重新打包成jar
2.项目中可能会报Didn't find class "javax.naming.directory.InitialDirContext"这个错误,因为android不能加载javax.naming包,所有,当你导入smack的libs各个jar时,要注意!
千万不要把全部jar都导到自己项目中去,因为有几个包跟android有冲突,按照上面给的去导入即可,或者以后选择添加。
3.Failed resolution of: Lde/measite/minidns/hla/DnssecResolverApi; 这个错误,因为smack的jar包中还需要自己去引用minidns的jar,所有要 compile group: 'de.measite.minidns', name: 'minidns-hla', version: '0.2.2',或者是到http://mvnrepository.com/artifact/de.measite.minidns/minidns-hla/0.2.4,这个网址可以搜索到大部分日常所需的jar。
构建完,就开始connection
连接的代码请放到线程上操作。
这个就开始根据官方的教程开始,自己旧的那套木有啥用了。
首先是建立连接:
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setUsernameAndPassword("username", "password")
.setXmppDomain("jabber.org")
.setHost("earl.jabber.org")
.setPort("8222")
.build();
AbstractXMPPConnection conn2 = **new** XMPPTCPConnection(config);
conn2.connect();
运行,项目没死但警告
java.security.KeyStoreException: java.security.NoSuchAlgorithmException
需要关闭些东西:
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setUsernameAndPassword("username", "password")
.setXmppDomain("jabber.org")
.setHost("earl.jabber.org")
.setPort("8222")
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
这个就可以了。
conn2.connect();
conn2.login();
完成登录