What's Fixed
Server — Pager alert VoIP push sent for all calls regardless of user preference
pager_alert: "true"was unconditionally added to every call notification, and VoIP tokens were included for all calls — meaning every iOS device with a VoIP token received a PushKit/CallKit wake for every call, even talkgroups where the user never enabled pager-style playbackresolveUserPagerAlert()now reads from the in-memoryPreferencesCache(O(1), no DB round-trip) and returns whether the user has pager-style audio enabled for that specific talkgroup, with tone-set-level override support- VoIP tokens and the
pager_alertflag are now only included whenresolveUserPagerAlert()returns true for that user+talkgroup combination - Fix applied to both
sendPushNotification(single-user) andsendBatchedPushNotificationWithToneSet(multi-user) paths
Server — resolveUserAlertSound hitting the database on every notification
resolveUserAlertSoundwas issuing aSELECTper user per call instead of using the in-memory cache- Both
resolveUserAlertSoundand the newresolveUserPagerAlertnow read fromPreferencesCache.GetPreference(), consistent with the alert engine and keyword matcher
Relay Server — content-available: 1 set on every iOS FCM message
content-available: 1was instructing iOS to wake the app silently in the background for every push, including disconnect notifications- This caused the background FCM handler to trigger reconnect on disconnect notifications, restarting the scanner audio even when the user had closed the app
content-available: 1is now only set whenpager_alert == "true"is present in the payload