邀请机制

更新时间: 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);
  • 说明
  1. 此接口参数InviteParamBuilder中有一个requestId ,是用来做为此次邀请动作的唯一标识,需要开发者自己生成,并保证唯一性,不同的邀请不能用同一个id,否则可能导致混乱。
  2. 此接口有两个比较特殊的错误码: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) {
        // 创建频道并且加入异常
    }
});
此文档是否对你有帮助?
有帮助
去反馈
  • 使用限制
  • 邀请他人
  • 取消邀请
  • 接受邀请
  • 加入频道并接受邀请
  • 拒绝邀请
  • 直接呼叫
  • 直接呼叫(新)