OTT VoIP made easy on iOS10
Anyone who once received an OTT VoIP call on an iOS device knows the drill, you need to unlock the phone, get back to that notification and answer the call hoping you did all of this fast enough so call didn’t timeout. If an incoming, operator generated, call would come in while you are on a VoIP call it would override that VoIP call putting it on hold without letting the user make his choice as is done with 2 telephony calls through call waiting.
This dialer priority problem is part of the overall OTT VoIP calls experience problem that is a roadblock for OTT VoIP calls to really replace telephony mobile calls.
In iOS10, Apple introduced CallKit which comes to put an end to this challenge by giving OTT VoIP apps the ability to offer on a par experience with telephony calls. CallKit connects between the phone’s system services such as telephony and audio devices to VoIP applications. VoIP applications that decide to make use of CallKit will interact with CallKit when making calls, receiving calls or performing actions on a call such as muting it.
Some of the benefits from user experience perspective:
- Incoming calls are alerted and answered in the same way telephony calls are, goodbye to that terrible locked screen experience when answering a VoIP call
- The system knows about all calls, telephony or VoIP, and handles them in the same priority. This means that if a user is on an operator phone call and wants to make a VoIP call, the telephony call will be placed on hold
- Incoming telephony call no longer automatically put VoIP calls on hold but rather are viewed as call waiting
- It is possible to swap between active and held calls regardless if they are VoIP or telephony calls
- VoIP calls are visible on recent calls and included in user’s contact information
- VoIP calls are visible and easily returned to from home screen
Here are some snippets from the Apple WWDC 2016.
This is how an incoming call works with CallKit. Instead of that push notification coming up on your screen the iOS system will actually view it as a call, not just a notification.
And this is how an outgoing VoIP call looks like now.
In both cases call setup goes through updating CallKit and the iOS system so multiple calls can be managed properly as seen in the call waiting example below. It now doesn’t matter what type of call it is, VoIP or operator one, all calls are born equal.
Screenshot below shows how a VoIP call remains active in home screen so returning to it is just like it was with operator telephony calls before.
Some OTT providers have already adopted CallKit and introduced it in their applications; this includes Cisco Spark and Vonage.
Not technical but a strategic business decision
To date, Apple made life of VoIP app developers pretty complex. Android was more open in this sense (as in many other things). The decision of Apple to give VoIP calls the same priority as operator telephony calls is not a technical decision, it is a strategic decision to pull the rug out from under the operators’ advantage around user experience.
As OTT VoIP and operator calls are made equal on iOS10 users will become more indifferent as to which service to use. This makes OTTs stronger and when looking specifically at the business sector, it makes the embedding of telephony in business communications and collaboration services more natural.
Fred Clark says
Can this feature be used for a WebRTC call as well assuming it is a Native Application?
Amir Zmora says
Sure. The fact WebRTC happens to be the media engine of that application doesn’t impact the option of using CallKit. It is still a VoIP call and the application may make use of CallKit.
Erika says
How do I get rid of this calkit or can I have my apps not link to my phones call history? There is a reason I have app to make separe calls and msgs I don’t need them linked to my phone it is annoying. HELP
Amir Zmora says
Simply don’t use it in your app. You need to explicitly decide to use it and link to it in order to activate the capabilities it brings.
Andrei says
On Call Waiting screen: if you press ‘Hold and Accept’ would you
be given option to merge calls and create 3-way conference?
Will it work if one call is phone and other is VOIP?
Amir Zmora says
Hi Andrei,
Unfortunately CallKit doesn’t enable establishing 3-way calls between a VoIP call and a PSTN one. This is probably since the 3-way call feature is service provider dependent.
Amir
Chris Chan says
I have an existing app that using webRTC, how can implement callkit on top the webRTC ?
Amir Zmora says
Hi Chris,
To get your WebRTC application to use CallKit you will need to integrate your call flow with the CallKit framework.
Take a look at the Apple documentation (https://developer.apple.com/reference/callkit) for more information.
Amir
Chris Chan says
Thanks Amir,
Michael says
Could you have a service work in background to intercept any outgoing call, detect if it is an international number and launch the voip app?
Amir Zmora says
Hi Michael,
This is not so much related to CallKit functionality. CallKit is a closed library from Apple that knows about all calls on the device. It doesn’t handle diverting calls from one app to the other.
What you could do is have the user dial from your app and then if your app detects it is a local call handle it through the phone’s dialer similar to clicking on a phone number on a website that results in opening of the dialer.
Once the user decided to call from the phone dialer that’s where the call will go out from.
Michael says
But then you couldn’t have an app work in background mode with the CalllKit funtionality to detect outgoing calls from the native call app and manipulate them, could you?
Amir Zmora says
Right. I don’t think that is possible. The purpose of CallKit is not to move a call from the phone dialer to other apps but just to be able to manage calls of different applications + dialer as real calls with similar priority.