邀请入会

更新时间: 2026/01/06 15:49:38

网易会议组件(NEMeetingKit)为开发者提供了功能丰富、灵活易用的会议邀请系统。通过这套完整的邀请机制,您可以为用户打造流畅自然的协作体验,让参会者随时随地加入会议,提升沟通效率。本文详细介绍如何在您的应用中实现各类邀请场景。

注意事项

  • NEJoinMeetingParams 类中的 meetingNum 字段用于指定要加入的会议号。
  • NEJoinMeetingOptions 类提供了丰富的入会配置选项,您可以根据需要开启或关闭会中的各类 UI 和功能开关。
  • 实现自定义邀请功能前,请确保您的应用已正确集成网易会议组件。
  • 使用组件提供的邀请接口前,确保已完成网易会议组件的 初始化登录鉴权
  • 自定义落地页需要您自行部署和维护。

自定义邀请按钮

为了满足不同应用的 UI 需求,网易会议组件允许开发者自定义邀请入口,创造符合品牌调性的会议体验。

隐藏内置邀请按钮

当您需要实现自定义的邀请流程时,可以通过 NEMeetingOptions.noInvite 配置隐藏网易会议组件内置提供的邀请按钮:

Objective-CNEJoinMeetingOptions *options = [[NEJoinMeetingOptions alloc] init];
options.noInvite = YES; // 设置为 YES 时不显示会议中的 "邀请" 按钮

添加自定义邀请菜单

您可以添加符合自身应用风格的邀请菜单,实现个性化的邀请体验。有关菜单定制的更多详情,请参考 自定义菜单。以下代码演示如何添加一个名为 通讯录邀请 的菜单。

Objective-C// 创建更多菜单 builder
NEMenuItemListBuilder *moreMenuBuilder = [NEMenuItemListBuilder moreMenuBuilder];

// 创建邀请菜单信息,菜单文本为"通讯录邀请"、配置浅色图标与深色图标
NEMenuItemInfo *menuItemInfo = [[NEMenuItemInfo alloc] initWithTitle:@"通讯录邀请" 
                                                          lightImage:[UIImage imageNamed:@"light_icon_invite"]
                                                           darkImage:[UIImage imageNamed:@"dark_icon_invite"]];

// 创建一个单状态的菜单
// 参数说明:
// 1. itemId: 100 - 自定义菜单 ID(使用大于 100 的整数值)
// 2. VISIBLE_ALWAYS - 菜单显示条件
// 3. menuItemInfo - 上面创建的菜单信息对象
NESingleStateMenuItem *singleStateMenuItem = [[NESingleStateMenuItem alloc] 
                                              initWithItemId:100 
                                              visibility:NEMenuVisibilityAlways 
                                              itemInfo:menuItemInfo];

// 添加到更多菜单列表中
[moreMenuBuilder addMenu:singleStateMenuItem];

// 配置入会选项对象
NEJoinMeetingOptions *meetingOptions = [[NEJoinMeetingOptions alloc] init];
// 设置到会议选项中
meetingOptions.fullMoreMenuItems = [moreMenuBuilder build];

// 加入会议
[[[NEMeetingKit getInstance] getMeetingService] joinMeeting:context 
                                               params:params 
                                                 opts:meetingOptions 
                                             callback:callback];

监听自定义菜单单击

通过 setOnInjectedMenuItemClickListener 监听器捕获用户单击 通讯录邀请 的按钮事件,实现自定义的通讯录邀请逻辑:

Objective-C[[[NEMeetingKit getInstance] getMeetingService] setOnInjectedMenuItemClickListener:^(NEMenuClickInfo *clickInfo, 
                                                                             NEMeetingInfo *meetingInfo, 
                                                                             NEMenuStateController stateController) {
    if (clickInfo.itemId == 100) {
        // todo: 实现您的邀请逻辑:如拉起应用的联系人选择页面,选中联系人后,发送自定义邀请消息
    }
}];

