General FAQ

1. 1. 如何处理信息托管

A:野火IM提供了群组托管/用户信息托管/好友关系托管。对这3种信息采用不同的处理方式

  1. 群组托管必须使用野火IM的。
  2. 用户信息托管是可选的。当选择野火IM托管时,客户可以使用服务API向野火IM同步用户信息(用户信息会自动同步到客户端)。当不托管时,可以在客户端实现UserSource,满足我们声明的接口(协议)后,IMUIKIT可以正常使用。
  3. 好友关系托管可选。当选择好友关系托管时,好友关系建议仅使用野火IM的,不建议使用同步方案。当不托管时,客户需要自己来实现好友关系的相关UI。野火IM的消息发送不依赖于好友关系。由于好友关系相对独立,因此比较容易解决UI问题。建议客户自己来处理好友关系。

    托管在野火IM是说信息托管在客户部署的野火IM服务器。我们的所有产品都是客户私有部署,跟我们没有任何的联系和依赖。

2. 2. 为什么删除了好友关系还能发送消息

A:野火IM发送消息时不对用户关系进行判断,只有有对方ID就可以发送(黑名单除外),因此陌生人或者删除好友都可以继续发送消息。如果需要控制,请在应用层进行控制。

3. 3. 为啥发送好友请求后不能再次发送好友请求

A:为了防止稍扰,野火IM对好友请求做了以下规定

  1. 如果以前没有发送过好友请求,可以发送好友请求。
  2. 如果以前发送过好友请求,对方已经接受了,可以再次发送请求。
  3. 如果以前发送过好友请求,对方没有处理,在7天内会报错已经发送过,7天之后可以再次发送。
  4. 如果以前发送过好友请求,对方拒绝,在30天内再次发送会报错已经被拒绝,30天之后可以再次发送。

4. 4. 用户信息的更新策略(用户的头像更新了,为什么我这一端还显示旧头像?)

A:用户信息不是强同步的(强同步的有消息,好友列表,各种设置),因为要实现用户信息强同步需要付出非常大的代价,因此一般是不自动更新用户信息,只有在特定的情况下才去更新。野火IM在与某用户单聊时会强制更新一下该用户的用户信息,还有在该用户的个人详情页面也会更新,基本与微信/QQ逻辑一致。如果客户需要在特定的界面更新,可以自己修改对应的客户端的源码,获取用户信息时强制更新即可。

5. 5. 消息无法删除问题(为什么消息无法删除,我重新安装应用,或者清除会话后再进入会话,被删除的消息就又出来了?)

A: 野火IM的社区版在2019.8.9号之前的版本有这个问题,请更新到这个日期之后的版本,然后配置文件中找到message.roamingmessage.remote_history_message,都配置为0,关掉这两个功能后,被删除掉的消息就不会再出现,这时消息行为就和微信一致。

6. 6. 我创建的群组,在联系人/群组界面,怎看不到?

A: 和微信逻辑一致,需要将群组保存到通讯录,才能在联系人/群组界面看到。

7. 7. 为了业务的需要,我们需要修改协议怎么办?

A: 为了保证专业版和社区版协议一致性,我们不对外提供协议修改能力。正常情况下把IM作为一个管道用,业务要跟IM解耦,不能把业务的东西加到IM中。如果是IM方面的扩展,可以给我们提需求。合理通用的需求我们都会满足,在社区版和专业版上都加上。另外我们很多实体都带有extra字段,保留给客户扩展使用,注意extra字段使用时要使用json格式,保留未来继续扩展的可能性。

8. 8. 连接状态码有什么需要注意的吗?

A: 对于特殊的几种状态码一定要处理,不然容易出严重问题。对于kConnectionStatusRejected,表明当前用户已经被禁止登录。需要跳出到登录界面;对于kConnectionStatusTokenIncorrectkConnectionStatusSecretKeyMismatchkConnectionStatusLogout,需要重新获取token,重新调用connect,也可以直接跳到登录界面让用户重新登录。出现的问题原因多种多样,一个常见的问题就是切换过服务器,客户端跟服务器密钥不匹配,另外常见于安卓,保存的token损坏等。

9. 9. 为什么有些端上有时显示不了用户名,只显示id?

