头像和昵称显示有误的排查方法

使用融云 SDK 的 IMKit 库,显示的头像和昵称如果有问题,请参考下面思路排查。
发布时间: 2021-09-18 11:01

回答:

“当前登录者”用户信息的排查

1、在执行 RCIM 类设置 currentUserInfo 属性代码添加断点,排查设置的 RCUserInfo 对象中的用户信息是否正确。

/*!
  当前登录的用户的用户信息 
  @discussion 与融云服务器建立连接之后,应该设置当前用户的用户信息,用于SDK显示和发送。 
  @warning 如果传入的用户信息中的用户ID与当前登录的用户ID不匹配,则将会忽略。 
*/

@property (nonatomic, strong) RCUserInfo *currentUserInfo;


(注意: 设置和更新当前登录者信息,建议都是要这个属性,便于出问题后的排查。)

2、在连接融云IM  - (void)connectWithToken:(NSString *)token dbOpened:(void (^)(RCDBErrorCode code))dbOpenedBlock success:(void (^)(NSString *userId))successBlock  error:(void (^)(RCConnectErrorCode errorCode))errorBlock; 返回值 userId,请求开发者服务器返回的用户信息,存储到本地

[[RCIM sharedRCIM] setCurrentUserInfo:当前用户信息];


“单聊”、“系统消息”会话,用户信息的排查

排查点一:

    在用户信息提供者代理函数<RCIMUserInfoDataSource> 中添加断点,针对用户信息有问题的 userId,排查 block 中的 RCUserInfo 对象中的用户信息是否正确。

/*! 
  SDK 的回调,用于向 App 获取用户信息 
  @param userId      用户ID 
  @param completion  获取用户信息完成之后需要执行的Block [userInfo:该用户ID对应的用户信息] 
  @discussion        SDK通过此方法获取用户信息并显示,请在completion中返回该用户ID对应的用户信息。 
                     在您设置了用户信息提供者之后,SDK在需要显示用户信息的时候,会调用此方法,
                     向您请求用户信息用于显示。 
*/

- (void)getUserInfoWithUserId:(NSString *)userId 
                   completion:(void (^)(RCUserInfo *userInfo))completion;


(注意:用户信息提供者代理设置,见技术文档:https://doc.rongcloud.cn/im/IOS/5.X/ui/user/userinfo#%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF)


排查点二:

    在项目工程中全局搜索下面接口,在所有调用下面接口的地方添加断点,针对用户信息有问题的 userId排查传参,看一下使用RCUserInfo 对象中用户信息是否正确。

/*! 
  更新SDK中的用户信息缓存 
  @param userInfo     需要更新的用户信息 
  @param userId       需要更新的用户ID 
  @discussion         使用此方法,可以更新SDK缓存的用户信息。 但是处于性能和使用场景权衡,
                      SDK不会在当前View立即自动刷新(会在切换到其他View的时候再刷新该用户的
                      显示信息)。 如果您想立即刷新,您可以在会话列表或者会话页面reload强制刷新。 

 */
- (void)refreshUserInfoCache:(RCUserInfo *)userInfo withUserId:(NSString *)userId;


注意: 建议创建工具类,只在这个工具类中调用刷新用户信息的方法,便于排查问题。)


排查点三:

    在接收消息监听<RCIMReceiveMessageDelegate>代理方法这添加断点,打印 message.content.senderUserInfo 对象的用户信息,排查该对象的用户信息是否正确。

