The log is from our server log, no clue about the user devices.
OK. So the critical point to understand is that issues like this CAN'T actually be investigated using only server or app log data. The problem here is that virtually any network-level issue always has two explanations:
a). Something went wrong in the app/system.
b). Something happened to the physical device that made the resulting behavior inevitable.
The only way to separate those two cases is to have some amount of information about what the device was actually "doing". Even worse, trying to investigate WITHOUT being able to separate those two cases is often far less useful than you might think. The problem here is that, even if/when there is a real issue, the second case (b) is almost always present, which ends up masking the evidence that would otherwise be useful.
I'll also note that my entire explanation is ENTIRELY speculative. As another possibility, it's also possible that callservicesd is/was crashed and that the delayed VoIP push was simply a side effect of its relaunch. It's also possible that changes in our frameworks are blocking your PushKit thread in a way that previous releases happened to not block it.
That's two more possibilities off the top of my head, but the key point is that there isn't any way to know or investigate more deeply without actual data about/from the device itself. Without that information, all you can really do is speculate.
Case in point:
Why and when will a device be offline?
I have no idea. You’re asking this question with the assumption that the system had some involvement with the process, when the actual issue could be no more complicated than the user losing connectivity when they got on the subway.
How to avoid it?
Same answer, as above.
We saw a peak of “disordered notification" on the iOS 26.4+. I don't know if there is a change or an issue here.
OK. Out of curiosity, how closely have you compared your earlier behavior to the current behavior? In particular:
- Is the rate of "paired notifications" (meaning, your app received both notifications for a given call) the same or different?
If the rate has changed, then this might simply be a case of notifications reaching the device that were previously discarded.
- On previous versions, what was the time gap between the two pushes IF the VoIP push was delayed by a substantial amount?
As I alluded to above, under the right circumstances, there's an inherent race condition between the delivery of standard pushes and VoIP pushes. It's possible changes to the system have simply "flipped" that race, not that anything has fundamentally changed.
Finally, and perhaps most importantly, why do you care about this?
Ultimately, you were ALWAYS going to do one of two things with this call:
-
Report the call and then end it.
-
Not report the call at all (using the new delegate we just introduced to support this)*.
In both cases, getting the silent push "first" should have actually IMPROVED your app, not hurt it, since you now have earlier information about what you're going to do with the call.
*You have adopted the new delegate, right?
BTW, I posted the apns-id above, are they helpful?
In my experience, no, not really. Looking at this from the APNs server side can be helpful if you're trying to investigate a specific issue that you've already tied to some other external factor. For example, a few teams have found it helpful as a way to confirm local NAT failures. They were already investigating a particular location and device set where pushes were failing in a systemic way and they'd found through sysdiagnose data that the device itself "thought" it had a working push connection. Our server logs showed that connection was NOT functional, which led back to the underlying cause, which was a poor NAT implementation which was breaking the connection and notifying the server but NOT notifying the client.
However, that's the exception, not the rule. Blindly checking individual push failures generally only tells you exactly what you already knew or suspected— namely that the push left our server shortly before it reached the device and that it was delivered as "soon" as it could have been.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware