背景调研
业务需求:涉及IM和音视频;
方案有哪些:
1.主流的第三方SDK
声网、腾讯音视频、阿里、网易、七牛等等…
优点:技术方案成熟 接口规范统一 通道稳定 技术支持快 安全 支持跨端的集成 直接集成UI二次开发…
缺点:太贵,对于一些有预算和个人产品不友好
普通要求的方案
对于涉及IM为核心运营业务的公司来说都会选择这些大厂的SDK。
对于只要求功能,对预算成本严格,开发成本低,还要快,不要求性能的话有哪些办法?
方案:通过webRtc点对点的通信方式,需要部署信令服务和Turn服务。
方案存在的问题:如果是使用在原生项目中可以集成,但是在跨端方案中缺少插件和完整的通道服务,开发起来十分的困难,工作量大,开发成本高,不适合外包项目。
探索
想寻找一种折中的方案,支持平台丰富,又开源免费的方案。
如果采用uniapp的跨端方案,要解决原生插件的问题,要同时开发Android和IOS端的原生插件,这个工作量非常大,且得同时熟悉双端的原生开发。
那有没有免费的插件?
打开插件市场是这样的:
居然还有人买了
还是太贵,只想白嫖。继续搜免费的
但是看下来要么就是评论区很多问题,或者不支持跨端的直接集成,也没有开源的Demo。
继续搜索,发现了两个比较靠谱的看上去
野火
OpenIM
支持的平台很丰富,而且还是用go开发的
使用
从文档上看两者的功能都差不多,OpenIM看上去更专业高大上一点,支持docker部署还是用go写的,开发成本较大,两者都支持uniapp的插件,野火有UTS插件,这倒是难得,还支持鸿蒙,从长远角度考虑这是一个很大的优势,毕竟鸿蒙5.0以上就不再支持APK编译了。但从UI和文档规范上看后者更胜一筹。
野火
野火存在普通版和专业付费版,具体文档上已经说明,扫码下载的是专业版,开源的DEMO是普通版本,两者可以互相发送消息但是无法进行音视频通话。
运行官方提供的uniappDemo,需要自定义基座,运行的界面如下,并且在两端可以进行视频通话。
初步使用并没有特别的卡顿。
部署服务
需要部署三个服务,IM服务、应用服务、Turn服务,IM服务用于消息的转发,应用服务用于登录等功能,Turn用于P2P的内网穿透。
1.IM服务
tar -xzvf distribution-1.3.2-bundle-tar.tar.gz
tar -xzvf app-server-release-latest.tar.gz
进入bin目录执行
sh ./wildfirechat.sh
nohup java -jar app-0.xx.jar 2>&1 &
http://${服务器的IP}:8888/
默认使用的是h2的数据库,要切换到mysql,修改config中的文件,配置Mysql的连接和登录信息,修改数据库类型。
修改完重新运行会自动建表wfchat
到此IM服务部署完成了。
2.应用服务部署
运行nohup java -jar app-0.68.jar 2>&1 &
java -jar app-0.68.jar
开放8888端口
应用服务器返回OK说明部署正确,实际还需要修改登录时的验证码配置;
数据库要手动创建,官方默认的是appdata,运行项目后会自动建表。
登录成功后一直显示正在连接…,不知道什么原因
adb logcat | grep mars 产看手机端日志
发现是连接的问题,要修改IM中config的配置,这里要填写服务器的公网IP
到此两个服务部署成功了,客户端运行界面正常。
推送的问题
上面的两个服务部署完成后就可以正常使用,但缺失一个重要的功能就是推送。
先放一张uniapp文档中的推送流程图
对于APP在线的状态下,推送不需要走厂商的通道,所以在uniapp集成push后在后台发送,如果APP在前台的话是可以收到通知的,离线的情况下还是需要走厂商的通道。
走厂商的通道过于麻烦,要分别去申请而且还有限制,比如oppo,还得先上架这简直离谱,上架优先于功能开发太恶心的事,虽然提供了不上架申请的渠道也很麻烦。