邀请入会
更新时间: 2026/01/06 15:49:38
网易会议组件(NEMeetingKit)为开发者提供了功能丰富、灵活易用的会议邀请系统。通过这套完整的邀请机制,您可以为用户打造流畅自然的协作体验,让参会者随时随地加入会议,提升沟通效率。本文详细介绍如何在您的应用中实现各类邀请场景。
注意事项
NEJoinMeetingParams类中的meetingNum字段用于指定要加入的会议号。NEJoinMeetingOptions类提供了丰富的入会配置选项,您可以根据需要开启或关闭会中的各类 UI 和功能开关。- 实现自定义邀请功能前,请确保您的应用已正确集成网易会议组件。
- 使用组件提供的邀请接口前,确保已完成网易会议组件的 初始化 和 登录鉴权。
- 自定义落地页需要您自行部署和维护。
自定义邀请按钮
为了满足不同应用的 UI 需求,网易会议组件允许开发者自定义邀请入口,创造符合品牌调性的会议体验。
隐藏内置邀请按钮
当您需要实现自定义的邀请流程时,可以通过 NEMeetingOptions.noInvite 配置隐藏网易会议组件内置提供的邀请按钮:
JavaNEJoinMeetingOptions options = new NEJoinMeetingOptions();
options.noInvite = true; // 设置为 true 时不显示会议中的 "邀请" 按钮
添加自定义邀请菜单
您可以添加符合自身应用风格的邀请菜单,实现个性化的邀请体验。有关菜单定制的更多详情,请参考 自定义菜单。以下代码演示如何通过 NEMenuItemListBuilder 在 更多 中添加一个名为 通讯录邀请 的菜单。
Java// 创建更多菜单 builder
NEMenuItemListBuilder moreMenuBuilder = NEMenuItemListBuilder.moreMenuBuilder();
// 创建邀请菜单信息,菜单文本为"通讯录邀请"、配置浅色图标与深色图标
NEMenuItemInfo menuItemInfo = new NEMenuItemInfo("通讯录邀请", R.drawable.light_icon_invite, R.drawable.dark_icon_invite);
// 创建一个单状态的菜单
// 参数说明:
// 1. ID: 100 - 自定义菜单 ID(使用大于 100 的整数值)
// 2. VISIBLE_ALWAYS - 菜单显示条件
// 3. menuItemInfo - 上面创建的菜单信息对象
NESingleStateMenuItem singleStateMenuItem = new NESingleStateMenuItem(
100,
NEMenuVisibility.VISIBLE_ALWAYS,
menuItemInfo
);
// 添加到更多菜单列表中
moreMenuBuilder.addMenu(singleStateMenuItem);
// 配置入会选项对象
NEJoinMeetingOptions meetingOptions = new NEJoinMeetingOptions();
// 设置到会议选项中
meetingOptions.fullMoreMenuItems = moreMenuBuilder.build();
// 加入会议
NEMeetingKit.getInstance().getMeetingService().joinMeeting(context, params, meetingOptions, callback);
监听自定义菜单单击
通过 setOnInjectedMenuItemClickListener 监听器捕获用户单击 通讯录邀请 的按钮事件,实现自定义的通讯录邀请逻辑:
JavaNEMeetingSDK.getInstance().getMeetingService().setOnInjectedMenuItemClickListener(new NEMeetingOnInjectedMenuItemClickListener() {
@Override
public void onInjectedMenuItemClick(Context context, NEMenuClickInfo clickInfo,
NEMeetingInfo meetingInfo, NEMenuStateController stateController) {
if (clickInfo.itemId == 100) {
// todo: 实现您的邀请逻辑:如拉起应用的联系人选择页面,选中联系人后,发送自定义邀请消息
}
}
});
邀请方式
在监听到邀请按钮单击后,需要根据自身需求实现自定义的邀请方式。网易会议组件不会限制邀请方式,您可根据业务需求灵活选择。如可通过发送自定义 IM 消息邀请,或调用组件内部邀请服务的接口进行邀请。
场景一:发送自定义会议邀请信息
发送邀请自定义消息
如果您的应用已经集成了即时通讯功能(以网易云信 IM 为例),可以利用现有渠道发送自定义的会议邀请消息:
Java// 1. 唤起自定义通讯录
void showContactSelector() {
// 跳转您自己的通讯录界面,展示联系人列表
}
// 2. 获取当前会议信息并拼接邀请消息
String getMeetingInviteInfo(NEMeetingInfo meetingInfo) throws JSONException {
// meetingNum 和 password 是 NEMeetingInfo 类的字段,可直接访问
String meetingNum = meetingInfo.meetingNum; // 直接访问会议号字段
String password = meetingInfo.password; // 直接访问密码字段
JSONObject json = new JSONObject();
// 通过 type 字段标识这是一条会议邀请消息
json.put("type", "1");
// 填入会议号
json.put("meetingNum", meetingNum);
// 填入密码(如果有)
if (password != null && !password.isEmpty()) {
json.put("password", password);
}
// 可以填入其他会议信息
// ...
return json.toString();
}
// 3. 发送自定义消息
void sendMeetingInviteMessage(NEMeetingInfo meetingInfo) {
try {
String rawAttachment = getMeetingInviteInfo(meetingInfo);
V2NIMMessage v2CustomMessage = V2NIMMessageCreator.createCustomMessage(text, rawAttachment);
v2MessageService.sendMessage(v2CustomMessage, ...);
} catch (JSONException e) {
// 处理 JSON 异常
}
}
通过网易云信 IM 发送消息时,您可以构建一个包含会议号等信息的 JSON 格式字符串作为附件用于创建一条自定义消息,如 {"type": "1", "meetingNum": "12345678", "password": "123456"}。其中 type 为 1 表明该消息为会议邀请消息,meetingNum 为目标会议号,password 为会议密码(如有)。当接收方收到自定义消息后,按照如上的格式进行解析附件,如果能正确解析出 type 和 meetingNum,则可确定该条消息为会议邀请消息。此时可显示对话框提示用户加入会议,用户确认后,直接使用解析出的会议号和密码加入会议。更多详情,请参考 收发自定义消息。
受邀方加入会议
受邀用户只需提供会议号和密码,即可快速加入会议(joinMeeting):
Java// 加入会议
void joinMeeting(String meetingNum, String password) {
NEJoinMeetingParams params = new NEJoinMeetingParams();
params.meetingNum = meetingNum; // 使用解析出的会议号
params.password = password; // 使用解析出的密码
params.displayName = "用户昵称"; // 用户在会议中显示的名称
NEJoinMeetingOptions options = new NEJoinMeetingOptions();
options.noAudio = true; // 入会时不开启音频
options.noVideo = true; // 入会时不开启视频
// 其他配置项...
NEMeetingSDK.getInstance().getMeetingService().joinMeeting(
context,
params,
options,
new NECallback<Void>() {
@Override
public void onResult(int resultCode, String resultMessage, Void resultData) {
if (resultCode == NEMeetingErrorCode.SUCCESS) {
// 加入会议成功
} else {
// 加入会议失败,可通过 resultMessage 了解失败原因
}
}
}
);
}
场景二:通过网易会议组件接口邀请
网易会议组件提供了内置的邀请服务(NEMeetingInviteService),您无需额外开发即可实现高质量的邀请体验。包括邀请联系人、以及监听邀请状态、接受/拒绝邀请。如需接入,欢迎 提交工单 联系网易云信技术支持工程师开通邀请功能。
接收方设置邀请监听器
在网易会议组件初始化完成后,接收方需要设置邀请监听器(addMeetingInviteStatusListener)才可监听到邀请状态变更事件。
JavaNEMeetingInviteStatusListener inviteStatusListener = new NEMeetingInviteStatusListener() {
@Override
public void onMeetingInviteStatusChanged(
NEMeetingInviteStatus status, String meetingId, NEMeetingInviteInfo inviteInfo) {
// 邀请状态变更事件
}
};
// 添加监听
NEMeetingSDK.getInstance().getMeetingInviteService().addMeetingInviteStatusListener(inviteStatusListener);
// 不需要时移除监听
NEMeetingSDK.getInstance().getMeetingInviteService().removeMeetingInviteStatusListener(inviteStatusListener);
邀请方发送邀请
邀请方调用具体接口发送邀请。
-
邀请单个联系人(
inviteContact)。Java// userUuid 为被邀请用户的唯一标识 NEMeetingSDK.getInstance().getMeetingInviteService().inviteContact(userUuid, new NECallback<Void>() { @Override public void onResult(int resultCode, String resultMessage, Void resultData) { if (resultCode == NEMeetingErrorCode.SUCCESS) { // 邀请发送成功 } else { // 邀请发送失败,可通过 resultMessage 了解失败原因 } } }); -
批量邀请联系人(当需要邀请多人参加会议时,可使用批量邀请接口
inviteContactList提高效率)。JavaList<String> userUuidList = Arrays.asList("user1", "user2", "user3"); NEMeetingSDK.getInstance().getMeetingInviteService().inviteContactList(userUuidList, new NECallback<Void>() { @Override public void onResult(int resultCode, String resultMessage, Void resultData) { if (resultCode == NEMeetingErrorCode.SUCCESS) { // 批量邀请发送成功 } else { // 批量邀请发送失败,可通过 resultMessage 了解失败原因 } } });
受邀请方接受邀请或拒绝邀请
当用户收到会议邀请推送时,可以直接通过接受邀请的方式加入会议(acceptInvite):
JavaNEJoinMeetingParams params = new NEJoinMeetingParams();
params.meetingNum = meetingInfo.getMeetingNum();
params.password = meetingInfo.getPassword();
params.displayName = "网小易";
NEJoinMeetingOptions options = new NEJoinMeetingOptions();
options.noVideo = false; // 是否关闭视频
options.noAudio = false; // 是否关闭音频
NEMeetingSDK.getInstance().getMeetingInviteService().acceptInvite(
context,
params,
options,
new NECallback<Void>() {
@Override
public void onResult(int resultCode, String resultMessage, Void resultData) {
if (resultCode == NEMeetingErrorCode.SUCCESS) {
// 接受邀请成功,此时会自动加入会议
} else {
// 接受邀请失败,显示错误原因
}
}
}
);
用户也可以选择拒绝会议邀请(rejectInvite):
JavaNEMeetingSDK.getInstance().getMeetingInviteService().rejectInvite(
meetingId, // 邀请中包含的会议ID
new NECallback<Void>() {
@Override
public void onResult(int resultCode, String resultMessage, Void resultData) {
if (resultCode == NEMeetingErrorCode.SUCCESS) {
// 拒绝邀请成功
} else {
// 拒绝邀请失败
}
}
}
);
场景三:应用外链接邀请
为了打破应用边界,提高邀请的便捷性,可以实现通过链接邀请用户加入会议的功能。
自定义邀请落地页
您可以基于网易云信提供的邀请落地页源码(可以 提交工单 联系网易云信技术支持工程师获取),打造品牌专属的邀请页面:
落地页通常包含以下内容:
- 会议基本信息(ID、主题、开始时间等):您可通过对应的 RESTFul 接口查询会议信息详情进行展示。
- 下载应用或打开应用的按钮:提供快捷方式让用户安装应用或直接跳转至已安装的应用。
- 会议参与者信息(可选):显示当前已加入会议的参会者列表。
如下展示了一个简单的邀请落地页:
配置邀请链接跳转
在落地页中,您需要配置 DeepLink 以允许直接跳转至您的应用。示例如下:
Android 实现
将您的应用配置为能够响应特定的 URL scheme,实现一键加入会议:
XML<activity android:name=".MeetingJoinActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myscheme" android:host="myhost.example.com" />
</intent-filter>
</activity>
在 Activity 中处理跳转逻辑:
Java@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Uri uri = getIntent().getData();
if (uri != null) {
String meetingNum = uri.getQueryParameter("id");
String password = uri.getQueryParameter("pwd");
if (meetingNum != null) {
// 创建参数并加入会议
NEJoinMeetingParams params = new NEJoinMeetingParams();
params.meetingNum = meetingNum;
params.password = password;
joinMeeting(params);
}
}
}
场景四:特殊设备邀请
网易会议组件通过 callOutRoomSystem 接口支持邀请专业会议室设备加入,实现与其他会议室硬件设备无缝对接:
JavaNERoomSystemDevice device = new NERoomSystemDevice(NERoomSipDeviceInviteProtocolType.IP, "192.168.1.100", "deviceName");
NEMeetingSDK.getInstance().getMeetingInviteService().callOutRoomSystem(
device,
new NECallback<NERoomSIPCallInfo>() {
@Override
public void onResult(int resultCode, String resultMessage, NERoomSIPCallInfo resultData) {
if (resultCode == NEMeetingErrorCode.SUCCESS && resultData != null) {
// 呼叫成功,可获取 resultData 中的通话信息
String callId = resultData.getCallId();
String sipUri = resultData.getSipUri();
// 可以显示呼叫状态或其他相关信息
} else {
// 呼叫失败,显示错误信息
}
}
}
);




