获取主被叫用户信息(V2)
更新时间: 2024/08/23 10:16:57
在报表统计等场景中,您可能需要上报主被叫的一些用户信息。本文介绍获取主被叫的用户 ID(uid)、房间 ID (cid)、房间名称(cname)等信息。
背景信息
- 本文中的内容适用于呼叫组件 V2.0.0 及以上版本。如果您使用 V1.8 版本,请参见获取主被叫用户信息(V1)。
- 集成 Android 呼叫组件时,分为含 UI 集成和不含 UI 集成,您可以根据您的使用方式,查看对应的内容。如果您没有使用呼叫组件自带的 UI,请参考本文中不含 UI 集成的场景的相关内容。
- 不含 UI 集成时,只需要引入
api 'com.netease.yunxin.kit.call:call:2.1.0'
。含 UI 集成时需要引入api 'com.netease.yunxin.kit.call:call-ui:2.1.0'
。 - 含 UI 集成的使用入口类为
CallKitUI
,不含 UI 集成的使用入口类为NECallEngine
。
含 UI 集成的场景
呼叫时透传扩展信息给被叫
您可以在发起呼叫时设置扩展信息,例如用户昵称等。
-
发起呼叫时设置扩展信息。
java
CallParam param = new CallParam.Builder() ...... .callExtraInfo("呼叫时传入给被叫的扩展信息") .build(); CallKitUI.startSingleCall(this, param);
-
(可选)自定义 UI 场景中,若页面的 Activity(继承 CommonCallActivity 或其子类)启动方为主叫,则需要用户手动调用
doCall
方法发起呼叫。自定义 UI 场景需要执行此步骤,否则不需要。
java
doCall(new NEResultObserver<CommonResult<NECallInfo>>() { @Override public void onResult(CommonResult<NECallInfo> result) { if (result.isSuccessful()){ // 注意此时没有接听成功,其中存在字段不全,在 onCallConnected 回调中可获取较全信息 NECallInfo callInfo = result.data; } } });
-
被叫用户获取透传的扩展信息。
被叫用户在启动的被叫页面 Activity(继承 CommonCallActivity 或其子类) 中通过如下方式获取主叫透传的扩展信息。
java
public class TestActivity extends P2PCallFragmentActivity { @Override public void doOnCreate(@Nullable Bundle savedInstanceState) { super.doOnCreate(savedInstanceState); boolean isCaller = !getCallParam().isCalled(); // 判断是否为主叫 String info = getCallParam().getCallExtraInfo(); // 主叫透传给被叫的数据 } }
在呼叫的 UI 页面传递扩展信息(类似 Intent)
在含 UI 集成场景中,通过 CallKitUI
启动呼叫页面时,您可以将呼叫的扩展信息发给本地对应的页面 Activity,但是不需要给被叫。可参考如下方式实现:
-
设置将扩展信息透传给本地对应的呼叫 Activity。
java
CallParam param = new CallParam.Builder() ..... .addExtras("key", "实现 Serializable 或 Parcelable 接口对象") .build(); CallKitUI.startSingleCall(this, param);
-
UI 层获取扩展信息。
java
public class TestActivity extends P2PCallFragmentActivity { @Override public void doOnCreate(@Nullable Bundle savedInstanceState) { super.doOnCreate(savedInstanceState); boolean isCaller = !getCallParam().isCalled(); // 判断是否为主叫 Object obj = getCallParam().getExtras().get("key"); } }
通话中获取 RTC 用户 ID(rtcUid)
-
(可选)在初始化呼叫组件时,设置当前用户的 RTC 用户 ID(rtcUid)。如果不设置,则使用随机分配的 rtcUid。
java
CallKitUIOptions options = new CallKitUIOptions.Builder() .currentUserRtcUId(1000L) // 示例 .build(); CallKitUI.init(getApplicationContext(), options);
-
呼叫成功后,在通话中获取对端用户的 rtcUid。
根据 IM 的 accid 获取对应的 rtcUid。
java
NECallEngine.sharedInstance().getCallInfo().getUidByAccId("用户的云信 IM accid")
通话中获取信令房间的 channelId、RTC 房间的 cid 和 cname
-
获取 RTC 房间名称
RTC 房间的 cname 在发起呼叫时自行设置,但是需要保证唯一性。参数的格式要求请参见 RTC 的channelName格式说明。
java
CallParam param = new CallParam.Builder() ...... .rtcChannelName("自定义 cname") // 自定义的 Rtc cname 房间名称 .build(); CallKitUI.startSingleCall(this, param);
-
主叫用户获取信令房间的 channelId
java
doCall(new NEResultObserver<CommonResult<NECallInfo>>() { @Override public void onResult(CommonResult<NECallInfo> result) { if (result.isSuccessful()){ // 呼叫成功后获取信令 channelId String channelId = result.data.signalInfo.channelId; } } });
-
主叫和被叫用户获取信令房间 channelId、RTC 房间的 cid 和 cname
主叫和被叫用户在启动的通话页面 Activity(继承 CommonCallActivity 或其子类) 中,通过
onCallConnected
回调获当前通话的详细信息。java
public class TestActivity extends P2PCallFragmentActivity { @Override public void onCallConnected(@NonNull NECallInfo info) { // info 当前通话的详细信息,详细内容见下方 NECallInfo 说明 } }
不含 UI 集成的场景
呼叫时透传扩展信息给被叫
您可以在发起呼叫时设置扩展信息,例如用户昵称等。
-
发起呼叫时设置扩展信息。
java
// 构建呼叫参数 NECallParam param = new NECallParam.Builder("被叫用户accId") .callType(NECallType.VIDEO) // 呼叫类型为视频通话 .extraInfo("呼叫时传入给被叫的扩展信息") // 呼叫时传入给被叫的扩展信息,例如用户昵称等 .build(); // 发起呼叫 NECallEngine.sharedInstance().call(param, new NEResultObserver<CommonResult<NECallInfo>>() { @Override public void onResult(CommonResult<NECallInfo> result) { if (result.isSuccessful()){ // 注意此时没有接听成功,其中 callInfo 字段不全 NECallInfo callInfo = result.data; } } });
-
被叫用户获取相应的扩展信息。
被叫用户在收到来电通知时,通过
NECallEngineDelegate#onReceiveInvited
回调中的NEInviteInfo
参数获取主叫方透传的扩展信息。java
NECallEngine.sharedInstance().addCallDelegate(new NECallEngineDelegateAbs() { @Override public void onReceiveInvited(NEInviteInfo info) { String extraInfo = info.extraInfo; // 主叫方的透传数据 } });
获取 RTC 用户 ID(rtcUid)
-
(可选)在初始化呼叫组件时,设置当前用户的 RTC 用户 ID(rtcUid)。如果不设置,则使用随机分配的 rtcUid。
java
NESetupConfig setupConfig = new NESetupConfig.Builder("AppKey","currentUserAccId") .currentUserRtcUid(10000L) // 示例,设置当前用户的 rtcUid .build(); NECallEngine.sharedInstance().setup(this, setupConfig);
-
呼叫成功后,在通话中获取对端用户的 rtcUid。
根据 IM 的 accid 获取对应的 rtcUid。
java
NECallEngine.sharedInstance().getCallInfo().getUidByAccId("用户的云信 IM accid")
获取信令房间的 channelId、RTC 房间的 cid 和 cname
-
在发起呼叫时传入相关参数。
RTC 房间的 cname 在发起呼叫时自行设置,但是需要保证唯一性。参数的格式要求请参见 RTC 的channelName格式说明。
java
// 构建呼叫参数 NECallParam param = new NECallParam.Builder("被叫用户accId") .callType(NECallType.VIDEO) // 呼叫类型为视频通话 .extraInfo("呼叫时传入给被叫的扩展信息") // 呼叫时传入给被叫的扩展信息 .rtcChannelName("自定义 Rtc 房间名称") // 自定义的 Rtc 房间名称 .build(); // 发起呼叫 NECallEngine.sharedInstance().call(param, new NEResultObserver<CommonResult<NECallInfo>>() { @Override public void onResult(CommonResult<NECallInfo> result) { if (result.isSuccessful()){ // 注意此时没有接听成功,其中存在字段不全,在 onCallConnected 回调中可获取较全信息 NECallInfo callInfo = result.data; } } });
-
被叫接通后双方会触发
onCallConnected
回调,您可以通过onCallConnected
回调参数NECallInfo
获取通话中的信息。java
NECallEngine.sharedInstance().addCallDelegate(new NECallEngineDelegateAbs() { @Override public void onCallConnected(NECallInfo info) { // info.signalInfo.channelId; 加入信令房间的 id 标识; // info.rtcInfo.channelName; 加入 Rtc 房间的名称; // info.rtcInfo.channelId; 加入 Rtc 房间的 id 标识; // info.currentAccId; 当前用户的云信 IM accid; // info.currentUserUid(); 当前用户加入 Rtc 房间的 rtcUid; // info.otherUserInfo().uid; 对端用户加入 Rtc 房间的 rtcUid; // info.otherUserInfo().accId; 对端用户的云信 IM accid; } });
NECallInfo 字段内容说明
NECallInfo 详细内容如下,涵盖了通话中的所有信息内容:
字段 类型 说明 callId String 客户端本地生成的唯一通话标识 currentAccId String 当前用户登录 IM 传入到呼叫组件中的 accId callerInfo NEUserInfo 主叫用户信息内容,详情见下表 calleeInfo NEUserInfo 被叫用户信息内容,详情见下表 callType Integer 通话类型音频/视频 - NECallType.AUDIO: 音频通话
- NECalTypel.VIDEO:视频通话
signalInfo NESignalInfo 通话中的信令信息内容,详情见下表 rtcInfo NERtcInfo 通话中的Rtc信息内容,详情见下表 callStatus Integer 当前通话状态,详细见 CallState
说明NEUserInfo 通话中的用户信息内容:
字段 类型 说明 accId String 用户传入到组件中的 accId uid String 用户当前的 rtcUid NESignalInfo 通话中的信令信息内容:
字段 类型 说明 channelId String 信令通道的唯一标识由服务端分配 requestId String 发起呼叫时的唯一标识 channelName String 信令房间的名称 extraInfo String 呼叫方发起呼叫传入的扩展信息 globalExtraCopy String 定义的呼叫全局抄送信息,用户服务端接收抄送时设置自己的业务字段 NERtcInfo 通话中的Rtc信息内容:
字段 类型 说明 channelId String RTC 房间的 channelId 唯一标识,由 RTC 服务端分配 channelName String RTC 房间的名称,需要唯一 token String 加入 RTC 房间的 Token 信息 - NECallType.AUDIO: 音频通话