SuperAPI AI 工具集

cometchat-react-native-calls

智能体与模型

查看项目

更新于 10-21 20:28

技能介绍

本技能面向 CometChat React Native UI Kit v5 的语音与视频通话集成,属于 cometchat-react-native-core 的配套技能,假定已完成安装、Provider 链与 init→login→render 流程。

【用途】 用于在 React Native 应用中添加语音/视频通话能力,包括来电界面、去电界面、通话中界面与通话记录列表,并排查“通话不响铃”等常见问题。

【前置条件与安装】 React Native 有独立的 calls SDK,Web 包 @cometchat/calls-sdk-javascript 在此不可用。安装命令: npm install @cometchat/calls-sdk-react-native@5 还需安装 6 个必需 peer 依赖(版本已固定,不要浮动): npm install @react-native-async-storage/async-storage@^2.1.2 react-native-background-timer@^2.4.1 react-native-performance@^5.1.2 react-native-svg@^15.12.0 react-native-url-polyfill@2.0.0 react-native-webrtc@124.0.7 其中 react-native-performance 必须保持 5.x,浮动到 ^6 会导致后续 npm install 报 ERESOLVE;react-native-url-polyfill 与 react-native-performance 属于打包关键依赖,UIKit 在模块作用域 require 了 calls SDK,即使只做聊天构建 Metro 也会解析它们,缺失会报 “Unable to resolve module”。react-native-community/netinfo 与 react-native-callstats 并非声明的 peer 依赖。 iOS 需执行 cd ios && pod install && cd ..(裸 RN);Expo 使用 npx expo run:ios。

【启用通话】 安装该包本身就是开关:套件在启动时 try { require("@cometchat/calls-sdk-react-native") },能解析即自动启用通话。本套件不存在 setCallingEnabled(true),不要输出该调用。initFromSettings 路径没有通话开关,CometChatSettings 无 calling 字段;disableCalling: true 仅存在于传给旧版 CometChatUIKit.init(uiKitSettings) 的 UIKitSettings 对象上,若要在保留包的情况下禁用通话需改用该 init() 入口,或干脆不安装 calls SDK。半完成安装(装了包但未跑 pod)可能导致 JS 侧显示已启用而原生侧缺失,首次通话时崩溃而非启动时报错。

【原生版本下限】 Android:minSdkVersion 24(android/app/build.gradle)。iOS:IPHONEOS_DEPLOYMENT_TARGET 13.0(Xcode target 或 Podfile post_install)。低于下限会构建失败。

【权限】 裸 RN 在 ios/<App>/Info.plist 添加 NSCameraUsageDescription 与 NSMicrophoneUsageDescription;Android 在 AndroidManifest.xml 添加 CAMERA、RECORD_AUDIO、MODIFY_AUDIO_SETTINGS、BLUETOOTH_CONNECT(Android 12+ 蓝牙音频路由)。Expo 将相同值写入 app.json(ios.infoPlist、android.permissions)后重新构建,不要手改生成的 native 工程。

【组件】 CometChatCallButtons:音频/视频触发按钮,消息头部默认显示;CometChatIncomingCall:响铃界面,需在导航器之上挂载一次;CometChatOutgoingCall:拨号界面;CometChatOngoingCall:通话中界面;CometChatCallLogs:通话历史列表。若把 CometChatIncomingCall 放在某个屏幕内,只有该屏幕打开时才会响铃,这是权限缺失之外最常见的“不响铃”原因。

【接线要点】 来电需通过 CometChat.addCallListener 监听 onIncomingCallReceived 等事件,并在卸载时 removeCallListener;CometChatCallButtons 的 onError 是唯一回调,成功是事件(ccOutgoingCall)而非 Promise;CometChatOngoingCall 的 sessionID 来自已接通的 Call,callSettingsBuilder 是 CometChatCalls 的 builder 而非聊天 SDK 的。资料指出 CometChatOngoingCall 虽已导出并列入 call-features 组件行,但尚无专属 props 页面,示例为基于类型构造的临时方案。

【通话记录】 Kit v5 移除了 CometChatCallLogDetails / History / Participants / Recordings。自定义详情需用 Calls SDK 的 CallLogRequestBuilder(CometChatCalls 上的静态成员,仅可从 @cometchat/calls-sdk-react-native 获取;聊天 SDK 中不存在)。fetchNext() 缺少 auth token 会拒绝(“Auth Token is required”),需传入已登录用户的 token;setHasTranscriptions(true) 可筛选有转写的通话并让服务端附带转写内容。

【验证与限制】 模拟器无法采集摄像头或麦克风,模拟器跑通只证明界面渲染,不证明通话连通;媒体、权限与响铃必须在真机上验证。常见坑:装错 Web 版 calls SDK、输出不存在的 setCallingEnabled(true)、把来电组件放进单个屏幕、跳过 pod install/重新构建、低于版本下限、用模拟器验收。