跑通示例项目

更新时间: 2024/08/23 15:20:48

在视频呼叫示例项目中使用了呼叫组件实现音视频呼叫。本文介绍如何快速跑通音视频呼叫的示例项目,体验音视频呼叫功能。

开发环境

示例项目对开发环境的要求如下所示:

环境要求 说明
JDK 版本 1.8.0 及以上版本
Android API 版本 API 21、Android 5.0 及以上版本
CPU 架构 ARM64、ARMV7
IDE Android Studio
调试设备 运行 Android 系统 4.3 或以上版本的移动设备
依赖 依赖 Androidx,不支持 support 库

前提条件

在开始运行示例项目之前,请确保您已完成以下操作:

  • 创建应用并获取应用的 App Key
  • 已开通以下服务,若未开通,请参考 开通服务 进行开通。
    • IM 即时通讯。当使用呼叫组件自带的话单功能时,需开通 IM。

    • 信令。用于实现点对点呼叫邀请以及音视频通话。

    • 音视频通话 2.0。用于实现实时音视频通话。

      建议开通音视频通话的 调试模式鉴权方式),调试模式建议只在集成开发阶段使用,请在应用正式上线前改回安全模式。

    • 如需要抄送,请提前开通消息抄送中的 话单 抄送服务,实现在一通通话结束后,发送事件通知消息,标记此次通话是否接通以及通话时间、类型等数据。

操作步骤

  • 示例源码仅供开发者接入参考,实际应用开发场景中,请结合具体业务需求修改使用。
  • 若您计划将源码用于生产环境,请确保应用正式上线前已经过全面测试,以免因兼容性等问题造成损失。
  • 示例代码中包含业务登录逻辑,如果您的业务中需要使用登录相关功能,请修改登录相关的逻辑。
  1. 单击下载并解压缩 flutter-callkit-demo.zip

  2. 进入示例代码文件夹,其中 lib 目录结构说明如下:

    Bash├── lib                                            Flutter 示例项目代码
    │   └── main.dart                                  入口(项目 UI、账号配置)
    ├── android                                        安卓工程代码
    │   └── app
    │       └── src
    │           └── ...
    │               └── call_kit_demo_flutter
    │                   └── MainActivity.kt            安卓主页面(AppKey 等配置)
    │                   └── SelfCustomCallActivity.kt  自定义通话页面(通话功能定制)
    ├── ios                                            iOS 工程代码
    │   └── Runner
    │
    
  3. 根据您在准备工作阶段获取的 AppKey,填入到下载的 Demo 工程文件:

    • 安卓应用:在 flutter-callkit-demo/android/app/src/main/kotlin/com/example/call_kit_demo_flutter/MainActivity.kt 中,如下所示:

      Kotlinclass MainActivity : FlutterActivity() {
          private val logTag = "MainActivity"
      
          // 配置应用的 appKey
          private val appKey = "your appkey"
      
          // channel 名称
          private val channelNameCall = "com.example.call_kit_demo_flutter/channel/call"
      ...
      }
      
    • iOS 应用:在 flutter-callkit-demo/ios/Runner/AppDelegate.swift 中,如下所示:

      Swift@UIApplicationMain
      @objc class AppDelegate: FlutterAppDelegate {
      override func application(
          _ application: UIApplication,
          didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
      ) -> Bool {
          GeneratedPluginRegistrant.register(with: self)
          NECallKitPlugin.register(with: registrar(forPlugin: "callkit")!)
          let appkey = "your appkey"
          let option = NIMSDKOption(appKey: appkey)
          NIMSDK.shared().register(with: option)
          
          let config = NESetupConfig()
          config.appkey = appkey
          let uiConfig = NECallUIKitConfig()
          uiConfig.config = config;
          NERtcCallKit.sharedInstance().timeOutSeconds = 30
          NERtcCallUIKit.sharedInstance().customControllerClass = NECallViewController.self
          NERtcCallUIKit.sharedInstance().setup(with: uiConfig)
          
          return super.application(application, didFinishLaunchingWithOptions: launchOptions)
      }
          
      
      }
      
  4. 配置登录账号时,您需要在 flutter-callkit-demo/lib/main.dart 文件中填入以下三种信息:

    • accid:您的账号 ID

    • token:您的 Token 信息

    • 被呼叫账号

      Dart// methodChannel 名称
      const channelNameCall = "com.example.call_kit_demo_flutter/channel/call";
      
      // 账号一 accId
      const account1 = "";
      // 账号二 accId
      const account2 = "";
      // 账号一 token
      const token1 = "";
      // 账号二 token
      const token2 = "";
      
  5. 在工程根目录执行如下命令引入依赖。

    bashflutter pub get
    
  6. 在 IDE 环境中选中调试设备后,执行如下命令开始编译 Demo 项目:

    bashflutter run
    
  7. (可选)可参考以下示例自定义界面。

  • 示例一:开启通话前台服务

    开启通话前台服务,可以避免被设备系统回收资源从而影响通话质量。您可以修改文件 flutter-callkit-demo/android/app/src/main/kotlin/com/example/call_kit_demo_flutter/SelfCustomCallActivity.kt 中的设置实现:

    Dartclass SelfCustomCallActivity : P2PCallFragmentActivity() {
        override fun provideUIConfig(callParam: CallParam?): P2PUIConfig {
            return P2PUIConfig.Builder()
                // 通话页面 UI 上不展示音视频切换按钮
                .showAudio2VideoSwitchOnTheCall(false)
                // 通话页面 UI 上不展示视频音频切换按钮
                .showVideo2AudioSwitchOnTheCall(false)
                // 设置自定义的通话界面 Fragment,主要为了展示呼叫或被叫的背景模糊大图
                .customCallFragmentByKey(P2PCallFragmentType.VIDEO_CALLEE, CustomVideoCalleeFragment())
                .customCallFragmentByKey(P2PCallFragmentType.VIDEO_CALLER, CustomVideoCallerFragment())
                .customCallFragmentByKey(
                    P2PCallFragmentType.VIDEO_ON_THE_CALL,
                    CustomVideoOnTheCallFragment()
                )
                .customCallFragmentByKey(P2PCallFragmentType.AUDIO_CALLER, CustomAudioCallerFragment())
                .customCallFragmentByKey(P2PCallFragmentType.AUDIO_CALLEE, CustomAudioCalleeFragment())
                .customCallFragmentByKey(
                    P2PCallFragmentType.AUDIO_ON_THE_CALL,
                    CustomAudioOnTheCallFragment()
                )
                // 开启通话前台服务避免被系统回收资源
                .enableForegroundService(true)
                // 设置通话前台服务的配置,包括通知栏图标、标题、内容
                .foregroundNotificationConfig(
                    CallKitNotificationConfig(
                        R.mipmap.ic_launcher,
                        null, "通话中", "正在通话中"
                    )
                )
                .build()
        }
    }
    
此文档是否对你有帮助?
有帮助
去反馈
  • 开发环境
  • 前提条件
  • 操作步骤