Summary of impacting changes
Previously, VoIP/IM apps leveraged PushKit VoIP notifications in order to be launched or resumed in background, in order to connect to their server, retrieve the pending call or message information, and display it to the user, either using Callkit or a local notification.
For apps compiled with iOS13 SDK (ie Xcode 11), this is no longer possible: apps are required to display a CallKit call immediately after being notified of a PushKit VoIP notification.
Apple has justified this change by the requirement to protect against apps that receive frequent PushKit notifications from their servers in order to collect user information in background (location, IP address...), without their consent.
Apple has informed publicly that starting April 2020, all apps submitted to the Apple Store will be required to be compiled against an iOS 13 or more SDK. Until this date, it is still possible to submit apps and apps' updates compiled with Xcode 10, and such apps will continue to run on iOS13 as they would be running on iOS12.
Consequences for apps and servers
For call handing:
- PushKit VoIP notifications must now only be used to notify calls, not messages.
- When a PushKit VoIP notification is received by an app, it must immediately invoke CallKit to display the call to the user, even if the app has not connected yet to the server, and hence does not have all the information about the call, such as the caller's identity. When the app finally obtains the call information (the INVITE message in SIP), which should arrive shortly, it can update the CallKit view to add the previously missing information.
If the user decides to answer the call before receiving the INVITE, the app can inform the user (through CallKit) that the call connection is in progress, and when later the INVITE finally arrives, the call shall start immediately.
- If an app does not want to use CallKit, for example a door entry app using early media to display video before the call is accepted, classic push notifications shall be used. A push notification handler app extension [2] may be used to enhance the user experience, for example to display the video.
For IM:
Classic push notifications (not VoIP PushKit ones) shall be used to notify IM apps about incoming messages. It may not be desirable in many cases to carry the IM text inside the push notification (for example when the text is ciphered). To cover this case, a push notification handler app extension [2] is required too. The app extension can connect to the server, perform unciphering of the message content, and display it as a local notification to the user.
Our plan
Belledonne Communications' engineers are currently working on implementing changes in Linphone iOS app and Flexisip server in order to adapt to these new iOS13 constraints. These works comprise of three aspects:
- changes in the Linphone app CallKit integration
- the development of a Linphone app extension to handle IM notifications
- changes in Flexisip to accomodate with iOS13 apps requirements
These developments are expected to be completed and released in December 2019, so that our customers can have a Linphone reference source code to adapt their apps.
Meanwhile, we recommend to keep using XCode 10 in order to submit apps and apps' updates to the Apple Store.
For customers subscribed to a specific maintenance contract for their app, please note that we will contact you directly in the coming weeks, to discuss the required modifications.
[1] https://forums.developer.apple.com/thread/117939
[2] https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension