iOS 通知栏无法正常弹出本地通知的排查步骤

区分本地通知和远程推送

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

本地通知问题的排查思路

  1. 检查用户信息或群组信息是否可以正常提供。

    如果是来自单聊、讨论组的消息,在“获取用户信息”这个函数里面加断点,排查最后的返回值是否正确。

    /*!
     获取用户信息
     
     @param userId      用户ID
     @param completion  获取用户信息完成之后需要执行的Block [userInfo:该用户ID对应的用户信息]
     
     @discussion SDK通过此方法获取用户信息并显示,请在completion中返回该用户ID对应的用户信息。
     在您设置了用户信息提供者之后,SDK在需要显示用户信息的时候,会调用此方法,向您请求用户信息用于显示。
     */
    - (void)getUserInfoWithUserId:(NSString *)userId
                       completion:(void (^)(RCUserInfo *userInfo))completion;
    

    如果是来自群组的消息,在“获取群组信息”这个函数里面加断点,排查最后的返回值是否正确。

    /*!
     获取群组信息
     
     @param groupId     群组ID
     @param completion  获取群组信息完成之后需要执行的Block [groupInfo:该群组ID对应的群组信息]
     
     @discussion SDK通过此方法获取用户信息并显示,请在completion的block中返回该用户ID对应的用户信息。
     在您设置了用户信息提供者之后,SDK在需要显示用户信息的时候,会调用此方法,向您请求用户信息用于显示。
     */
    - (void)getGroupInfoWithGroupId:(NSString *)groupId
                         completion:(void (^)(RCGroup *groupInfo))completion;
    
  2. 是否重写了下面这个函数,返回值是否正确。“提示;当返回值为YES时,SDK针对此消息不再弹本地通知提示”

    /*!
     当App处于后台时,接收到消息并弹出本地通知的回调方法
     @param message     接收到的消息
     @param senderName  消息发送者的用户名称
     @return            当返回值为NO时,SDK会弹出默认的本地通知提示;当返回值为YES时,SDK针对此消息不再弹本地通知提示
     @discussion 如果您设置了IMKit消息监听之后,当App处于后台,收到消息时弹出本地通知之前,会执行此方法。
     如果App没有实现此方法,SDK会弹出默认的本地通知提示。
     流程:
     SDK接收到消息 -> App处于后台状态 -> 通过用户/群组/群名片信息提供者获取消息的用户/群组/群名片信息
     -> 用户/群组信息为空 -> 不弹出本地通知
     -> 用户/群组信息存在 -> 回调此方法准备弹出本地通知 -> App实现并返回YES        -> SDK不再弹出此消息的本地通知
                                                 -> App未实现此方法或者返回NO -> SDK弹出默认的本地通知提示
     您可以通过RCIM的disableMessageNotificaiton属性,关闭所有的本地通知(此时不再回调此接口)。
     
     @warning 如果App在后台想使用SDK默认的本地通知提醒,需要实现用户/群组/群名片信息提供者,并返回正确的用户信息或群组信息。
     参考RCIMUserInfoDataSource、RCIMGroupInfoDataSource与RCIMGroupUserInfoDataSource
     */
    -(BOOL)onRCIMCustomLocalNotification:(RCMessage*)message
                          withSenderName:(NSString *)senderName;
    
  3. 是否调用了下面函数,关闭了本地通知。

    /*!
     是否关闭所有的本地通知,默认值是NO
     
     @discussion 当App处于后台时,默认会弹出本地通知提示,您可以通过将此属性设置为YES,关闭所有的本地通知。
     */
    @property(nonatomic, assign) BOOL disableMessageNotificaiton;