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

区分本地通知和远程推送

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

本地通知

本地通知显示的内容一般分两部分,即“标题”和“内容”。下面会分别针对本地通知的“标题”和“内容”进行排查说明,对于具体需要排查的点,给出了加粗的红色标记。

本地通知标题有误的排查方法

  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;
      
    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. 如果没有走上面的代理函数,那么有以下两种情况:

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

      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;
      
    2. 消息中携带了用户信息(群信息),且携带的用户信息对象的 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 时候设置的,如果昵称显示有误,参考下面文档排查更新

  2. 如果是自定义消息:

    默认是没有标题的,需要通过设置 pushConfig 的 pushTitle 来实现。参考开发者文档 配置消息的推送属性

远程推送内容有误的排查方法

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

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

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

  2. 如果是自定义消息:

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

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

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

    参考开发者文档 配置消息的推送属性