(适用于ydm-java接口与后台,如有误入,但愿也能给您带来帮助)
引子:
涉及过3个社交项目,后宫、聊妹、蜗伴,均用的是融云作为视频聊天的第三方;实际上融云主攻IM文字聊天,后期才增加了声网的视频、音频通话,作为服务端涉及的功能也很少,只做了一些必要的;因为融云提供的和业务上关联不大,我们的业务是一对一聊天扣费,普通的文字聊天且不谈,走一条扣一次就行了,但是涉及到通话类的,服务端根本无法100%掌控App两端的结束(没电、断网等不确定因素),所以在这块业务和代码上处理的就繁琐很多。
服务端关于融云的调用:
融云提供 官方服务端demo,可以拿来直接用。
服务端文档
融云是这样描述的:
- 用户服务:从 App 服务端管理用户状态,获取身份认证令牌等。
- 群组服务:从 App 服务端管理群组成员信息。
- 聊天室服务:从 App 服务端管理聊天室信息,包括聊天室成员禁言、封禁服务。
- 消息发送服务:从 App 服务端发送各种类型消息。
- 敏感词服务:从 App 服务端管理消息敏感词服务。
- 服务端实时消息路由:提供融云服务端到 App 服务端的消息路由服务。
- 消息历史记录服务:提供 App 用户聊天消息历史记录下载服务。
- 在线状态订阅服务:提供将 App 用户的在线状态同步给开发者的应用服务器的服务。
- 其他高级 API 接口服务:如果您需要额外的服务端接口能力,请联系我们的销售团队,或提交需求工单给我们。
实际上我们只用了用户服务的一点点,其他的因为种种原因:
- 群组、聊天室;(业务不需要)
- 实时消息路由、在线状态订阅。(付费且太贵)
细读用户服务的文档可知,用户要在App端进行聊天会话需要一个标识符(token),这个token由服务端生成,代码里的做法就是在注册的时候将id、头像、昵称作为参数请求融云,得到返回值并保存;在修改资料的时候还需要更新一下头像、昵称(如果用户修改的话)。服务端就利用融云做了这一步而已,像用户封禁、黑名单均是自己的逻辑控制的,后期的话可以完全替代,但是这样做会影响可移植性(或许我是多虑了)。
另外,敏感词也可以用一用,完善应用。(比如不让用户输入QQ、微信号什么的)
服务端关于社交 聊天 的逻辑:
大体上都在 IMController 以及 ChatService 层,下面以A和B进行聊天作为示例:
- 发普通的聊天以及送礼物均是发一下走一下接口,接口里直接扣掉A的金币,根据B的分成比例给B转为人民币字段值;
- 语音、视频聊天则是A和B两端在融云提示接通时都走一次接通接口,接口做去重处理返回A和B同一个订单号,然后A和B每隔1分钟请求扣费接口,接口同样做去重处理只扣一次,并返回付费人的金币数,前端根据返回值进行判断,另外,如果A正常挂断了,也会走一次扣费接口,说白了,接口就两个,一个是创建的接口,另一个就是扣费的接口;在后期蜗伴项目中,想要达到空闲这一状态的判断,在扣费接口里多了一个值,叫做挂断,代表这个接口挂断了,A和B也就都空闲了。
写于2017/03/20。