当前知识库站点已不再维护。请移步新版知识库:https://help.rongcloud.cn/

通知栏显示内容有误的排查

应用退到后台,弹出通知栏内容有问题的排查步骤
发布时间: 2021-09-29 12:01

回答:

通知栏类型和显示内容的介绍


通知栏显示内容分两种即“本地通知”和“远程推送”,区别如下:(很重要,需要明确通知栏的类型,下面的排查步骤才会奏效

    远程推送和本地通知的区别:http://support.rongcloud.cn/kb/Mjk4 

通知栏内容一般分两部分即“标题”和“内容”。

    下面会分别针对“本地通知”和“远程推送”的“标题”和“内容”进行排查说明,对于具体需要排查的点,给出了加粗的红色标记。


本地通知

关于“标题”有误的排查:

       本地通知的标题会显示发送消息者的昵称(群聊显示群名称),如果昵称(群名称)有误,大概率是本地用户信息(群信息)缓存中存储的昵称有误,排查步骤如下:

    1.1、如果使用了用户信息提供者函数,在下面代理函数中添加断点,对返回的 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;

    1.2、如果使用了用户信息提供函数,群名称有误,对返回的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;

2. 如果没有走上面的代理函数,那么有以下两种情况:

    a. 用户信息缓存中已经有发送者的用户信息,可以调用接口获取用户信息排查,如果有误可以直接更新缓存信息

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;


    b. 消息中携带了用户信息(群信息),且携带的用户信息对象的 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;


关于“内容”有误的排查:

本地通知的内容会展示消息基类中下面方法返回的内容。

1. 如果是 SDK 内置的消息:

    针对不同的消息类会有不同的设置。例如:文本消息(RCTextMessage),这个方法会返回文本消息 content 属性的值,也就是返回文本消息的内容。图片消息会设置为“[图片]”。如果是文本消息的本地通知有问题,大概率是消息内容有误


2. 如果是自定义消息:

    排查自定义消息类中下面方法的返回值是否有误

/*! 
返回在会话列表和本地通知中显示的消息内容摘要 

@return     会话列表和本地通知中显示的消息内容摘要 
@discussion 如果您使用IMKit,当会话的最后一条消息为自定义消息时,
            需要通过此方法获取在会话列表展现的内容摘要; 当App在后台收到消息时,
            需要通过此方法获取在本地通知中展现的内容摘要。 
*/
- (NSString *)conversationDigest;


远程推送

关于“标题”有误的排查:

1. 如果是 SDK 内置消息:

    远程推送的标题会展示发送者在融云服务器获取 token 时候设置的昵称,这部分信息应该是由开发者的应用服务器调融云 Server API 时候设置的,如果昵称显示有误,参考下面文档排查更新

获取信息:https://doc.rongcloud.cn/imserver/server/v1/user/get

修改信息:https://doc.rongcloud.cn/imserver/server/v1/user/modify


2. 如果是自定义消息:

     默认是没有标题的,需要通过设置 pushConfig 的 pushTitle 来实现。

pushConfig 设置文档


关于“内容”有误的排查:

远程推送的内容会展示发送消息时候设置的 pushContent 值的内容。

1. 如果是 SDK 内置的消息:

    针对不同的消息类会有不同的设置,例如:文本消息的 pushContent 会设置为文本消息 content 属性的值,也就是文本消息的内容。图片消息会设置为“[图片]”。如果是文本消息的远程推送有问题,大概率是消息内容有误


2. 如果是自定义消息:

    存在下面两种情况,如果通知栏内容有误,排查发送消息时候设置的 pushContent 或 pushConfig

        a. 在发送消息时候如果不设置 pushContent,就不会发送远程推送。

        b. 如果设置 pushContent,就是接收方弹出的远程推送通知栏的内容,也可以通过设置 pushConfig 实现。

        pushConfig 设置文档