How CallKit Adds VoIP Calls to iOS 16 Call History
Apple’s CallKit framework bridges third-party Voice over IP (VoIP) applications—such as WhatsApp, Microsoft Teams, and Zoom—with the native iOS telephony interface. In iOS 16, CallKit enables third-party apps to register incoming and outgoing calls directly into the native Phone app's "Recents" call log. By utilizing standardized system APIs, CallKit ensures that VoIP calls appear alongside traditional cellular calls, allowing users to view metadata, check timestamps, and return missed calls seamlessly.
The Role of CXProvider and Call Reporting
The integration relies primarily on the CXProvider
object, which acts as the intermediary between the VoIP application and
the iOS operating system. When a call occurs, the app communicates state
transitions to CallKit rather than handling the call screen and logging
independently.
For incoming calls, the workflow operates as follows:
- Push Notification: The app receives a high-priority VoIP push notification via Apple’s PushKit framework.
- Call Creation: The app initializes a
CXCallUpdateobject containing caller metadata, such as the contact name and handle (phone number, email, or username). - System Registration: The app calls
reportNewIncomingCall(with:update:completion:)on itsCXProviderinstance.
Once this method executes, iOS 16 wakes the native calling interface and automatically logs the event into the central call database.
Outgoing Call Logging
For outgoing calls, the app requests a CXStartCallAction
from a CXCallController. Once the system authorizes the
action, the transaction is marked complete, and iOS registers the
outgoing attempt in the native call history. This ensures that calls
initiated within the VoIP app or via Siri are immediately reflected in
the iOS 16 Recents tab.
Data Stored in the Native Call History
iOS 16 stores specific metadata provided by the third-party app's CallKit implementation:
- Caller Identification: Display names and handles
specified in
CXHandle. - Service Provider: The app's name and icon appear beneath the contact's name, distinguishing the VoIP service from standard cellular calls.
- Call Metrics: Start time, duration, and call status (missed, received, or outgoing).
Callbacks from the Recents List
CallKit integration goes beyond passive logging by enabling
bi-directional interaction. When a user taps a VoIP entry in the iOS 16
Recents tab, the system does not place a standard cellular call.
Instead, iOS uses SiriKit and CallKit (INStartCallIntent)
to launch the associated third-party app directly and pass the contact
handle, initiating a return call through the original service.