更新时间: 2021-03-08
# 功能描述
当 App 进入后台,SDK 处于后台活跃状态,App 会使用融云的长连接通道接收消息,此时 SDK 收到消息会弹出本地通知。
流转图:

iOS 端会在 2 分钟之后主动断开,之后的消息会通过 APNs 通道进行发送。
# 配置说明
您可以通过将此属性设置为 YES
,关闭所有的本地通知。
@property (nonatomic, assign) BOOL disableMessageNotificaiton;
已复制
1
# 回调方法
如果您设置了IMKit消息监听之后,当App处于后台,收到消息时弹出本地通知之前,会执行此方法。如果App没有实现此方法,SDK会弹出默认的本地通知提示。
如果App在后台想使用SDK默认的本地通知提醒,需要实现用户/群组/群名片信息提供者,并返回正确的用户信息或群组信息。
回调流程:

# 参数说明
参数说明:
参数 | 类型 | 说明 |
---|---|---|
message | RCMessage (opens new window) | 接收到的消息 |
senderName | NSString | 消息发送者的用户名称 |
返回参数说明
类型 | 说明 |
---|---|
BOOL | 是否弹出本地通知提示 |
当返回值为 NO 时,SDK 会弹出默认的本地通知提示;当返回值为 YES 时,SDK 针对此消息不再弹本地通知提示
# 代码示例
- (BOOL)onRCIMCustomLocalNotification:(RCMessage *)message withSenderName:(NSString *)senderName{ return YES; }
已复制
1
2
3
2
3
# 获取通知内容
# 内容格式
SDK 默认的本地通知 UILocalNotification
字段信息如下:
参数 | 类型 | 说明 |
---|---|---|
alertBody | String | 在通知栏显示的内容 |
userInfo | NSDictionary | 消息的附加信息 |
userInfo 说明:
参数 | 类型 | 说明 |
---|---|---|
cType | String | 会话类型。PR 指单聊、 DS 指讨论组、 GRP 指群组、 CS 指客服、SYS 指系统会话、 MC 指应用内公众服务、 MP 指跨应用公众服务。 |
fId | String | 消息发送者的用户 ID。 |
oName | String | 消息类型,参考融云消息类型表.消息标志;可自定义消息类型。 |
tId | String | 为 Target ID。 |
# 内容获取
点击通知栏的本地通知时,如果 App 未被系统冻结,开发者可使用下面方式获取:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { NSDictionary *msgDic = [notification.userInfo objectForKey:@"rc"]; NSString *cType = [msgDic objectForKey:@"cType"]; NSString *fId = [msgDic objectForKey:@"fId"]; NSString *oName = [msgDic objectForKey:@"oName"]; NSString *targetId = [msgDic objectForKey:@"tId"];//Target ID 。 /* cType根据得到字段转换成相应的conversationType 其余信息可根据需求进行相应的操作 */ RCConversationViewController *chat = [[RCConversationViewController alloc]init]; //设置会话的类型,如单聊、群聊、客服,为转换后的值 chat.conversationType = cType_Value; //设置会话的目标会话ID。(单聊、客服、公众服务会话为对方的ID,群聊为会话的ID) chat.targetId = targetId; //设置聊天会话界面要显示的标题 chat.title = @"想显示的会话标题"; //显示聊天会话界面 if ([self.window.rootViewController isKindOfClass: [RCDNavigationViewController class]]) { [(RCDNavigationViewController *)self.window.rootViewController pushViewController:chat animated:YES]; } else { //........ } }
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
点击通知栏的本地通知时,如果此时 App 已经被系统冻结,开发者可使用下面方式获取:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 本地通知的内容 UILocalNotification *localNotification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]; //解析同理 return YES; }
已复制
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8