QQ 1274510382
Wechat JNZ_aming
商业联盟 QQ群538250800
技术搞事 QQ群599020441
解决方案 QQ群152889761
加入我们 QQ群649347320
共享学习 QQ群674240731
纪年科技aming
网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。


原理是服务器是一直在启动状态的线程,不断的从客户端(App)获取消息,
收到消息后,进行类型和发送目标判断,以发送到群组或者单聊的方式,
客户端收到消息后进行界面的展示。

如果要自己开发即时通讯类的 App,那么必须得要后台,
但是现在很多第三方工具已经给我们集成好了所有需要调用的接口工具。

比如极光IM

因为之前用的比较多的是极光的推送服务,
也对极光的一些服务和开发文档比较熟悉,
所以该项目就是完全使用极光的sdk。

  • 应用场景一:在线客服、基础文字对话
    应用示例:简书私信、支付宝客服
    介绍:该场景只需要一些基础的聊天功能,
    直接继承第三方IM的优点
    是不需要后台去实现一大堆东西,前端可以直接根据极光IM文档去使用定义好的方法,
    就可以实现相关功能,开发起来非常快。

  • 应用场景二:App 中的聊天功能
    应用示例:脉脉、内涵段子、
    介绍:极光 IM SDK 可以满足正常的
    图片收发、语音消息、表情等基本需求,
    对此类场景下的即时通讯的开发,也很能加快开发速度。

  • 应用场景三:聊天交友 App
    应用示例:陌陌、微信、QQ 等
    介绍:这类软件是一个完整的即时通讯项目,功能已经不仅仅局限于简单的消息的收发。
    可以满足一个即时通讯类的绝大部分功能。
    极光官方提供的有即时通讯Demo,包括 UI 等都实现了,只需要简单配置就可以用。
    这个项目已经在GitHub开源。
    可以参考开发或者在此基础上做另外的功能开发都会比较方便。


极光 Message 整体特性:

消息类型:文字、语音、图片、地理位置、文件、自定义消息等。
聊天方式:单聊、群聊。

平台支持:Android, iOS,Web 多平台互通。
用户维护:注册、登录、头像、用户其他信息。
群组维护:创建群组、加群、退群。

离线消息:可选择是否需要保存离线消息
关系模式:有好友模式和无好友模式

跨应用聊天:不同应用下的用户可相互通信

整体 UI 界面概述

所有的聊天都基于登录状态操作,也就是说未登录是不能操作的。

1、注册和登陆

两种方式: 注册并登陆或者直接登录。

如果第一次登录过,就会把账号等资料缓存到本地,再次打开就可以自动登录。

用户名和密码规范限制长度限制 Byte(4~128)
用户名:以字母或者数字开头。支持字母、数字、下划线、英文点、减号、 @。
密码:不限

2、添加好友

两种方式:

手动输入 id,根据 id 查找,并发送好友请求,当另一方同意后会建立好友关系。
或者通过联系人页面>新朋友>推荐好友来添加系统推荐的好友。

这里推荐好友,是由我这里手动设置的三个已经注册完成的号。

好友通知是本地数据库缓存的消息通知,
也就是只有在收到好友请求时,才会把发送过来的请求信息存放到本地。
当然如果清空了数据,那就查不到申请记录了。

3、联系人建立

这里是根据极光文档建立的好友关系,
其实官方提供的说明是不需要建立好友关系就能会话,但是这里为了项目的一些需要,使用了极光提供的一套联系人接口来操作好友。

4、更新资料

修改个人资料,头像相关操作,对好友的备注、黑名单等功能还未开发。

在第一次注册的时候,在注册成功的情况下会默认自动登陆,
并且默认设置个人资料的一些参数。
比如头像,昵称等。防止在更新资料的时候部分字段提示空的错误。

5、设置

设置会在安装的时候初始化,默认只开启漫游的开关。
其他开关需要手动,修改密码也是。

技术开发路线
除了对朋友圈的功能,
其他都可以借助极光 IM 的 sdk 实现,这一块会放到最后,具体实现方法还未确定。

第一阶段:(已完成)
注册登录>退出登录>找回密码>聊天窗口

包括基本的注册登录功能,可以开始正常会话。

账号是基础,所有的会话都是建立在两个账号之间的通讯,
而服务端(JMessage)只是作为两端之间消息传播的桥梁和媒介。

所以账号是建立两个点的基石。

第二阶段:(已完成)
个人资料(头像,昵称,性别等):
在原来的基础上给用户添加昵称,头像等属性。

当这个基础建立起来之后,为了区分各自的不同,
如过单靠 id,相信没人知道对方是谁。
为了区分需要我们对这个 id 进行 特征设置,
这些特征包括头像、昵称、年龄、性别、地域等。

第三阶段:(已完成)
好友功能:
根据用户名id,
添加好友,
更新好友列表。
以及其他删除等操作。

当用户角色属性建立起来之后,就是建立关系,
在极光中默认是不需要建立好友关系就可以会话。
但是我们前台需要展现给使用方,作为一个标识来区分好友。

所以这里是要做手动关联好友,
既然做了好友系统,
那么必不可少的就是申请好友和通过申请。

