Hi, Team.
We are currently creating a VoIP calling app using pjsip and want to be able to handle 4 calls at the same time. It is also necessary to be able to notice calls that are on hold or have not answered yet in hands-free (without looking the screen). However, It seems like CallKit has the intention to silence the ringtone when multiple calls come in.
Problem
What does actually happen?
- If a second call comes in while the first one have not answered yet, CallKit screen keeps showing about the first one.
- If tapped "Accept" button, the second call ends.
- If tapped "Decline" button, CallKit screen shows about the second call at last.
- If the first call has put on hold before the second one comes in, CallKit screen shows "Hold & Accept" button even though the first call is already on hold.
- When "Hold & Accept" button is displayed, ringtones and other sounds from app stop.
- When tapped "Hold & Accept" button for the second call and then unhold the first one in
provider(_ provider: CXProvider, perform action: CXAnswerCallAction)
, ringtone of the first call doesn't ring.
What is expected to happen?
- If a second call comes in while the first one have not answered yet, CallKit screen shows about the second call.
- If tapped "Accept" button, the second call starts and the first call is displayed on CallKit screen.
- If tapped "Decline" button, the first call appears again.
- If the first call has put on hold before the second one comes in, CallKit screen shows only "Accept" and "Decline" button (not in full screen).
- If a second call comes in while the first one have not answered yet, ringtones continue to ring.
- When accepted the second call, ringtone of the first call rings again.
Information
Sample code
Using CallKit to simulate three incoming calls and two alarm notifications. Whether or not the first call is put on hold before the second one comes in is switchable from the bottom menu. https://github.com/ryu-akaike/CallKit-Multiple-Incoming-Test
Versions
macOS: Sequoia 15.1
Xcode: 16.2
iPhone: 11
iOS: 18.1.1
Thank you.
Ryu Akaike