邀请方式

在监听到邀请按钮单击后,需要根据自身需求实现自定义的邀请方式。网易会议组件不会限制邀请方式,您可根据业务需求灵活选择。如可通过发送自定义 IM 消息邀请,或调用组件内部邀请服务的接口进行邀请。

场景一:发送自定义会议邀请信息

发送邀请自定义消息

如果您的应用已经集成了即时通讯功能(以网易云信 IM 为例),可以利用现有渠道发送自定义的会议邀请消息:

Objective-C// 1. 唤起自定义通讯录
- (void)showContactSelector {
    // 跳转您自己的通讯录界面,展示联系人列表
}

// 2. 获取当前会议信息并拼接邀请消息
- (NSString *)getMeetingInviteInfo:(NEMeetingInfo *)meetingInfo {
    // meetingNum 和 password 是 NEMeetingInfo 类的字段,可直接访问
    NSString *meetingNum = meetingInfo.meetingNum;  // 直接访问会议号字段
    NSString *password = meetingInfo.password;      // 直接访问密码字段
    
    NSMutableDictionary *json = [NSMutableDictionary dictionary];
    // 通过 type 字段标识这是一条会议邀请消息
    [json setObject:@"1" forKey:@"type"];
    // 填入会议号
    [json setObject:meetingNum forKey:@"meetingNum"];
    // 填入密码(如果有)
    if (password && password.length > 0) {
        [json setObject:password forKey:@"password"];
    }
    // 可以填入其他会议信息
    // ...
    
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:json options:0 error:&error];
    if (error) {
        return nil;
    }
    
    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}

// 3. 发送自定义消息
- (void)sendMeetingInviteMessage:(NEMeetingInfo *)meetingInfo {
    NSString *rawAttachment = [self getMeetingInviteInfo:meetingInfo];
    if (rawAttachment) {
        V2NIMMessage *v2CustomMessage = [V2NIMMessageCreator createCustomMessage:@"您收到了一个会议邀请" 
                                                                   rawAttachment:rawAttachment];
        [v2MessageService sendMessage:v2CustomMessage ...];
    }
}

通过网易云信 IM 发送消息时,您可以构建一个包含会议号等信息的 JSON 格式字符串作为附件用于创建一条自定义消息,如 {"type": "1", "meetingNum": "12345678", "password": "123456"}。其中 type 为 1 表明该消息为会议邀请消息,meetingNum 为目标会议号,password 为会议密码(如有)。当接收方收到自定义消息后,按照如上的格式进行解析附件,如果能正确解析出 type 和 meetingNum,则可确定该条消息为会议邀请消息。此时可显示对话框提示用户加入会议,用户确认后,直接使用解析出的会议号和密码加入会议。更多详情,请参考 收发自定义消息

受邀方加入会议

受邀用户只需提供会议号和密码,即可快速加入会议(joinMeeting:opts:callback:):

Objective-C// 加入会议
- (void)joinMeeting:(NSString *)meetingNum password:(NSString *)password {
    NEJoinMeetingParams *params = [[NEJoinMeetingParams alloc] init];
    params.meetingNum = meetingNum;    // 使用解析出的会议号
    params.password = password;        // 使用解析出的密码
    params.displayName = @"用户昵称";   // 用户在会议中显示的名称
    
    NEJoinMeetingOptions *options = [[NEJoinMeetingOptions alloc] init];
    options.noAudio = YES;  // 入会时不开启音频
    options.noVideo = YES;  // 入会时不开启视频
    // 其他配置项...
    
    [[[NEMeetingKit getInstance] getMeetingService] joinMeeting:self.view
                                                   params:params
                                                     opts:options
                                                 callback:^(NSInteger resultCode, NSString * _Nonnull resultMsg, id _Nonnull result) {
        if (resultCode == 0) {
            // 加入会议成功
        } else {
            // 加入会议失败,可通过 resultMsg 了解失败原因
        }
    }];
}

