1、服务器配置

我买了一台华为虚拟主机,系统是Linux,并购买了域名,网站也备案了,域名为:android666.cn。

然后在这台虚拟主机上安装Openfire,安装教程可参考:https://blog.csdn.net/android_cai_niao/article/details/113861004

安装后浏览器打开http://android666.cn:9090即可打开管理后台,我的配置如下:

我把服务器名称和主机名都设置为:android666.cn,即我的网站域名。

2、登录

2.1 Spark注册和登录

注册很简单,打开Spark,点击左下角的“账号”按钮进入注册界面,如下:

输入账号、密码和服务器地址,点击“创建账号”即可。

账号创建后即可进行登录,如下:

在“高级”设置中无需进行任何设置即可进行登录,一切都用默认设置即可,如下:

登录成功后,效果如下:

2.2 Smack实现登录

官方使用文档:https://download.igniterealtime.org/smack/docs/latest/documentation/
Smack依赖设置:https://github.com/igniterealtime/Smack/wiki/Smack-4.4-Readme-and-Upgrade-Guide

根项目的build.gradle:

allprojects {repositories {maven {url 'https://oss.sonatype.org/content/repositories/snapshots'}mavenCentral()}
}

Module的build.gradle:

dependencies {implementation "org.igniterealtime.smack:smack-android-extensions:4.4.0"implementation "org.igniterealtime.smack:smack-tcp:4.4.0"
}configurations {all*.exclude group: 'xpp3', module: 'xpp3'
}

权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

SDK初始化,可放到Appliation中进行:

AndroidSmackInitializer.initialize(this)

配置好这些之后,就可以开始写代码了,官方教程中演示了一个登录的示例,如下:

private fun login() {thread {try {val connection = XMPPTCPConnection("test001", "123456", "android666.cn")connection.connect().login()toast("登录成功")} catch (e: Exception) {Log.e(tag, "登录失败", e)toast("登录失败")}}
}
fun toast(text: CharSequence) {if (Looper.myLooper() == Looper.getMainLooper()) {Toast.makeText(this, text, Toast.LENGTH_SHORT).show()} else {runOnUiThread {Toast.makeText(this, text, Toast.LENGTH_SHORT).show()}}
}

登录代码是很简单,但是登录时失败的,报错如下:

2021-03-08 15:50:10.499 13630-13727/cn.android666.imdemo E/MainActivity: 登录失败org.jivesoftware.smack.SmackException$SmackWrappedException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.at org.jivesoftware.smack.AbstractXMPPConnection.setCurrentConnectionExceptionAndNotify(AbstractXMPPConnection.java:690)at org.jivesoftware.smack.AbstractXMPPConnection.notifyConnectionError(AbstractXMPPConnection.java:994)at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$4100(XMPPTCPConnection.java:130)at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1152)at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$700(XMPPTCPConnection.java:913)at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:936)at java.lang.Thread.run(Thread.java:929)

这里我并没有把异常贴完整,但也足够了解原因了,关键点:CertPathValidatorException: Trust anchor for certification path not found. 这一看就知道是证书的问题,我们并没有为Openfire配置证书,但是默认登录时它会使用证书配置进行登录,所以报错了。所以解决方案就是在登录时,让他不要使用证书,如下:

private fun login() {thread {try {val config = XMPPTCPConnectionConfiguration.builder().setUsernameAndPassword("test001", "123456").setXmppDomain(JidCreate.domainBareFrom("android666.cn")).setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) // 禁用安全模式.build()val connection = XMPPTCPConnection(config)connection.connect().login()toast("登录成功")} catch (e: Exception) {Log.e(tag, "登录失败", e)toast("登录失败")}
}

再次登录,就可以登录成功了!

Openfire加Smack实现IM相关推荐

  1. Openfire XMPP Smack RTC IM 即时通讯 聊天 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. openfire+spark+smack

    前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使用 ...

  3. 基于openfire+spark+smack

    前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...

  4. 【openfire,smack使用总结】--Smack库的使用

    Smack介绍 Smack是XMPP协议的的实现库,Smack库易于使用,仅仅几行代码就能实现客户端连接,登陆,发送即时消息.但是由于使用XMPP协议,所以不适合用在高并发的场合. Smack的使用 ...

  5. 用xmmp+openfire+smack搭建简易IM实现

    功能实现:注册,登录,单聊表情,文本,图片,语音的发送接收,添加好友,删除好友,查找好友,修改密码,消息提醒设置,获取离线消息等功能 1.前期准备 1.下载opnefire软件:https://www ...

  6. 基于openfire+smack的Android、消息推送服务

    前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...

  7. Android之基于xmpp openfire smack开发之openfire介绍和部署[1]

    http://blog.csdn.net/forlong401/article/details/33730365 前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack ...

  8. openfire安装配置完全教程

    Java领域的IM解决方案 Java领域的即时通信的解决方案可以考虑openfire+spark+smack. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端,最新版本是3. ...

  9. android下的XMPP对应smack-4.2.1,实现登录,注册,发单聊,加聊天室,发群聊等简单功能

    1.API地址:点击打开链接 2.openfire,spark下载:点击打开链接 3.效果图 4.引用的JAR: compile files('libs/fscontext.jar') compile ...

最新文章

  1. 【PAT (Advanced Level) Practice】1041 Be Unique (20 分)
  2. Shell 条件判断汇总
  3. Python 技术篇 - pip下载、安装慢解决方法,更改pip数据源实现秒速下载,配置阿里云国内镜像实例演示
  4. angular input_Angular 秒杀其它框架的设计之美(一)
  5. 【Fabric】Python自动化部署工具-Fabric入门教程
  6. redminote8自动关机怎么回事_红米Note8Pro手机值得入手吗 红米Note8Pro手机全面评测...
  7. Mysql索引优化实例讲解
  8. java beanutil 工具类_实现BeanFactoryAware来达到Spring静态方法获取Bean对象的BeanUtil工具类...
  9. 容器编排技术 -- Kubernetes Deployment
  10. LogBack 打印 ES的DSL日志信息
  11. java变量默为public_《Java8学习笔记》读书笔记(六)
  12. SQL Server 2016 CTP3.2 开荒 Reporting Service 篇
  13. JavaScript动态显示当前时间和倒计时的设计(附全码)_AX
  14. VS生成dump文件和调试dump文件
  15. Unity--初识Live2D Cubism以及通过代码来实现Live2D模型的基本功能(二)
  16. 可见的轮廓线用虚线绘制_机械制图国家标准规定,可见的轮廓线用虚线绘制。...
  17. python练手项目pdf_一个不错的练手项目!
  18. 常见的四种EDI传输协议
  19. Windows 10系统时间显示不正确
  20. UED、UCD、UE、UI、交互设计这 5 个名词有哪些区别?

热门文章

  1. dota war3map.j 解读
  2. 研电赛项目之罗氏线圈设计
  3. 银行ATM系统(IO存储、GUI界面)
  4. Python turtle库绘制同心圆
  5. python 画K线
  6. STM32头文件学习之sys.h
  7. TNS-12547 TNS-12560 TNS-00517
  8. CVPR2021超分辨率汇总(附论文链接/代码/解析)[持续更新]
  9. C# Microsoft.Office.Interop.Excel 引用的用法
  10. kedacom摄像头怎么预置_(word)科达KEDACOM TrueVixon100视频会议摄像头.doc