更新时间: 2021-03-08

# 什么时候会弹出通知栏 ?

App 有 3 种状态,分别是 前台状态、后台活动状态、后台暂停状态。对于这 3 种状态,处理各不相同

前台状态: 顾名思义就是程序在前台可见,这时候如果收到新消息,会有铃声提示,没有通知栏

后台活动状态: 程序进入到后台后,我们设置了一个 2 分钟计时器。在超时之前都是活动状态,这时如果有人发消息,应用能够收到消息,这时会在通知栏通知,这种状态叫做本地通知

后台暂停状态: 计时器超时后,融云会断开服务器,进入到暂停状态。这时候如果有人给该用户发消息,是会走苹果的远程 push 的,会在通知栏显示通知。程序重新进入到前台状态后才会收下来消息

# 本地通知不弹出如何排查 ?

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

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

/*!
 获取用户信息
 @param userId      用户ID
 @param completion  获取用户信息完成之后需要执行的Block [userInfo:该用户ID对应的用户信息]

 @discussion SDK通过此方法获取用户信息并显示, 请在completion中返回该用户ID对应的用户信息。
 在您设置了用户信息提供者之后, SDK在需要显示用户信息的时候, 会调用此方法, 向您请求用户信息用于显示
 */
- (void)getUserInfoWithUserId:(NSString *)userId
                   completion:(void (^)(RCUserInfo *userInfo))completion;
已复制
1
2
3
4
5
6
7
8
9
10

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

/*!
 获取群组信息 
 @param groupId     群组ID
 @param completion  获取群组信息完成之后需要执行的Block [groupInfo:该群组ID对应的群组信息]

 @discussion SDK通过此方法获取用户信息并显示, 请在completion的block中返回该用户ID对应的用户信息。
 在您设置了用户信息提供者之后, SDK在需要显示用户信息的时候, 会调用此方法, 向您请求用户信息用于显示。
 */
- (void)getGroupInfoWithGroupId:(NSString *)groupId
                     completion:(void (^)(RCGroup *groupInfo))completion;
已复制
1
2
3
4
5
6
7
8
9
10

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;
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

3、是否调用以下函数,关闭了本地通知

/*!
 是否关闭所有的本地通知,默认值是NO
 
 @discussion 当App处于后台时,默认会弹出本地通知提示,您可以通过将此属性设置为YES,关闭所有的本地通知。
 */
@property(nonatomic, assign) BOOL disableMessageNotificaiton;
已复制
1
2
3
4
5
6
# 远程推送不弹出如何排查 ?

需要参考 官方文档 上传证书和添加必要的代码,上传证书后 30 分钟才会生效,生效后可以使用开发者后台 “IM 服务 -> API 调试 (opens new window) - 发送消息” 来进行消息转推送测试,通过“数据统计 - 北极星 - IM 即时通讯查询 (opens new window)”,查看该条消息的发送状态。

# pushContent 与 pushData 的区别是什么 ?

pushContent: 接收方离线时需要显示的远程推送内容

pushData: 接收方离线时需要在远程推送中携带的非显示数据,主要用于开发者使用,可以使用 json 字符串

# 点击通知栏如何跳转 ?

因为通知栏分为两种,即本地通知和远程推送,所以点击跳转方式也是不同的。可参考 知识库 (opens new window) 实现

文档是否解决您的问题 ?

如果遇到产品相关问题,您可 提交工单 寻求帮助