View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Todos los videos
  • Información

Más videos

  • Información
  • Código
  • Crea experiencias de comunicación en tiempo real 

    LiveCommunicationKit transforma tus apps de comunicación en tiempo real en experiencias integradas. Te mostraremos cómo ofrecer una interfaz de usuario de conversación nativa y completa que sitúe tu app justo donde las personas la necesitan: desde una presentación en pantalla completa en la pantalla bloqueada hasta una multitarea fluida con Dynamic Island. Acompáñanos en este paso a paso sobre cómo integrar el framework para conversaciones entrantes, salientes y grupales.

    Capítulos

    • 0:01 - Introducción
    • 7:56 - Conversaciones entrantes
    • 11:29 - Conversaciones salientes
    • 13:18 - Grupos

    Recursos

    • Initiating VoIP conversations with LiveCommunicationKit
    • Responding to VoIP Notifications from PushKit
    • LiveCommunicationKit
      • Video HD
      • Video SD

    Videos relacionados

    WWDC25

    • Conoce App Intents

    WWDC22

    • Enhance voice communication with Push to Talk
  • Buscar este video…
    • 6:41 - Set up a conversation manager

      // Set up a conversation manager
      
      import LiveCommunicationKit
      
      let configuration = ConversationManager.Configuration(
        ringtoneName: "SampleRingtone.caf",
        iconTemplateImageData: UIImage(named: "SampleIcon")?.pngData(),
        maximumConversationGroups: 1,
        maximumConversationsPerConversationGroup: 2,
        includesConversationInRecents: true,
        supportsVideo: true,
        supportedHandleTypes: [.phoneNumber, .emailAddress]
      )
      
      let manager = ConversationManager(configuration: configuration)
      manager.delegate = self
    • 9:22 - Report the incoming conversation to the system

      // Report the incoming conversation to the system
      
      import LiveCommunicationKit
      import PushKit
      
      final class SamplePushHandler: NSObject, PKPushRegistryDelegate {
        func pushRegistry(
          _ registry: PKPushRegistry,
          didReceiveIncomingVoIPPushWith payload: PKPushPayload,
          metadata: PKVoIPPushMetadata) async {
      
          guard let (handle, uuid) = parseConversationPayload(from: payload) else { return }
      
          let capabilities = [.video, .pausing, .merging]
          let update = Conversation.Update(members: [handle], capabilities: capabilities)
          try? await manager.reportNewIncomingConversation(uuid: uuid, update: update)
        }
      }
    • 9:57 - Implement the delegate

      // Implement the delegate
      
      import LiveCommunicationKit
      
      final class SampleDelegate: ConversationManagerDelegate {
        func conversationManager(
          _ manager: ConversationManager,
          perform action: ConversationAction
        ) {
          switch action {
          case let action as JoinConversationAction:
            handleJoinAction(action)
          default:
            action.fail()
          }
        }
      }
    • 10:13 - Fulfill the join action

      // Handle a failed connection
      
      extension SampleDelegate {
       func handleJoinAction(_ action: JoinConversationAction) {
          guard let conversation = manager.conversations.first(where: {$0.uuid == uuid })else {
            return action.fail()
          }
      
          manager.reportConversationEvent(.conversationStartedConnecting(.now), for: conversation)
      
          Task {
            do {
              try await setupMediaStream(with: action.conversationUUID)
              manager.reportConversationEvent(.conversationConnected(.now), for: conversation)
              action.fulfill(dateConnected: .now)
            } catch {
              action.fail()
            }
          }
        }
      }
    • 11:17 - Route end actions

      // Route end actions
      
      final class SampleDelegate: ConversationManagerDelegate {
        // …
        func conversationManager(
          _ manager: ConversationManager,
          perform action: ConversationAction
        ) {
          switch action {
          case let action as JoinConversationAction:
            handleJoinAction(action)
          case let action as EndConversationAction:
            handleEndAction(action)
          default:
            action.fail()
          }
        }
      }
    • 12:14 - Create a start action

      let startAction = StartConversationAction(
        conversationUUID: UUID(),
        handles: [Handle(type: .phoneNumber, value: "+1-650-555-0199", displayName: "Ryan Notch")],
        isVideo: false
      )
    • 12:23 - Perform the action

      try await manager.perform([startAction])
    • 12:29 - Route start actions

      // Route start actions
      
      final class SampleDelegate: ConversationManagerDelegate {
        // …
        func conversationManager(
          _ manager: ConversationManager,
          perform action: ConversationAction
        ) {
          switch action {
          case let action as JoinConversationAction:
            handleJoinAction(action)
          case let action as EndConversationAction:
            handleEndAction(action)
          case let action as StartConversationAction:
            handleStartAction(action)
          default:
            action.fail()
          }
        }
      }
    • 13:51 - Start group conversations

      // Start group conversations
      
      let adam = Handle(type: .emailAddress,
                        value: "adam.halwani@icloud.com",
                        displayName: "Adam Halwani")
      let david = Handle(type: .emailAddress,
                         value: "david@example.com",
                         displayName: "David Evans")
      let ryan = Handle(type: .phoneNumber,
                        value: "+16505550199",
                        displayName: "Ryan Notch")
      
      let startAction = StartConversationAction(
        conversationUUID: UUID(),
        handles: [david, ryan],
        isVideo: false
      )
      try await manager.perform([startAction])
    • 14:01 - Report group membership updates

      // Report group membership updates
      
      let update = Conversation.Update(
        localMember: adam,
        members: [david, ryan],
        activeRemoteMembers: [david, ryan],
        capabilities: [.merging, .pausing, .unmerging]
      )
      
      manager.reportConversationEvent(
        .conversationUpdated(update),
        for: conversation
      )
    • 15:26 - Route merge actions

      // Route merge actions
      
      final class SampleDelegate: ConversationManagerDelegate {
        func conversationManager(
          _ manager: ConversationManager,
          perform action: ConversationAction
        ) {
          switch action {
          case let action as JoinConversationAction:
            handleJoinAction(action)
          case let action as EndConversationAction:
            handleEndAction(action)
          case let action as StartConversationAction:
              handleStartAction(action)
          case let action as MergeConversationAction:
            handleMergeAction(action)
          default:
            action.fail()
          }
        }
      }
    • 15:33 - Handle the merge action

      // Handle the merge action
      
      extension SampleDelegate {
        func handleMergeAction(_ action: MergeConversationAction) {
          let sourceUUID = action.conversationUUID
          let targetUUID = action.conversationUUIDToMergeWith
          guard manager.conversations.contains(where: { $0.uuid == sourceUUID }),
                manager.conversations.contains(where: { $0.uuid == targetUUID }) else {
            return action.fail()
          }
      
          Task {
            do {
              let update = try await combineStreams(from: sourceUUID, into: targetUUID)
              manager.reportConversationEvent(.conversationUpdated(update), for: target)
              action.fulfill()
            } catch {
              action.fail()
            }
          }
        }
      }

Developer Footer

  • Videos
  • WWDC26
  • Crea experiencias de comunicación en tiempo real 
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines