一套包含了社区匹配聊天以及语音互动直播相关的社交系统模板项目

社交模板项目

一套包含了社区匹配聊天语音以及直播相关的社交系统模板项目,包括服务器端以及 Android 客户端

项目资源均来自于互联网,如果有侵权请联系我

背景及选型

一直以来都是标榜自己是一个喜欢开源的程序猿,一直想做一款能够被大家认同的开源项目,也是想提供给广大的新手程序猿一个比较完整系统的社交系统以供参考,因此有了这一套社交系统模板项目,
当前模板项目主要功能可以看下边的 功能与TODO

在实现社交相关项目时,少不了 IM 及时聊天功能,这里选择了自己比较熟悉的环信三方 SDK,环信 IMSDK 能够比较方便的实现自定义扩展功能,比如会话扩展,消息扩展等,消息效果可以看下方 项目截图

通话方面这里选择了声网提供的服务,看了下他们提供的功能还是比较多的,这里主要用到了语音通话,以及变声效果处理,感觉集成还是比较方便的,之前没用过的情况下,其实两天就搞定了 1V1 通话和多人互动通话的功能,他们还提供了更多场景使用,比如教育,直播等,更多功能大家可以搜索他们官网查看,通话效果可以看下方 项目截图

开发环境

项目基本属于在Android开发环境下开发,全局使用Kotlin语言,项目已经适配Android6.x以上的动态权限适配,以及7.x的文件选择,和8.x的通知提醒,10.x的文件选择等;

  • 开发系统:Mac OS 11.1
  • 开发工具:Android Studio 4.2
  • 打包工具:Gradle 4.2.0
  • 开发语言:Kotlin 1.4.32

项目模块儿

  • app是项目主模块儿,这部分主要包含了项目的业务逻辑,比如匹配、内容发布,信息展示等
  • vmcommon是项目基础模块儿,这部分主要包含了项目的基类封装,依赖管理,包括网络请求,图片加载等工具类
  • vmim聊天与通话模块儿,这是为了方便大家引用到自己的项目中做的一步封装,不用再去复杂的复制代码和资源等,只需要将vmimmodule导入到自己的项目中就行了,具体使用方式参见项目app模块儿;

功能与TODO

IM部分功能

  • [x] 链接监听
  • [x] 登录注册
  • [x] 会话功能
    • [x] 置顶
    • [x] 标为未读
    • [x] 删除与清空
    • [x] 草稿功能
  • [x] 聊天功能
    • [x]消息类型
      • [x] 文本消息
      • [x] 图片消息
        • [x] 查看大图
        • [x] 保存图片
    • [x] 消息处理
      • [x] 删除
      • [x] 撤回
      • [x] 复制(仅文本可复制)
    • [x] 昵称头像处理(通过回调实现)
    • [x] 头像点击(回调到 App 层)
    • [x] 语音实时通话功能
      • [x] 1V1音频通话
      • [x] 静音、扬声器播放
      • [x] 音效变声
  • [x] 解忧茶室
    • [x] 创建房间
    • [x] 发送消息
      • [x] 文本消息
      • [x] 鼓励消息
    • [x] 上下麦处理
    • [x] 音效变声(彩蛋功能)

App部分功能

  • [x] 登录注册(包括业务逻辑和 IM 逻辑)
  • [x] 首页
    • [x] 自己的状态
    • [x] 拉取其他人的状态信息
    • [x] 心情匹配
    • [x] 解忧聊天室
  • [x] 聊天(这里直接加载 IM 模块儿)
  • [x] 发现
    • [x] 发布内容
    • [x] 喜欢操作
    • [x] 详情展示
      • [x] 喜欢操作
      • [ ] 评论获取
      • [ ] 添加评论
  • [x] 我的
    • [x] 个人信息展示
    • [x] 上传头像、封面
    • [x] 设置昵称、签名、职业、地址、生日、性别等
    • [x] 邮箱绑定
    • [x] 个人发布与喜欢内容展示
  • [x] 设置
    • [x] 个人信息设置
    • [x] 深色模式适配
    • [x] 通知设置
    • [x] 资源加载设置
    • [x] 关于
      • [x] 检查更新
      • [x] 问题反馈
    • [x] 环境切换
    • [x] 退出

发布功能

  • [x] 多渠道打包
  • [x] 签名配置
  • [x] 开发与线上环境配置
  • [x] 敏感信息保护

配置运行

  1. 首先复制config.default.gradleconfig.gradle
  2. 配置下config.gradle内相关字段
  3. 正式打包需要自己生成签名文件,然后修改下config.gradlesignings签名信息
  4. 需配合服务器端一起使用,修改上边config.gradle配置文件的baseDebugUrlbaseReleaseUrl

参与贡献

