すべてのプロダクト
Search
ドキュメントセンター

Intelligent Media Services:iOS ユーザーガイド

最終更新日:Sep 15, 2026

リアルタイム対話型 AI の音声およびビデオエージェントを iOS アプリケーションに統合します。

ソースコードの説明

ソースコードのダウンロード

GitHub オープンソースプロジェクトからソースコードをダウンロードします。

ソースコードの構造

├── iOS  // iOS プラットフォームのルートディレクトリ
│   ├── AUIAICall.podspec                // Pod 記述ファイル
│   ├── Source                                    // ソースコードファイル
│   ├── Resources                                 // リソースファイル
│   ├── Example                                   // デモコード
│   ├── AUIBaseKits                               // 基本的な UI コンポーネント
│   ├── README.md                                 // Readme

環境要件

  • Xcode 16.0 以降。 最新の公式リリースを推奨します。

  • CocoaPods 1.9.3 以降。

  • iOS 11.0 以降を実行している iOS 実機。

前提条件

サーバーで関連する API 操作を開発するか、提供されているサーバーのソースコードをデプロイします。詳細については、「プロジェクトのデプロイ」をご参照ください。

デモの実行

  1. ソースコードをダウンロードし、Example フォルダーに移動します。

  2. Example フォルダーで、pod install --repo-update コマンドを実行して SDK の依存関係をインストールします。

  3. AUIAICallExample.xcworkspace プロジェクトファイルを開き、パッケージ ID を変更します。

  4. エージェントシナリオ設定ファイル /Resources/AUIAIMain.bundle/agent_scenes.json を開きます。エージェントタイプに基づいてエージェント ID とリージョンを指定します。たとえば、音声エージェントを設定するには、agent_type が VoiceAgent である Scenes ノードを見つけ、agent_id と region フィールドを入力します。

    // 次の例は、音声通話エージェントを設定する方法を示しています
        {
          "agent_type": "VoiceAgent",
          "scenes": [
            {
              "agent_id": "<音声通話エージェント ID>",
              "region": "<音声通話エージェント ID があるリージョン>",
              "title": "Voice Call",
              "tags": [],
              "limit_seconds": 1800,
              "description": "",
              "asr_model_id": "xxx",
              "tts_model_id": "xxx",
              "voice_styles": []
            }
          ]
        }
    説明

    1 つのエージェントタイプのみをテストするには、そのエージェントタイプの agent_id と region のフィールド値を設定するだけで済みます。region の値については、次の表の Region ID 列をご参照ください。

    リージョン名

    リージョン ID

    中国 (杭州)

    cn-hangzhou

    中国 (上海)

    cn-shanghai

    中国 (北京)

    cn-beijing

    中国 (深セン)

    cn-shenzhen

    シンガポール

    ap-southeast-1

  5. エージェントを設定した後、次のいずれかの方法で起動します。

    • AppServer がデプロイされている場合: Alibaba Cloud が提供する AppServer のソースコードをデプロイした場合、AUIAICallAppServer.swift に移動して、サーバー側のドメイン名を設定します。

      // AUIAICallAppServer.swift
      public let AICallServerDomain = "アプリケーションサーバーのドメイン名"
    • AppServer がデプロイされていない場合: AppServer をデプロイせずにデモを迅速に実行するには、AUIAICallAuthTokenHelper.swift に移動します。EnableDevelopToken パラメーターを設定し、コンソールから ARTC アプリケーションの App ID と App Key を取得して、アプリケーションで認証トークンを生成します。

      説明

      この方法は、AppKey やその他の機密情報をアプリケーションに埋め込む必要があります。テストおよび開発目的でのみ使用してください。本番環境ではこの方法を使用しないでください。クライアント側で AppKey を公開すると、深刻なセキュリティリスクが生じます。

      // AUIAICallAuthTokenHelper.swift
      @objcMembers public class AUIAICallAuthTokenHelper: NSObject {
      
          // true に設定して開発モードを有効にします
          private static let EnableDevelopToken: Bool = true     
          // コンソールから RTCAppId をコピーします
          private static let RTCDevelopAppId: String = "エージェントが使用する RTC AppId"
          // コンソールから RTCAppKey をコピーします
          private static let RTCDevelopAppKey: String = "エージェントが使用する RTC AppKey"
      
          ...
      }

      ARTC アプリケーションの AppID と AppKey を取得するには:

      1. IMS コンソールの [AI エージェント] ページに移動します。エージェントをクリックして、エージェント詳細ページに移動します。

        image

      2. [ARTC application ID] をクリックします。ApsaraVideo Live コンソールにリダイレクトされ、そこに AppID と AppKey が表示されます。

        image

  6. Example ターゲットを選択し、プロジェクトをコンパイルして実行します。

