在用到环信的群聊会议时,开启群聊会议,默认发送一条静默消息,如果此时用户在app其他界面浏览,是不知道有邀请信息的,也就无法及时接收到对方的邀请。所以为了解决这一问题,我添加了提示框提示,用户在前台任何界面操作都能及时弹出。
1、收到群聊会议,实际上是发送了文本消息,会走下面的代理方法
#pragma mark - EMChatManagerDelegate
//收到发送的消息
- (void)messagesDidReceive:(NSArray *)aMessages
2、 在该代理方法中获取群聊会议的会话id,因为只有群聊会议才有会话id,所以根据会话id来判断当前消息是否是群聊会议
- (void)messagesDidReceive:(NSArray *)aMessages{
for (EMMessage *message in aMessages) {
[UserCacheManager save:message.ext];// 通过消息的扩展属性传递昵称和头像时,需要调用这句代码缓存
NSLog(@"message.ext == %@",message.ext);
//根据ext消息扩展去获取会话id
NSString *em_conference_id = [message.ext objectForKey:@"conferenceId"];
BOOL needShowNotification = (message.chatType != EMChatTypeChat) ? [self _needShowNotification:message.conversationId] : YES;
//如果是群聊会议
if (em_conference_id.length) {
self.emMessage = message;
//根据用户id获取昵称
NSString *name = [UserCacheManager getNickName:message.from];
//弹出提示框
UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"提示" message:[NSString stringWithFormat:@"%@邀请您加入会话...",name] preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction * sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//发送通知,打开多人会议界面
[[NSNotificationCenter defaultCenter] postNotificationName:CALL_SELECTCONFERENCECELL object:message];
}];
UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:cancelAction];
[alert addAction:sureAction];
//因为当前类是继承于NSObject,所以利用根控制器弹出
UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
[rootViewController presentViewController:alert animated:YES completion:nil];
}
}
}
总结:当收到群聊会议时,在代理方法中获取会话id,如果存在,则弹出提示框,点击确定,打开多人会议界面。
注意:如果应用退到后台,或者应用杀死后,对方发送群聊会议,此时通过发送本地通知和远程通知去实现即可。
网友评论