区分本地通知和远程推送
通知栏显示内容分两种即“本地通知”和“远程推送”(很重要,需要明确通知栏的类型,下面的排查步骤才会奏效):
本地通知问题的排查思路
-
检查用户信息或群组信息是否可以正常提供。
如果是来自单聊、讨论组的消息,在“获取用户信息”这个函数里面加断点,排查最后的返回值是否正确。
/*! 获取用户信息 @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;
-
是否重写了下面这个函数,返回值是否正确。“提示;当返回值为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;
-
是否调用了下面函数,关闭了本地通知。
/*! 是否关闭所有的本地通知,默认值是NO @discussion 当App处于后台时,默认会弹出本地通知提示,您可以通过将此属性设置为YES,关闭所有的本地通知。 */ @property(nonatomic, assign) BOOL disableMessageNotificaiton;