最佳实践

记录实际应用中的最佳实践方法。

1. Q. 我们正在做红包功能,红包有已打开/未打开状态,能否修改IM消息中的已读/未读状态

A. 使用野火IM的一个原则就是:不能把业务逻辑强加于IM系统,需要保持IM服务的独立性。红包的已打开/未打开状态属于业务逻辑。应该把该状态保存在红包服务器,当红包消息显示时,如果本地没有该红包对应的状态,应该去红包服务器取回状态,取回之后判断如果已经打开,保存已打开状态下来,如果没有打开则不存储。之后每次显示红包消息时都根据本地保存的状态是否打开过,如果已经打开显示打开状态;如果未打开则再去红包服务器刷新。这样当多端登录或者更换手机后,状态也都能正确显示。(此逻辑仅供参考)

2. Q. 如何添加内置动态表情,如果收藏表情,还有如何开发应用商店。

A。 请参考小表情大世界

3. Q. 我们想做交友匹配,如何获取到所有人的在线状态。

A。 请参考在线匹配

4. Q. 多人音视频想做成微信那样,在群内显示正在通话中,可以点击加入。

A。 首先我们不认同微信的模式,当部分人在群内进行通话时,所有人都可以点击加入,带来隐私性的问题。其次如果客户坚持需要此种模式,是可以根据SDK来自定义开发的,具体实现步骤如下:

  1. 音视频通话的callsession有个发起者的属性,可以知道谁是发起者。当发起者离开时,音视频SDK也会自动选举一个发起者。
  2. 发起者可以在群内周期性的广播自定义消息,需要把消息定义为状态消息,内容是谁在通话,群内其它用户收到后可以显示正在通话中,可以点击。
  3. 当群内用户点击要求加入时,发送加入请求消息(同样需要定义为状态消息),发起者收到消息后弹出“通知XX要求加入,是否同意?”,用户点击同意调用邀请此人加入。

5. Q. 上线时要注意什么问题呢?

A. 请参考 上线检查事项

6. Q. 有种场景,需要给一个用户发消息,又不想让发送方接收到消息?

A. 这种情况下你可以定义一种自定义消息(包含是那一方要接收消息及消息的内容),如果接收用户肯定在线可以用状态消息,如果接收用户可能不在线还想收到,可以用不存储消息。然后当客户端收到后判断是那一方,如果不是接收方就抛弃,如果是接收方就调用客户端API插入想要发送的消息(文本/图标/或者其它存储类型自定义消息)并更新UI,这样就做到了给用户发消息,发送方接收不到的需求。

7. Q. 多人音视频为什么没有做得像微信那样,在群里通话,其他成员能够看到并加入?如何实现这种效果?

A. 野火这么选择是出于隐私考虑的,很多人在群里通电话并不愿意被其他人看见,更不愿意有人突然闯入。但如果想做成微信那样,也是可以的,需要您做一定的二次开发。可以自定义一个通知消息(存储状态标志位用状态消息,这样只有在线用户才能收到),会议的主持人周期性(比如3秒钟)地广播到群内,其他人在会话内收到通知后在会话内显示通话状态状态,当点击加入后给会议主持人发送一条消息,主持人直接把该用户拉入会议,或者提示用户是否同意后拉入会议。会议主持人在电话的session对象中能够获取,当主持人退出后,会重新选举出新的主持人,所以需要关注主持人变更的通知。

8. Q. 如何实现让用户主动搜索群组,如何让用户搜索某一类或者多类群组?

A. 野火IM没有提供群组搜索功能,如果需要搜索群组功能,需要客户在应用服务二次开发,直接读取IM服务的数据库,搜索t_group表即可。注意t_group表中的type是群类型,不能使用这个字段,有个_searchable字段是留给客户做搜索扩展用的,可以给这个字段设置上业务属性,比如行业性质等,然后搜索时就可以按照业务来搜索了。

SpringBoot可以配置多个数据源,如果您使用demo应用服务器,请给demo应用服务器配置上IM数据库数据源。请注意IM数据库一定要只读不能修改,如果需要修改请通过api进行修改,因为IM服务器使用了缓存,直接修改数据库容易导致数据不一致。

2018 © wildfirechat.cn 京ICP备18060403号-1 all right reserved,powered by Gitbook该文件修订时间: 2020-08-05 10:27:03

results matching ""

    No results matching ""