Not possible to block Voip calls with iOS 13?

CallKit's call directory extension can be used to block standard phone calls.

However how is blocking a VoiP call supposed to work with iOS 13?



When there is a Voip call your app receives a voip push, but now with iOS 13 Apple are mandating that when the push is received the app *must* call CXProvider.reportNewIncomingCall().



However when reportNewIncomingCall() is called, the OS displays an incoming call screen (which is not the same as for a regular incoming call). It is apparently not possible for this call screen to be suppressed, and even if reportNewIncomminCall() is invoked with a parameter which is a phone number which has been registered as blocked with the CallKit extension, the call screen will still be displayed.



So it would seem it is impossible for an application to offer the ability to block a Voip phone call (unless the app sends its list of blocked numbers to the server, and the server doesn't send the push for a particular handset for blocked numbers. But if the app is installed on hundreds of thousands or millions of handsets that is a big implementation to manage on the server side without considerable undertaking).

Replies

Reply from Apple:


3) Block-lists/Do Not Disturb


CallKit respects the system Do Not Disturb setting, so most apps will not have to worry about system-level Do Not Disturb functionality. If your app has it's own blocking/do not disturb system built in, you can also maintain that list server-side and not send pushes to the blocked devices. If you absolutely need to do "local" call blocking, then you can report a call and then end it. The call will be briefly visible to the user, but you can also configure the source of the call to communicate what's going on ("Blocked Call...").