独自の AI 通話機能のクイック開発

AUIAICall をアプリケーションに統合して、エージェントの音声およびビデオ通話機能を有効にします。

ソースコードの統合

  • リポジトリをダウンロードし、iOS フォルダーをアプリケーションのコードディレクトリにコピーします。 フォルダーの名前を AUIAICall に変更し、Podfile と同じレベルに配置してから、Example フォルダーを削除します。

  • Podfile を変更して、次の依存関係をインポートします。

    • AliVCSDK_ARTC:リアルタイム音声・ビデオインタラクション用のクライアント SDK。 AliVCSDK_Standard または AliVCSDK_InteractiveLive も使用できます。 詳細については、「iOS」をご参照ください。

    • ARTCAICallKit:リアルタイム対話型 AI 通話シナリオ用の SDK。

    • AUIFoundation:基本的な UI コンポーネント。

    • AUIAICall:AI 通話シナリオ用の UI コンポーネントのソースコード。

    # iOS 11.0 以降が必要です
    platform :ios, '11.0'
    
    target 'Your App target' do
        # ビジネスシナリオに基づいて、適切な音声・ビデオクライアント SDK を統合します
        pod 'AliVCSDK_ARTC', '~> x.x.x'
    
        # リアルタイム対話型 AI 通話シナリオ用の SDK
        pod 'ARTCAICallKit', '~> x.x.x'
    
        # 基本的な UI コンポーネントのソースコード
        pod 'AUIFoundation', :path => "./AUIAICall/AUIBaseKits/AUIFoundation/", :modular_headers => true
    
        # AI 通話シナリオ用の UI コンポーネントのソースコード
        pod 'AUIAICall',  :path => "./AUIAICall/"
    end
    説明
    • 最新の ARTC SDK バージョン:7.10.0。

    • 最新の AICallKit SDK バージョン:2.11.0。

  • pod install --repo-update コマンドを実行します。

  • ソースコードの統合が完了しました。

プロジェクトの設定

  • マイクとカメラの権限を追加します。プロジェクトの info.plist ファイルを開き、マイク権限 (NSMicrophoneUsageDescription)、カメラ権限 (NSCameraUsageDescription)、およびフォトライブラリ権限 (NSPhotoLibraryUsageDescription) を追加します。

  • プロジェクト設定の [署名と機能] タブで、[バックグラウンドモード] を有効にします。 バックグラウンドモードを有効にしない場合は、アプリケーションがバックグラウンドに入ったときの通話の終了を手動で処理する必要があります。

ソースコードの設定

  • 前提条件の手順を完了します。

  • AUIAICallAppServer.swift に移動し、サーバー側のドメイン名を設定します。

    // AUIAICallAppServer.swift
    public let AICallServerDomain = "アプリケーションサーバーのドメイン名"
    説明

    AppServer をデプロイしていない場合は、アプリケーションで認証トークンを生成して、デモを迅速にテストできます。 詳細については、「AppServer がデプロイされていない場合」をご参照ください。

API の呼び出し

上記の手順を完了したら、コンポーネントインターフェイスを使用して、アプリケーションの他のモジュールまたはホームページから AI 通話を開始します。 ビジネス要件に合わせてソースコードを変更することもできます。

// コンポーネントのインポート
import AUIAICall
import ARTCAICallKit
import AUIFoundation

// マイクの権限が有効になっているか確認します
AVDeviceAuth.checkMicAuth { auth in
   if auth == false {
       return
   }

   // userId には、アプリのログイン後のユーザー ID を使用します
   let userId = "xxx"
   // userId を使用してコントローラーをビルドします
   let controller = AUIAICallController(userId: userId)
   // エージェント ID を設定します。nil にはできません。
   controller.config.agentId = "xxx"
   // 通話タイプ (音声、デジタルヒューマン、または視覚理解) を設定します。エージェント ID のタイプと一致している必要があります。
   controller.config.agentType = agentType
   // エージェントが配置されているリージョン。nil にはできません。
   controller.config.region = "xx-xxx"
   // 通話 ViewController を作成します
   let vc = AUIAICallViewController(controller)
   // 通話インターフェイスをフルスクリーンで表示します
   vc.modalPresentationStyle = .fullScreen
   vc.modalTransitionStyle = .coverVertical
   vc.modalPresentationCapturesStatusBarAppearance = true
   self.present(vc, animated: true)
  }