第四阶段:(已完成)
消息操会话操作:消息的发送、接收、展示、删除等

好友系统建立起来之后,需要开始进行会话,
只有创建了会话之后,才会出来聊天窗口。

注意这里会话和聊天是两个概念。
有会话不一定有聊天记录。同样删除了所有的聊天记录,会话窗口还是存在。

所以还要对消息操作的时候,选择清空消息记录,或者清空并删除会话。

一个产品的开端一定是一个最主要的基础功能,而这个最基础的功能就是聊天

第五阶段:
好友关系的高级操作:
好友的删除,备注,黑名单;
消息类型。

在前四个阶段已经可以完成正常的会话,后面的就属于拓展阶段。

消息多样化是拓展的首选,现在不仅仅满足于文字表情的对话,
在此基础上还需要进一步的开发图片、语音、短视频等。

如果进度比较快的话,还可以把好友添加备注等。

第六阶段:
群组、群聊:创建群,加群,搜索群,审核,踢人,拉人等

群组作为另一个大的功能,作为之前版本稳定,并且大部分功能能完善之后开发的版本。

而且群组涉及的技术,代码操作,并不比单聊少。
所以从时间上来看,放在后面开发也是应该的。

第七阶段:
空间、朋友圈的开发

目前也只有这块需要单独的去开发相应的功能。
或者技术上有问题,也可以开发一个类似咨询的界面。

在这里需要用到分享、加载、刷新等。

技术框架选择

由于是个人快速开发,为了提高开发速度和效率,所以在很多地方都是用了第三方框架。

其中用的最多的是极光,不仅仅是依赖于极光即时通讯服务,
后期还会引入统计、分享等相关的 sdk 。

  • 即时通讯IM

极光-JMessage
也是主要的功能,所有的聊天包括好友的对话实现,
都是基于极光-JMessage 这个第三方 SDK 。
这也是整个项目的核心功能。

  • 推送

JPush
同样是使用极光的产品,当然极光最出名的也就是 JPush,
是很多开发者的首选推送方案
不过后面才知道,集成了 JMessage 之后,就不需要集成推送了,
但是两者之前并没有什么冲突,如果后面有新需求的话,需要推送再说吧。

  • 存储

主要使用了两种方式:

SharedPreferences:
一种是本地SharedPreferences存储,为了存储一些基本的用户数据,和账号设置等。

GreenDao:
另外一种是数据库,这里使用GreenDao框架,该项目在GitHub已经8000+的star,
目前也是个人开发者的首选数据库框架。
用来存储一些数据多的,在项目中主要应用的地方是好友请求的存储,和搜索历史的存储。

GreenDaoUpgradeHelper:
为了方便数据库的升级,还顺便使用了一个数据库升级的辅助类

  • 网络相关

Picasso
使用图片加载
由于第三方已经封装过了网络加载,所以这里仅仅需要一个加载图片的方法,
当然用 Glide 也是一样的。
Picasso 在加载图片的时候需要的参数可以是 File、String、Uri、int。
而在图片请求返回的结果也无非是这几种,所以完全可以满足图片加载的需要。

  • 工具

butterknife:
快速实例化控件的工具,一键生成并绑定控件,顺便还可以初始化监听方法。
UI库

如果说前面的第三方库是为了减少数据的操作,那么UI则是减少界面的复杂性,增加扩展性。

  • 增强视觉效果。

Recyclerview:
替代ListView的列表控件,用来展示会话列表、联系人列表、推荐列表、请求列表。

RecyclerViewHeader:
给RecyclerView添加头部的控件

PickerView :
用于设置个人资料选择地区、性别、生日的控件

CircleImageView:
圆形头像控件,在上传头像的时候是方形的,但是加载是圆形的,这里就要用到这个控件了。

SwitchButton:
一款开关控件,用于设置免打扰、消息漫游、消息通知。

FlycoTabLayout:
首页切换的控件,又细分为SlidingTabLayout(多标签)、
CommonTabLayout(首页、底部切换)、SegmentTabLayout(分类切换)。

在该项目中首页使用CommonTabLayout,可以添加消息小红点,或者数量。
在添加好友或者群的页面使用SegmentTabLayout切换。

aurora-imui:
该框架是极光开发的一款聊天 UI 视图,分两个部分,一个是聊天的对话列表,另一个是输入的消息类型,现在支持语音、图片、文字、视频。
目前对话列表的布局已经支持自定义的 ViewHolder

lottie-android:
一款动画库,在自动登陆的页面可以看到效果。

  • 后期需要增加的库
    可能不仅限于这几种库,目前能想到的这几种是需要加的

JShare:
极光分享。资讯分享、动态分享、图文分享、链接分享等

JAnalytics:
极光统计,渠道统计,获取用户数据,分析用户画像的工具。

Refresh下拉刷新:
用于动态的刷新和加载。

Retrofit:
用于做网络请求,请求加载资讯,或者动态。

传送

如果想测试聊天效果的话也可以添加 1006 机器人。
通过联系人-新朋友-好友推荐找到该联系人。
如果该账号在线的话可以默认通过好友,并且默认自动回复。
目前在线的状态是我这边手动需要登录在线。所以在通过时间上暂且无法保证。