场景二:通过网易会议组件接口邀请

网易会议组件提供了内置的邀请服务(NEMeetingInviteService),您无需额外开发即可实现高质量的邀请体验。包括邀请联系人、以及监听邀请状态、接受/拒绝邀请。如需接入,欢迎 提交工单 联系网易云信技术支持工程师开通邀请功能。

接收方设置邀请监听器

在网易会议组件初始化完成后,接收方需要设置邀请监听器(addMeetingInviteStatusListener:)才可监听到邀请状态变更事件。

Objective-C// 创建监听器对象
@interface MyInviteStatusListener : NSObject <NEMeetingInviteStatusListener>
@end

@implementation MyInviteStatusListener
- (void)onMeetingInviteStatusChanged:(NEMeetingInviteStatus)status 
                           meetingId:(NSString *)meetingId 
                          inviteInfo:(NEMeetingInviteInfo *)inviteInfo {
    // 邀请状态变更事件
}
@end

// 添加监听
MyInviteStatusListener *inviteStatusListener = [[MyInviteStatusListener alloc] init];
[[[NEMeetingKit getInstance] getMeetingInviteService] addMeetingInviteStatusListener:inviteStatusListener];

// 不需要时移除监听
[[[NEMeetingKit getInstance] getMeetingInviteService] removeMeetingInviteStatusListener:inviteStatusListener];

邀请方发送邀请

邀请方调用具体接口发送邀请。

  • 邀请单个联系人inviteContact:callback:)。

    Objective-C// userUuid 为被邀请用户的唯一标识
    [[[NEMeetingKit getInstance] getMeetingInviteService] inviteContact:userUuid 
                                                         callback:^(NSInteger resultCode, NSString * _Nonnull resultMsg, id _Nonnull result) {
        if (resultCode == 0) {
            // 邀请发送成功
        } else {
            // 邀请发送失败,可通过 resultMsg 了解失败原因
        }
    }];
    
  • 批量邀请联系人(当需要邀请多人参加会议时,可使用批量邀请接口 inviteContactList:callback: 提高效率)。

    Objective-CNSArray<NSString *> *userUuidList = @[@"user1", @"user2", @"user3"];
    [[[NEMeetingKit getInstance] getMeetingInviteService] inviteContactList:userUuidList
                                                         callback:^(NSInteger resultCode, NSString * _Nonnull resultMsg, id _Nonnull result) {
        if (resultCode == 0) {
            // 批量邀请发送成功
        } else {
            // 批量邀请发送失败,可通过 resultMsg 了解失败原因
        }
    }];
    

受邀请方接受邀请或拒绝邀请

当用户收到会议邀请推送时,可以直接通过接受邀请的方式加入会议(acceptInvite:opts:callback:):

Objective-CNEJoinMeetingParams *params = [[NEJoinMeetingParams alloc] init];
params.meetingNum = meetingInfo.meetingNum;
params.password = meetingInfo.password;
params.displayName = @"网小易";

NEJoinMeetingOptions *options = [[NEJoinMeetingOptions alloc] init];
options.noVideo = NO;  // 是否关闭视频
options.noAudio = NO;  // 是否关闭音频

[[[NEMeetingKit getInstance] getMeetingInviteService] acceptInvite:params
                                                         opts:options
                                                     callback:^(NSInteger resultCode, NSString * _Nonnull resultMsg, id _Nonnull result) {
    if (resultCode == 0) {
        // 接受邀请成功,此时会自动加入会议
    } else {
        // 接受邀请失败,显示错误原因
    }
}];

用户也可以选择拒绝会议邀请(rejectInvite:callback:):

Objective-C[[[NEMeetingKit getInstance] getMeetingInviteService] rejectInvite:meetingId
                                                    callback:^(NSInteger resultCode, NSString * _Nonnull resultMsg, id _Nonnull result) {
    if (resultCode == 0) {
        // 拒绝邀请成功
    } else {
        // 拒绝邀请失败
    }
}];