A: 野火IM各个端取用户信息都是异步的接口,当有内容要显示时,比如新来一条信息,UI层会从本地数据库取该用户信息,有可能该用户信息在本地不存在,那么UI界面上由于没有取到该用户信息,就会显示用户的id,从数据库没有读取到用户信息会触发从服务器获取用户信息操作。当获取用户信息成功以后,会发送通知。UI层应该监听该通知,当收到通知时,刷新UI界面。

另外也有用户有疑问,为什么用户更新了头像,本地还是旧的头像。因为实时同步到所有的端的代价特别大,所以参考微信的机制,只有在部分界面强制刷新用户信息(比如在进入到该用户的对话界面,进入到该用户的详情界面),其他时间都只使用本地的缓存。强制刷新用户信息的办法是在获取用户信息的参数中传强制刷新参数为true。

其他信息比如群组信息等机制类似于用户信息。

10. 10. 如何购买

参考购买流程

11. 11. 客户自己部署的服务与野火官方有依赖和通信吗,野火会不会获取客户的信息。

A: 野火IM的产品都是跟野火IM官方没有任何依赖的,也没有任何数据通信。客户可以完全部署在隔绝的内网能够正常使用。社区版的所有源代码都是公开的,可以看到没有任何的对外请求,专业版也没有任何的对外访问。客户在实际使用时,可以关闭除了推送服务/机器人服务地址以外的所有出访策略。

12. 12. 客户端登录状态是-6怎么处理?

A: 首先连接状态-6对应的值是kConnectionStatusSecretKeyMismatch,根据常见问题8,是需要跳到登录界面的,需要用户重新登录。其次是-6出现的原因要检查,-6是在服务器试图解码客户端发送的数据失败返回的。每个用户在getToken时都会带上clientId,platform。服务器会为每个用户的每个设备创建一个session,客户端和服务器使用session中的密钥进行加密通讯,不匹配的原因有如下几种:

  1. 客户端登录时使用的clientid不正确(客户端去应用服务器登录,应用服务器使用这个clientid去gettoken,然后IM服务器生成或更新session),这个clientid必须调用imclient去获取,不然就会找不到session。
  2. 客户端disconnect时,参数传的是1,这个时候IM服务器会完全销毁掉这个session,当用户下次再登录时就无法解码。如果主动断开后期望保存session,参数传0.
  3. 服务器做迁移的时候,没迁移数据库,也就没有用户之前保存的session。
  4. 客户端被踢,系统设计每个平台只能有一个设备登录,当另外一个手机登录同一个账户时,之前的session会被标记为deleted状态。
  5. 客户端卸载重装,cid会变化,如果某个环境缓存了token,则登录时就找不到对应的session。

解决办法:不要在应用服务器缓存token,使用正确的clientid和platform。如果是这几种情况,可以跳到登录界面,让用户重新登录,重新登录时使用正确的clientId和platform。如果不太可能是这几种情况,可以检查服务器的t_user_session表,确认session状态。

13. 13. 如何像微信一样,把所有频道收入到一个会话中?

A: 客户端获取会话列表有指定获取那些会话类型的参数,分两次获取会话列表,首先获取除频道以外的会话列表,然后再获取频道的会话列表,把频道的会话列表构建成一个会话信息插入到普通会话列表去展示。另外在点击处理时,判断如果是这个特殊的会话,就展示频道会话列表。

14. 14. 如何实现用户在线状态,如果实现用户最后在线时间?

A: 野火IM认为在线状态是PC时代的产物,现在是移动互联网时代,手机应该是永远在线的(IM断开时,还可以走推送),在线状态是个非常鸡肋功能,就应该像微信一样默认对方就是在线的。但客户如果坚持要在线状态和最后在线时间功能也不是不可以,下面讲一下2个实现方案,也可以同时实施。

  1. 依靠野火IM的用户在线状态回调,在IM服务的配置中,设置用户在线状态回调到应用服务,应用服务记录每个用户上下线时间,然后客户端去应用服务获取对方的在线状态。
  2. 客户端主动上报上线/下线事件(程序进入前台切连上的时候上报上线事件,程序进入后台时,或者程序终结时上报下线事件),上报下线事件给应用服务,应用服务记录。然后客户端去应用服务获取对方的在线状态。

两种方式可能都有一些局限性,可以结合使用。

2018 © wildfirechat.cn 京ICP备18060403号-1 all right reserved,powered by Gitbook该文件修订时间: 2020-01-14 09:02:28

results matching ""

    No results matching ""