/*! 
  接收消息的回调方法 
  @param message     当前接收到的消息 
  @param left        还剩余的未接收的消息数,left>=0 
  @discussion        如果您设置了IMKit消息监听之后,SDK在接收到消息时候会执行此方法(无论App
                     处于前台或者后台)。 其中,left为还剩余的、还未接收的消息数量。比如刚上线
                     一口气收到多条消息时,通过此方法,您可以获取到每条消息,left会依次递减直到0。
                     您可以根据left数量来优化您的App体验和性能,比如收到大量消息时等待left为0再
                     刷新UI。 
                   
*/
- (void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left;

(注意a、不建议使用消息中携带用户信息的机制,建议改为排查点一中的用户信息提供者代理。

          b、如果您使用 IMLib,请使用 RCIMClient 中的 RCIMClientReceiveMessageDelegate 监听消息接收,而不要使用此监听器。)


“群组成员”用户信息的排查

(注意:如果没有使用群名片代理函数<RCIMGroupUserInfoDataSource>,参考上面单聊的排查步骤)


排查点一:

    在群名片信息提供者代理函数中添加断点,针对对应群组中用户信息有问题的 userId,排查 block 中的 RCUserInfo 对象中的用户信息是否正确。

/*! 
  SDK 的回调,用于向 App 获取用户在群组中的群名片信息 
  @param userId          用户ID 
  @param groupId         群组ID 
  @param completion      获取群名片信息完成之后需要执行的Block [userInfo:该用户ID在群组中对
                         应的群名片信息] @discussion 如果您使用了群名片功能,SDK需要通过您实
                         现的群名片信息提供者,获取用户在群组中的名片信息并显示。 
*/

- (void)getUserInfoWithUserId:(NSString *)userId
                      inGroup:(NSString *)groupId                   
                   completion:(void (^)(RCUserInfo *userInfo))completion;


排查点二:

    在项目工程中全局搜索下面接口,在所有调用接口的地方添加断点,针对对应群组中用户信息有问题的 userId,排查传参使用的 RCUserInfo 对象中的用户信息是否正确。

/*! 
  更新SDK中的群组信息缓存 
  @param groupInfo   需要更新的群组信息 
  @param groupId     需要更新的群组ID 
  @discussion        使用此方法,可以更新SDK缓存的群组信息。 但是处于性能和使用场景权衡,SDK不
                     会在当前View立即自动刷新(会在切换到其他View的时候再刷新该群组的显示信息)。
                     如果您想立即刷新,您可以在会话列表或者会话页面reload强制刷新。 
*/

- (void)refreshGroupInfoCache:(RCGroup *)groupInfo 
                  withGroupId:(NSString *)groupId;

(注意:建议创建工具类,只在这个工具类中调用刷新群名片信息的方法,便于排查问题。)


“群组信息”的排查

排查点一:

    在群组信息提供者代理函数<RCIMGroupInfoDataSource>中添加断点,针对群组信息有问题的 groupId,排查 block 中的 RCGroup 对象中的群组信息是否正确。

/*! 
  SDK 的回调,用于向 App 获取群组信息 
  @param groupId     群组ID 
  @param completion  获取群组信息完成之后需要执行的Block [groupInfo:该群组ID对应的群组信息] 
  @discussion        SDK通过此方法获取群组信息并显示,请在completion的block中返回该群组ID对
                     应的群组信息。 在您设置了群组信息提供者之后,SDK在需要显示群组信息的时候,
                     会调用此方法,向您请求群组信息用于显示。 
*/

- (void)getGroupInfoWithGroupId:(NSString *)groupId 
                     completion:(void (^)(RCGroup *groupInfo))completion;


排查点二:

   在项目工程中全局搜索下面接口,在所有调用接口的地方添加断点,针对群组信息有问题的 groupId,排查传参使用的 RCGroup 对象中的群组信息是否正确。

/*! 
  更新SDK中的群组信息缓存 
  @param groupInfo   需要更新的群组信息 
  @param groupId     需要更新的群组ID 
  @discussion        使用此方法,可以更新SDK缓存的群组信息。 但是处于性能和使用场景权衡,
                     SDK不会在当前View立即自动刷新(会在切换到其他View的时候再刷新该群
                     组的显示信息)。 如果您想立即刷新,您可以在会话列表或者会话页面
                     reload强制刷新。 
*/

- (void)refreshGroupInfoCache:(RCGroup *)groupInfo 
                  withGroupId:(NSString *)groupId;

(注意:建议创建工具类,只在这个工具类中调用刷新群组信息的方法,便于排查问题。)