Openfire加Smack实现IM
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相关推荐
- Openfire XMPP Smack RTC IM 即时通讯 聊天 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- openfire+spark+smack
前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使用 ...
- 基于openfire+spark+smack
前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...
- 【openfire,smack使用总结】--Smack库的使用
Smack介绍 Smack是XMPP协议的的实现库,Smack库易于使用,仅仅几行代码就能实现客户端连接,登陆,发送即时消息.但是由于使用XMPP协议,所以不适合用在高并发的场合. Smack的使用 ...
- 用xmmp+openfire+smack搭建简易IM实现
功能实现:注册,登录,单聊表情,文本,图片,语音的发送接收,添加好友,删除好友,查找好友,修改密码,消息提醒设置,获取离线消息等功能 1.前期准备 1.下载opnefire软件:https://www ...
- 基于openfire+smack的Android、消息推送服务
前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...
- Android之基于xmpp openfire smack开发之openfire介绍和部署[1]
http://blog.csdn.net/forlong401/article/details/33730365 前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack ...
- openfire安装配置完全教程
Java领域的IM解决方案 Java领域的即时通信的解决方案可以考虑openfire+spark+smack. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端,最新版本是3. ...
- android下的XMPP对应smack-4.2.1,实现登录,注册,发单聊,加聊天室,发群聊等简单功能
1.API地址:点击打开链接 2.openfire,spark下载:点击打开链接 3.效果图 4.引用的JAR: compile files('libs/fscontext.jar') compile ...
最新文章
- 【PAT (Advanced Level) Practice】1041 Be Unique (20 分)
- Shell 条件判断汇总
- Python 技术篇 - pip下载、安装慢解决方法,更改pip数据源实现秒速下载,配置阿里云国内镜像实例演示
- angular input_Angular 秒杀其它框架的设计之美(一)
- 【Fabric】Python自动化部署工具-Fabric入门教程
- redminote8自动关机怎么回事_红米Note8Pro手机值得入手吗 红米Note8Pro手机全面评测...
- Mysql索引优化实例讲解
- java beanutil 工具类_实现BeanFactoryAware来达到Spring静态方法获取Bean对象的BeanUtil工具类...
- 容器编排技术 -- Kubernetes Deployment
- LogBack 打印 ES的DSL日志信息
- java变量默为public_《Java8学习笔记》读书笔记(六)
- SQL Server 2016 CTP3.2 开荒 Reporting Service 篇
- JavaScript动态显示当前时间和倒计时的设计(附全码)_AX
- VS生成dump文件和调试dump文件
- Unity--初识Live2D Cubism以及通过代码来实现Live2D模型的基本功能(二)
- 可见的轮廓线用虚线绘制_机械制图国家标准规定,可见的轮廓线用虚线绘制。...
- python练手项目pdf_一个不错的练手项目!
- 常见的四种EDI传输协议
- Windows 10系统时间显示不正确
- UED、UCD、UE、UI、交互设计这 5 个名词有哪些区别?
热门文章
- dota war3map.j 解读
- 研电赛项目之罗氏线圈设计
- 银行ATM系统(IO存储、GUI界面)
- Python turtle库绘制同心圆
- python 画K线
- STM32头文件学习之sys.h
- TNS-12547 TNS-12560 TNS-00517
- CVPR2021超分辨率汇总(附论文链接/代码/解析)[持续更新]
- C# Microsoft.Office.Interop.Excel 引用的用法
- kedacom摄像头怎么预置_(word)科达KEDACOM TrueVixon100视频会议摄像头.doc