
IM即时通讯
安全可靠、全球互通

实时音视频
流畅稳定、省钱省力
回答:
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;
(注意:建议创建工具类,只在这个工具类中调用刷新群组信息的方法,便于排查问题。)