Come Integrare Chiamate Audio e Video VoIP in un'App iOS con WebRTC e CallKit

Aggiungere chiamate audio e video in tempo reale all'interno di un'applicazione iOS rappresenta una delle funzionalità più complesse e ad alto valore aggiunto per app di telemedicina, assistenza clienti, social e comunicazione aziendale.

Per offrire un'esperienza pari a WhatsApp o FaceTime su iPhone, è fondamentale combinare tre componenti chiave: WebRTC per lo streaming peer-to-peer a bassa latenza, PushKit per svegliare l'app in background e CallKit per mostrare la schermata di chiamata nativa di iOS anche a telefono bloccato.

1. L'Architettura VoIP per iOS

  • Signaling Server: Gestito tramite WebSockets (es. Node.js o Laravel WebSockets) per lo scambio di SDP (Session Description Protocol) e ICE Candidates.
  • STUN / TURN Server (Coturn): Indispensabile per garantire la connessione tra utenti che si trovano dietro a NAT e firewall mobili 4G/5G.
  • Framework WebRTC Nativo: Gestione dei flussi audio (Opus) e video (H.264/VP8) con hardware acceleration di iOS.

2. Integrazione CallKit per l'Interfaccia di Sistema

CallKit garantisce che le chiamate in arrivo appaiano come telefonate tradizionali di sistema, consentendo all'utente di rispondere dalla schermata di blocco o tramite CarPlay:

import CallKit

final class CallManager: NSObject, CXProviderDelegate {
    private let provider: CXProvider
    private let callController = CXCallController()
    
    override init() {
        let config = CXProviderConfiguration()
        config.supportsVideo = true
        config.maximumCallsPerCallGroup = 1
        self.provider = CXProvider(configuration: config)
        super.init()
        self.provider.setDelegate(self, queue: nil)
    }
    
    func reportIncomingCall(uuid: UUID, handle: String) {
        let update = CXCallUpdate()
        update.remoteHandle = CXHandle(type: .generic, value: handle)
        update.hasVideo = true
        
        provider.reportNewIncomingCall(with: uuid, update: update) { error in
            if let error = error {
                print("Errore ricezione chiamata: \(error)")
            }
        }
    }
}
Sviluppo App iOS Professionale & Nativo

Hai un progetto da sviluppare o vuoi creare la tua App?

Parliamo direttamente della tua applicazione. Inviami i tuoi requisiti per ricevere una stima di fattibilità e tempistiche entro poche ore con P.IVA italiana (03118460348).

Diallo Yunus

Diallo Yunus

Sviluppatore iOS Indie & Consulente Cloud

Sviluppatore professionista con oltre 11 app pubblicate su Apple App Store e referente per la monetizzazione digitale internazionale. Con base a Parma (PR), Italia e partnership operativa con Group DMS in Africa.