背景调研

业务需求:涉及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,还得先上架这简直离谱,上架优先于功能开发太恶心的事,虽然提供了不上架申请的渠道也很麻烦。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