“当前登录者”用户信息的排查
=================
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:当前用户信息];
“单聊”、“系统消息”会话,用户信息的排查
========================
排查点一:
在用户信息提供者代理函数 中添加断点,针对用户信息有问题的 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;
(注意:用户信息提供者代理设置,见技术文档:融云开发者文档)
排查点二:
在项目工程中全局搜索下面接口,在所有调用下面接口的地方添加断点,针对用户信息有问题的 userId排查传参,看一下使用RCUserInfo 对象中用户信息是否正确。
/*!
更新SDK中的用户信息缓存
@param userInfo 需要更新的用户信息
@param userId 需要更新的用户ID
@discussion 使用此方法,可以更新SDK缓存的用户信息。 但是处于性能和使用场景权衡,
SDK不会在当前View立即自动刷新(会在切换到其他View的时候再刷新该用户的
显示信息)。 如果您想立即刷新,您可以在会话列表或者会话页面reload强制刷新。
*/
- (void)refreshUserInfoCache:(RCUserInfo *)userInfo withUserId:(NSString *)userId;
(注意: 建议创建工具类,只在这个工具类中调用刷新用户信息的方法,便于排查问题。)
排查点三:
在接收消息监听代理方法这添加断点,打印 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 监听消息接收,而不要使用此监听器。)
“群组成员”用户信息的排查
(**注意:**如果没有使用群名片代理函数,参考上面单聊的排查步骤)
排查点一:
在群名片信息提供者代理函数中添加断点,针对对应群组中用户信息有问题的 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;
(**注意:**建议创建工具类,只在这个工具类中调用刷新群名片信息的方法,便于排查问题。)
“群组信息”的排查
============
排查点一:
在群组信息提供者代理函数中添加断点,针对群组信息有问题的 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;
(**注意:**建议创建工具类,只在这个工具类中调用刷新群组信息的方法,便于排查问题。)