Hi,
Since version 2.20.31, released a few days ago, WhatsApp is being built with the iOS 13 SDK, and as such it should have to comply to the new VoIP push notification rules, where an incoming call must be reported to CallKit otherwise the app will be terminated.
However we can easily observe from console logs that they are sending VoIP push notifications to awake the app when sending messages from the web client, and that those push notifications not only do not show any native CallKit UI but also keep the app awake long enough to sync with the web client:
default 17:09:44.127516+0000 apsd : Received message for enabled topic 'net.whatsapp.WhatsApp.voip' onInterface: NonCellular with payload '{
c = 1;
id = 3EB0128F27BBDC904743;
t = 1583860183;
}' with priority 10 for device token: NO
default 17:09:44.146511+0000 SpringBoard Received trusted open application request for "net.whatsapp.WhatsApp" from :343>.
default 17:09:44.515731+0000 callservicesd Call source registered with configuration
The logs also mention some type of call source reported but I could not find any related API.
From my experience with VoIP pushes, if we don't report the incoming call the app is instantly killed:
error 18:56:19.949023+0000 callservicesd Killing VoIP app com.xxxxxx.xxxxxx because it failed to post an incoming call in time.
So, how are they doing this? Is there a specific API to report the incoming call as being handled in-app and not requiring the native call UI to be shown? Or are they using some kind of private entitlement that whitelists the app so it doesn't get killed?
I'm asking because my app, while fully supporting regular content pushes, we had to drop a web client -like functionality because we could no longer send VoIP pushes to wake the app and reconnect the web socket, and we very much would like to know how we can reactivate it.
Thanks in advance for any help.