如果你有什么好的想法,或者好的实现,可以通过下边的步骤参与进来,让我们一起把这个项目做得更好,欢迎参与 😁

  1. Fork本仓库
  2. 新建feature_xxx分支 (单独创建一个实现你自己想法的分支)
  3. 提交代码
  4. 新建Pull Request
  5. 等待Review & Merge

其他

下载体验
这就是一个使用当前模板运营的一个项目

项目截图

这里简单截取了几个界面,更多功能自己去发现吧

matchHome matchExplore matchMsg matchMine matchChat matchChatFast matchCall matchAbout matchInfo matchAbout

交流

QQ群: 901211985 个人QQ: 1565176197

QQ 交流群 个人 QQ

支持赞助

如果你觉得当前项目帮你节省了开发时间,想要支持赞助我的话👍,可以扫描下方的二维码打赏请我吃个鸡腿🍗,你的支持将鼓励我继续创作👨‍💻‍,感谢☺️

支付宝捐赠 微信捐赠

vmtemplateserver

一个使用Eggjs开发的服务器模板项目,包含了比较完整的用户信息处理、角色管理、分类、职业、发帖、匹配、评论、关注、喜欢 等功能

运行本项目前确认你已配置好nodejs开发环境,并且已安装mongodb,可以参考一下两篇文章:

本地开发调试

# 创建本地运行配置文件 config.local.js 修改配置文件内相关信息为自己的
$ cp config.local.template.js config.local.js
# 终端运行
$ npm i
$ npm run dev
$ open http://localhost:5920/

# 也可以导入`WebStorm`进行编译运行,工具栏选择 `Run->Edit Configurations` 添加 `npm` 运行,其中 `Scripts` 填 `debug`or`dev`

构建部署

# 创建发布运行配置文件 config.prod.js 修改配置文件内相关信息为自己的
$ cp config.prod.template.js config.prod.js
# 安装发布依赖
$ npm install --production
# 打包发布代码
$ tar -czvf vmtemplateserver.tgz .

# 将打包的代码上传到要发布的服务器上,解包,运行
$ tar -xzvf vmtemplateserver.tgz .
$ ./vmrun.sh

因为管理端还没有开发完成,所以服务器首次部署完成,需要调用 http://ip:port/v1/admin/init 接口进行数据初始化,等管理端完成之后,登录管理端会自动初始化操作

域名配置

项目部署完成之后,默认只能通过ip+port来访问,一般正常项目都需要配置访问域名,这里我使用nginx说下我的配置,不一样的同学可以自己搜索所用服务器相关配置

# 首先进到 nginx 配置目录下,我的是 /etc/nginx/sites-available 下
$ cd /etc/nginx/sites-available
# 新建并编辑配置,这个名字可以随便取,内容参考下方配置
$ vim template
# 保存之后需要连接当前配置到 /etc/nginx/sites-enabled/ 下
$ ln -s /etc/nginx/sites-available/template /etc/nginx/sites-enabled/template
# 重启 nginx
$ /etc/init.d/nginx restart

nginx 代理配置

这里开启了https访问,证书用的是阿里云免费证书,一年有效期,到期需要自己更新,怎么申请免费证书不再赘述,记得修改其中的域名为自己的

server {
        listen 80;
        server_name 你自己的域名;

        rewrite ^(.*)$ https://$host$1 permanent;
}
server {
        listen 443 ssl;
        server_name 你自己的域名;

        ssl on;

        ssl_certificate         /var/www/certs/你自己的证书.pem;
        ssl_certificate_key     /var/www/certs/你自己的证书.key;
        ssl_ciphers             ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        location / {
                proxy_set_header   Upgrade $http_upgrade;
                proxy_set_header   Connection "upgrade";
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header   Host $http_host;
                proxy_set_header   X-Forwarded-Proto $scheme;
                proxy_pass         http://127.0.0.1:5920;
        }
}

调试接口

这里方便大家调试,我把我的 postman 数据导出来了,大家可以导入到自己 postman 进行测试,接口文件放在了项目根目录下 vmtemplateserver.postman.json
不会用 postman 的话自行搜索下吧,很简单很方便

这里需要注意导入的只是接口数据,环境配置需要你自己进行配置,主要就是 {{host}} {{Authorization}} 这两个参数

更多

交流

QQ群: 901211985 个人QQ: 1565176197

QQ 交流群 个人 QQ

支持赞助

如果你觉得当前项目帮你节省了开发时间,想要支持赞助我的话👍,可以扫描下方的二维码打赏请我吃个鸡腿🍗,你的支持将鼓励我继续创作👨‍💻‍,感谢☺️

支付宝捐赠 微信捐赠
穿裤衩闯天下

穿裤衩闯天下

👨‍🌾‍爱生活 👨‍💻‍爱编程 🎨爱画画 🍙爱动漫 🎮爱游戏 👨‍💻‍Android 攻城狮 😎个人名言:慢慢来,一步一个脚印 👣
地球

@吐槽交流