最后要感谢极光提供的 SDK,包括一些参考 Demo 和相关技术文档支持。
项目中用的 icon 基本上都来自阿里巴巴矢量图,感谢相关作者的贡献

Java即时通讯(IM)——陌生人交友了解相关推荐

  1. Java聊天室程序源码 Java即时通讯代码 Java局域网聊天系统 Java即时通讯 Java聊天系统

    Java聊天室程序源码 Java即时通讯代码 Java局域网聊天系统  Java即时通讯 Java聊天系统 public Swingtest002() {// 设置标题setTitle("请 ...

  2. java即时通讯源码 IM即时通讯源码 IM源码 安卓苹果原生APP源码 带音视频

    基本功能说明及介绍: 客户端:安卓,苹果,pc,web 开发语言: Java OC C# 运行软件:eclipse Java xcode 数据库:mongodb 环境:Linux Centos 7以上 ...

  3. emqttd java 即时通讯_使用Emqttd搭建一个聊天室

    前言 由于项目需要,目前需要使用Emqttd搭建一个聊天室,自己写了个demo,特记录下来 代码 使用IDEA搭建一个Spring Boot工程 pom.xml文件,此处我只列出dependencie ...

  4. Java即时通讯,含小米、腾讯、阿里

    RPC概述 RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样. 现在互联网应用的量级越 ...

  5. im聊天软件Java即时通讯源码原生四端

    基本功能说明及介绍: 客户端:安卓,苹果,(可赠送web,pc) 开发语言: Java OC C# 运行软件:eclipse Java xcode 数据库:mongodb 环境:Linux Cento ...

  6. java即时通讯框架_Spring Boot 开发私有即时通信系统(WebSocket)

    1/ 概述 利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天. 2/ 所需依赖 Spring Boot 版本 ...

  7. java即时通讯im聊天源码,dubbo即时通讯im聊天源码,netty即时通讯im聊天源码,springboot即时通讯im聊天源码

    [后端涉及的框架和技术]:springboot2.1.1, dubbo2.7.3(很新),netty4,mysql,redis,mongodb,fastdfs,oauth2,swagger2,myba ...

  8. emqttd java 即时通讯_[emqttd] (EMQ)

    [emqttd] (EMQ)是采用Erlang语言开发,全面支持MQTT V3.1.1协议,支持集群和大规模连接的开源MQTT消息服务器. [emqttd]致力于发布一个基于Erlang/OTP语言平 ...

  9. 即时通讯APP开发费用成本多少?

    移动互联网的发展,为人们的通讯交流提供了非常多的便利,一些即时通讯APP的出现,将人与人的距离再一次缩短.通过即时通讯APP软件,人们可以随时随地了解身边发生的新鲜事物,以及和朋友探讨各类趣事,甚至可 ...

最新文章

  1. python处理视频动漫化_用Python实现抖音上的“人像动漫化”特效,原来这么简单...
  2. python开发教程视频教程_金牌大神讲师Alex带你学Python 153节课带你轻松学透Python开发视频教程_IT教程网...
  3. PERL 语言中的q,qw,qr,qx,qq......符号用法总结
  4. c语言不用switch做计算器,超级新手,用switch写了个计算器程序,求指导
  5. JS中全局对象的属性和方法
  6. JS基础语法(05)-隐式数据类型转换
  7. 【蔡勒公式 】根据给定的年月日求出对应星期几
  8. php源码查找替换,php 替换模板中的 PHP源码标签字符方法
  9. .net core 装了没生效_王者荣耀:辅助装出现惊天bug?辅助光环对自己无效?
  10. P2240 【深基12.例1】部分背包问题
  11. github ssh密钥_如何使用SSH密钥在一台机器上管理多个GitHub帐户
  12. 清北学堂 清北-Day1-R1-Count
  13. java控制台打印输出改个颜色吧
  14. 【Arduino基础教程】PM2.5粉尘检测传感器
  15. Linux安装java(jdk8)
  16. Docker Daemon和Docker Client关系
  17. Python实现遗传算法(GA)+支持向量回归机(SVR)
  18. Ping通Tlenet不通,如何解决?
  19. 前端状态机:XState 首个中文文档上线了
  20. Gitlab关闭开放注册功能

热门文章

  1. SQL去掉字段中的特殊字符
  2. 【luogu CF685B】Kay and Snowflake(树的重心)
  3. 用计算机弹出暗影刺客,流放之路欺诈者混沌开荒攻略 暗影刺客BD混沌法术
  4. python简单心形代码爱情闪字_寄语大全之qq空间伤感寄语闪字
  5. 【Web】HTML学习笔记
  6. 什么时候发布华为鸿蒙os,华为鸿蒙OS什么时候发售 华为鸿蒙harmonyOS发布会配置价格上市时间-游侠手游...
  7. 科技类论文常用(经典)单词、词组、描述汇总【高级】
  8. JSON的三种解析方式以及JSONObject、JSONArray区别
  9. HTML CSS 简介
  10. 弘辽科技:淘宝联盟入驻条件是什么?商家入驻需要什么资质?