邀请机制
更新时间: 2023/08/15 02:21:36
网易云信 NIM SDK 的SignallingService
接口和SignallingServiceObserver
接口,分别提供信令服务相关方法和信令相关监听的方法。
使用限制
限制项 | 说明 |
---|---|
频道成员人数 | 人数限制:100 人 |
信令呼叫唯一标识 | 长度限制:128 字符 |
信令扩展字段 | 长度限制:4096 字符 |
推送 payload | 长度限制:4096 字符 |
推送内容 | 长度限制:500 字符 |
推送标题 | 长度限制:32 字符 |
邀请他人
- API原型
java /**
* 邀请他人加入频道
* 该接口用于邀请对方加入频道,邀请者必须是创建者或者是频道中成员。如果需要对离线成员邀请,可以打开离线邀请开关并填写推送信息,被邀请者上线后通过离线通知接收到该邀请。
* @param paramBuilder InviteParamBuilder {@link InviteParamBuilder}
* @return InvocationFuture<Void>
*/
InvocationFuture<Void> invite(InviteParamBuilder paramBuilder);
- 说明
- 此接口参数
InviteParamBuilder
中有一个requestId
,是用来做为此次邀请动作的唯一标识,需要开发者自己生成,并保证唯一性,不同的邀请不能用同一个id,否则可能导致混乱。 - 此接口有两个比较特殊的错误码:10201、10202 , 参考错误码。建议将回调设置成
RequestCallbackWrapper
,并通过返回的相应code 去处理相关的逻辑 ,code = 200 为成功。如果用link RequestCallback
那么错误码将在link RequestCallback#onFailed(int code)
返回。
- 示例
java/**
* 邀请别人
*/
private void inviteOther() {
if (channelFullInfo == null) {
Toast.makeText(this, "请先创建频道或加入频道", Toast.LENGTH_SHORT).show();
return;
}
String account = edtInviteAccount.getText().toString();
if (TextUtils.isEmpty(account)) {
Toast.makeText(this, "请输入对方账号", Toast.LENGTH_SHORT).show();
return;
}
invitedRequestId = System.currentTimeMillis() + "_id";
InviteParamBuilder param = new InviteParamBuilder(channelFullInfo.getChannelId(), account, invitedRequestId);
param.offlineEnabled(true);
service.invite(param).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
Toast.makeText(this, "邀请成功 :channelId = " + channelFullInfo.getChannelId() + ", requestId = " + invitedRequestId, Toast.LENGTH_SHORT).show();
}
@Override
public void onFailed(int code) {
Toast.makeText(this, "邀请失败 :code = " + code, Toast.LENGTH_SHORT).show();
}
@Override
public void onException(Throwable exception) {
Toast.makeText(this, "邀请异常 :exception = " + exception, Toast.LENGTH_SHORT).show();
}
});
}
取消邀请
- API原型
java/**
* 取消邀请
* @param paramBuilder InviteParamBuilder {@link InviteParamBuilder}
* @return InvocationFuture<Void>
*/
InvocationFuture<Void> cancelInvite(InviteParamBuilder paramBuilder);
- 说明
参数InviteParamBuilder
中的 requestId
需要传入邀请时生成的id。
- 示例
java/**
* 取消邀请别人
*/
private void cancelInviteOther() {
if (channelFullInfo == null) {
Toast.makeText(this, "请先创建频道或加入频道", Toast.LENGTH_SHORT).show();
return;
}
String account = edtInviteAccount.getText().toString();
if (TextUtils.isEmpty(account)) {
Toast.makeText(this, "请输入对方账号", Toast.LENGTH_SHORT).show();
return;
}
InviteParamBuilder param = new InviteParamBuilder(channelFullInfo.getChannelId(), account, invitedRequestId);
param.offlineEnabled(true);
service.cancelInvite(param).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
Toast.makeText(this, "取消邀请成功 :channelId = " + channelFullInfo.getChannelId() + ", requestId = " + invitedRequestId, Toast.LENGTH_SHORT).show();
}
@Override
public void onFailed(int code) {
Toast.makeText(this, "取消邀请失败 :code = " + code, Toast.LENGTH_SHORT).show();
}
@Override
public void onException(Throwable exception) {
Toast.makeText(this, "取消邀请异常 :exception = " + exception, Toast.LENGTH_SHORT).show();
}
});
}
接受邀请
- API原型
java /**
* 接受对方邀请,但并不代表加入了频道 。
* @param paramBuilder InviteParamBuilder {@link InviteParamBuilder}
* @return InvocationFuture<Void>
*/
InvocationFuture<Void> acceptInvite(InviteParamBuilder paramBuilder);
/**
* 接受对方邀请并自动加入频道
* @param paramBuilder InviteParamBuilder
* @param selfUid 自己在频道中对应的uid,大于零有效,无效时服务器会分配随机唯一的uid, 也可以自己生成,但要保证唯一性
* @return InvocationFuture<ChannelFullInfo>
*/
InvocationFuture<ChannelFullInfo> acceptInviteAndJoin(InviteParamBuilder paramBuilder, long selfUid);
- 说明
以上两个接口有一个比较特殊的错误码:10201 , 参考错误码。建议将回调设置成 RequestCallbackWrapper
,并通过返回的相应code 去处理相关的逻辑 ,code = 200 为成功。如果用link RequestCallback
那么错误码将在link RequestCallback#onFailed(int code)
返回。
- 示例
java/**
* 接受对方的的邀请并加入频道
*/
private void acceptInvite() {
enableClick(false); InviteParamBuilder inviteParam = new InviteParamBuilder(invitedEvent.getChannelBaseInfo().getChannelId(),
invitedEvent.getFromAccountId(),
invitedEvent.getRequestId());
NIMClient.getService(SignallingService.class).acceptInviteAndJoin(inviteParam, selfUid).setCallback(
new RequestCallbackWrapper<ChannelFullInfo>() {
@Override
public void onResult(int code, ChannelFullInfo channelFullInfo, Throwable throwable) {
enableClick(true); //参考官方文档中关于api以及错误码的说明
if (code == ResponseCode.RES_SUCCESS) {
ToastHelper.showToast(MainActivity.this, "接收邀请成功");
channelInfo = channelFullInfo.getChannelBaseInfo();
} else {
ToastHelper.showToast(MainActivity.this, "接收邀请返回的结果 , code = " + code +
(throwable == null ? "" : ", throwable = " +
throwable.getMessage()));
}
beInviteContainer.setVisibility(View.GONE);
}
});
}
加入频道并接受邀请
加入频道并接受邀请接口。调用该接口即成功加入频道。
该接口实际为组合接口,等同于先调用加入频道,成功后再调用接受邀请接口。 joinAndAccept
优化了信令的响应时间。
- API原型
java /**
* 加入频道并接受邀请
* @param paramBuilder InviteParamBuilder
* @return InvocationFuture<ChannelFullInfo>
*/
InvocationFuture<ChannelFullInfo> joinAndAccept(InviteParamBuilder paramBuilder);
- 说明
以上接口返回 200,代表加入频道成功,接受邀请的结果通过返回值 JoinAndAcceptResult
中的callStatus
字段来体现。callStatus
字段为有一个特殊错误码:10201, 参考错误码。
- 示例
JoinAndAcceptParam joinAndAcceptParam = new JoinAndAcceptParam.JoinAndAcceptParamBuilder("123456", "cjl", "12232456abcdf3wde").build();
NIMClient.getService(SignallingService.class).joinAndAccept(joinAndAcceptParam).setCallback(new RequestCallback<JoinAndAcceptResult>() {
@Override
public void onSuccess(JoinAndAcceptResult result) {
// 加入频道成功
if (result.getCallStatus() == ResponseCode.RES_SUCCESS) {
// 接受邀请成功
} else {
// 参考官方文档错误码
}
}
@Override
public void onFailed(int code) {
// 加入频道失败
}
@Override
public void onException(Throwable exception) {
// 加入频道异常
}
});
拒绝邀请
- API原型
java /**
* 拒绝对方邀请
* @param paramBuilder InviteParamBuilder {@link InviteParamBuilder}
* @return InvocationFuture<Void>
*/
InvocationFuture<Void> rejectInvite(InviteParamBuilder paramBuilder);
- 说明
以上两个接口有一个比较特殊的错误码:10201 , 参考错误码。建议将回调设置成 RequestCallbackWrapper
,并通过返回的相应code 去处理相关的逻辑 ,code = 200 为成功。如果用link RequestCallback
那么错误码将在link RequestCallback#onFailed(int code)
返回。
- 示例
java/**
* 拒绝对方的邀请
*/
private void rejectInvite(String customInfo) {
InviteParamBuilder inviteParam = new InviteParamBuilder(invitedEvent.getChannelBaseInfo().getChannelId(),
invitedEvent.getFromAccountId(),
invitedEvent.getRequestId());
if (!TextUtils.isEmpty(customInfo)) {
inviteParam.customInfo(customInfo);
}
NIMClient.getService(SignallingService.class).rejectInvite(inviteParam);
}
直接呼叫
- API原型
java /**
*直接呼叫 , 用于用户新开一个频道并邀请对方加入频道。该接口为组合接口,等同于用户先创建频道,然后加入频道并邀请对方
* @param callParamBuilder CallParamBuilder {@link CallParamBuilder}
* @return InvocationFuture<ChannelFullInfo>
*/
InvocationFuture<ChannelFullInfo> call(CallParamBuilder callParamBuilder)
- 说明
返回请注意处理相应错误码, 参考错误码。建议将回调设置成 RequestCallbackWrapper
,并通过返回的相应code 去处理相关的逻辑 ,code = 200 为成功。如果用link RequestCallback
那么错误码将在link RequestCallback#onFailed(int code)
返回。
- 示例
java/**
* 呼叫对方
*/
private void call() {
String account = editAccount.getText().toString().trim();
if (TextUtils.isEmpty(account)) {
ToastHelper.showToast(this, "请输入对方账号");
return;
}
tvCallingHint.setText("正在呼叫" + account);
tvCallingHint.setVisibility(View.VISIBLE);
String requestId = String.valueOf(System.currentTimeMillis());
CallParamBuilder paramBuilder = new CallParamBuilder(ChannelType.VIDEO, account, requestId);
paramBuilder.selfUid(selfUid);
NIMClient.getService(SignallingService.class).call(paramBuilder).setCallback(
new RequestCallbackWrapper<ChannelFullInfo>() {
@Override
public void onResult(int code, ChannelFullInfo channelFullInfo, Throwable throwable) {
//参考官方文档中关于api以及错误码的说明
if (code == ResponseCode.RES_SUCCESS) {
channelInfo = channelFullInfo.getChannelBaseInfo();
ToastHelper.showToast(MainActivity.this, "邀请成功,等待对方接听");
} else {
tvCallingHint.setVisibility(View.GONE);
ToastHelper.showToast(MainActivity.this, "邀请返回的结果 , code = " + code +
(throwable == null ? "" : ", throwable = " +
throwable.getMessage()));
}
}
});
}
}
直接呼叫(新)
呼叫接口,同 call
。区别在于 callEx
优化了信令的响应时间。
- API原型
java /**
*直接呼叫 , 用于用户新开一个频道并邀请对方加入频道。该接口为组合接口,等同于用户先创建频道,然后加入频道并邀请对方
* @param callParamBuilder CallParamBuilder {@link CallParamBuilder}
* @return InvocationFuture<ChannelFullInfo>
*/
InvocationFuture<ChannelFullInfo> callEx(CallParamBuilder callParamBuilder)
- 说明
以上接口返回 200,代表创建频道成功并且自己已经加入,邀请对方的结果通过返回值 CallExResult
中的callStatus
字段来体现。callStatus
字段为有两个比较特殊的错误码:10201、10202 , 参考错误码。
- 示例
CallExParam callExParam = new CallExParam.CallExParamBuilder(ChannelType.AUDIO, "cjl", "12232456abcdf3wde").build();
NIMClient.getService(SignallingService.class).callEx(callExParam).setCallback(new RequestCallback<CallExResult>() {
@Override
public void onSuccess(CallExResult result) {
// 创建频道成功并且成功加入
if (result.getCallStatus() == ResponseCode.RES_SUCCESS) {
// 邀请对方成功
} else {
// 参考官方文档错误码
}
}
@Override
public void onFailed(int code) {
// 创建频道并且加入失败
}
@Override
public void onException(Throwable exception) {
// 创建频道并且加入异常
}
});