iOS 15 PushKit VOIP Not Received When App is Not Running

After updating to iOS 15, our app is no longer receiving voip notifications when in a not running (killed) state. However, voip notifications come through just fine if the app is in the foreground or background.

This behavior is specific to iOS 15, as testing the same exact build on iOS 14 works in all 3 states: foreground, background, & killed. Looking through the device console, I see the following logs coming through when running the app on iOS 15:

Killing VoIP app because it failed to post an incoming call in time

VoIP app failed to post incoming call

and then eventually:

VoIP app no longer eligible to launch

I'm aware about needing to report the call to CallKit immediately - this is what we're doing (i.e. it works fine on iOS 14). And after reviewing the PushKit & CallKit docs, I see no changes that would affect this.

Also, I tested this with the Facebook Messenger app, and the same problem was happening; no voip received when the app is killed on iOS 15, but on iOS 14 it works fine.

Anyone know what's going on here?

Answered by mitch.airvet in 689563022

Not entirely sure what changed between iOS 14 & 15, but initializing the push registry with a custom queue (non-main) seems to fix the problem:

PKPushRegistry(queue: self.voipQueue)

Really confusing that the public-facing PushKit API hasn't changed between these releases, but something under-the-hood was tweaked enough to cause these issues. That being said, there is a small note in the PushKit docs that lead me to this answer: "It is recommended that you specify a serial queue for this parameter". Maybe this point should be emphasized more 😆

Accepted Answer

Not entirely sure what changed between iOS 14 & 15, but initializing the push registry with a custom queue (non-main) seems to fix the problem:

PKPushRegistry(queue: self.voipQueue)

Really confusing that the public-facing PushKit API hasn't changed between these releases, but something under-the-hood was tweaked enough to cause these issues. That being said, there is a small note in the PushKit docs that lead me to this answer: "It is recommended that you specify a serial queue for this parameter". Maybe this point should be emphasized more 😆

Same issue is coming for me. Working fine on iOS 14. Has anyone found the fix to this issue. Currently stuck on it.

Any solutions?

Try to store PKPushRegistry object in AppDelegate. And you also should create PKPushRegistry object, set delegate and desiredPushTypes for it in 'application didFinishLaunchingWithOptions".

iOS 15 PushKit VOIP Not Received When App is Not Running
 
 
Q