区分本地通知和远程推送
通知栏显示内容分两种即“本地通知”和“远程推送”,区别如下(很重要,需要明确通知栏的类型,下面的排查步骤才会奏效):
本地通知
本地通知显示的内容一般分两部分,即“标题”和“内容”。下面会分别针对本地通知的“标题”和“内容”进行排查说明,对于具体需要排查的点,给出了加粗的红色标记。
本地通知标题有误的排查方法
-
本地通知的标题会显示发送消息者的昵称(群聊显示群名称),如果昵称(群名称)有误,大概率是本地用户信息(群信息)缓存中存储的昵称有误,排查步骤如下:
-
如果使用了用户信息提供者函数,在下面代理函数中添加断点,对返回的 RCUserInfo 对象进行排查,是否 name 赋值有误。
RCIM.h /*! SDK 的回调,用于向 App 获取用户信息 @param userId 用户ID @param completion 获取用户信息完成之后需要执行的Block [userInfo:该用户ID对应的用户信息] @discussion SDK通过此方法获取用户信息并显示,请在completion中返回该用户ID对应的用户信息。 在您设置了用户信息提供者之后,SDK在需要显示用户信息的时候,会调用此方法,向您请求用户信息用于显示。 */ - (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *userInfo))completion;
-
如果使用了用户信息提供函数,群名称有误,对返回的RCGroup 对象进行排查,是否groupName赋值有误。
RCIM.h /*! 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;
-
-
如果没有走上面的代理函数,那么有以下两种情况:
-
用户信息缓存中已经有发送者的用户信息,可以调用接口获取用户信息排查,如果有误可以直接更新缓存信息
RCIM.h /*! 获取SDK中缓存的用户信息 @param userId 用户ID @return SDK中缓存的用户信息 */ - (RCUserInfo *)getUserInfoCache:(NSString *)userId; /*! 更新SDK中的用户信息缓存 @param userInfo 需要更新的用户信息 @param userId 需要更新的用户ID @discussion 使用此方法,可以更新SDK缓存的用户信息。 但是处于性能和使用场景权衡, SDK不会在当前View立即自动刷新(会在切换到其他View的时候再刷新该用户的显示信息)。 如果您想立即刷新,您可以在会话列表或者会话页面reload强制刷新。 */ - (void)refreshUserInfoCache:(RCUserInfo *)userInfo withUserId:(NSString *)userId;
缓存中已经有群组信息,可以调用接口获取群信息排查,如果有误可以直接更新缓存信息
RCIM.h /*! 获取SDK中缓存的群组信息 @param groupId 群组ID @return SDK中缓存的群组信息 */ - (RCGroup *)getGroupInfoCache:(NSString *)groupId; /*! 更新SDK中的群组信息缓存 @param groupInfo 需要更新的群组信息 @param groupId 需要更新的群组ID @discussion 使用此方法,可以更新SDK缓存的群组信息。 但是处于性能和使用场景权衡, SDK不会在当前View立即自动刷新(会在切换到其他View的时候再刷新该群组的显示信息)。 如果您想立即刷新,您可以在会话列表或者会话页面reload强制刷新。 */ - (void)refreshGroupInfoCache:(RCGroup *)groupInfo withGroupId:(NSString *)groupId;
-
消息中携带了用户信息(群信息),且携带的用户信息对象的 name 属性(群信息对象的groupName)的值有误。 在接收消息监听代理方法这添加断点,打印 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;
-
本地通知内容有误的排查方法
本地通知的内容会展示消息基类中下面方法返回的内容。
-
如果是 SDK 内置的消息:
针对不同的消息类会有不同的设置。例如:文本消息(RCTextMessage),这个方法会返回文本消息 content 属性的值,也就是返回文本消息的内容。图片消息会设置为“[图片]”。如果是文本消息的本地通知有问题,大概率是消息内容有误
-
如果是自定义消息:
排查自定义消息类中下面方法的返回值是否有误
/*! 返回在会话列表和本地通知中显示的消息内容摘要 @return 会话列表和本地通知中显示的消息内容摘要 @discussion 如果您使用IMKit,当会话的最后一条消息为自定义消息时, 需要通过此方法获取在会话列表展现的内容摘要; 当App在后台收到消息时, 需要通过此方法获取在本地通知中展现的内容摘要。 */ - (NSString *)conversationDigest;
远程推送
远程推送显示的内容一般分两部分,即“推送标题”和“推送内容”。下面会分别针对远程推送的“标题”和“内容”进行排查说明,对于具体需要排查的点,给出了加粗的红色标记。
远程推送标题有误的排查方法
-
如果是 SDK 内置消息:
远程推送的标题会展示发送者在融云服务器获取 token 时候设置的昵称,这部分信息应该是由开发者的应用服务器调融云 Server API 时候设置的,如果昵称显示有误,参考下面文档排查更新
-
如果是自定义消息:
默认是没有标题的,需要通过设置 pushConfig 的 pushTitle 来实现。参考开发者文档 配置消息的推送属性。
远程推送内容有误的排查方法
远程推送的内容会展示发送消息时候设置的 pushContent 值的内容。
-
如果是 SDK 内置的消息:
针对不同的消息类会有不同的设置,例如:文本消息的 pushContent 会设置为文本消息 content 属性的值,也就是文本消息的内容。图片消息会设置为“[图片]”。如果是文本消息的远程推送有问题,大概率是消息内容有误
-
如果是自定义消息:
存在下面两种情况,如果通知栏内容有误,排查发送消息时候设置的 pushContent 或 pushConfig
-
在发送消息时候如果不设置 pushContent,就不会发送远程推送。
-
如果设置 pushContent,就是接收方弹出的远程推送通知栏的内容,也可以通过设置 pushConfig 实现。
参考开发者文档 配置消息的推送属性。
-