场景三:应用外链接邀请

为了打破应用边界,提高邀请的便捷性,可以实现通过链接邀请用户加入会议的功能。

自定义邀请落地页

您可以基于网易云信提供的邀请落地页源码(可以 提交工单 联系网易云信技术支持工程师获取),打造品牌专属的邀请页面:

落地页通常包含以下内容:

  • 会议基本信息(ID、主题、开始时间等):您可通过对应的 RESTFul 接口查询会议信息详情进行展示。
  • 下载应用或打开应用的按钮:提供快捷方式让用户安装应用或直接跳转至已安装的应用。
  • 会议参与者信息(可选):显示当前已加入会议的参会者列表。

如下展示了一个简单的邀请落地页:

image.png

配置邀请链接跳转

在落地页中,您需要配置 Universal Links 以允许直接跳转至您的应用。示例如下:

iOS 实现

首先,在您的应用中配置 Universal Links 支持:

  1. 在 Apple Developer 网站上为您的应用启用 Associated Domains 功能。
  2. 在您的应用的 Capabilities 中启用 Associated Domains,并添加 applinks:yourwebsite.com
  3. 在您的网站上配置 apple-app-site-association 文件。

然后,在应用中处理跳转链接:

Objective-C// 在 AppDelegate 中实现以下方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
        return [self handleUniversalLink:url];
    }
    return NO;
}

- (BOOL)handleUniversalLink:(NSURL *)url {
    // 解析 URL 参数
    NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:YES];
    NSArray *queryItems = components.queryItems;
    
    NSString *meetingNum = nil;
    NSString *password = nil;
    
    for (NSURLQueryItem *item in queryItems) {
        if ([item.name isEqualToString:@"id"]) {
            meetingNum = item.value;
        } else if ([item.name isEqualToString:@"pwd"]) {
            password = item.value;
        }
    }
    
    if (meetingNum) {
        // 创建参数并加入会议
        NEJoinMeetingParams *params = [[NEJoinMeetingParams alloc] init];
        params.meetingNum = meetingNum;
        params.password = password;
        
        [self joinMeeting:params];
        return YES;
    }
    
    return NO;
}

场景四:特殊设备邀请

网易会议组件通过 callOutRoomSystem:callback: 接口支持邀请专业会议室设备加入,实现与其他会议室硬件设备无缝对接:

Objective-CNEMeetingSystemDevice *device = [[NEMeetingSystemDevice alloc] init];
device.type = NEMeetingSipDeviceInviteProtocolTypeIP;
device.address = @"192.168.1.100"; // 设备 IP 或地址

[[[NEMeetingKit getInstance] getMeetingInviteService] callOutRoomSystem:device
                                                         callback:^(NSInteger code, NSString *message, NEMeetingSIPCallInfo *data) {
    if (code == 0 && data != nil) {
        // 呼叫成功,可获取 data 中的通话信息
        NSString *callId = data.callId;
        NSString *sipUri = data.sipUri;
        // 可以显示呼叫状态或其他相关信息
    } else {
        // 呼叫失败,显示错误信息
    }
}];
此文档是否对你有帮助?
有帮助
去反馈
  • 注意事项
  • 自定义邀请按钮
  • 隐藏内置邀请按钮
  • 添加自定义邀请菜单
  • 监听自定义菜单单击
  • 邀请方式
  • 场景一:发送自定义会议邀请信息
  • 发送邀请自定义消息
  • 受邀方加入会议
  • 场景二:通过网易会议组件接口邀请
  • 接收方设置邀请监听器
  • 邀请方发送邀请
  • 受邀请方接受邀请或拒绝邀请
  • 场景三:应用外链接邀请
  • 自定义邀请落地页
  • 配置邀请链接跳转
  • 场景四:特殊设备邀请