I'm implementing the PushToTalk framework and have encountered an issue where channelManager(_:didActivate:) is not called under specific circumstances.
What works:
- App is in foreground, receives PTT push → didActivate is called ✅
- App receives audio in foreground, then is backgrounded → subsequent pushes trigger didActivate ✅
What doesn't work:
- App is launched, user joins channel, then immediately backgrounds
- PTT push arrives while app is backgrounded
- incomingPushResult is called, I return .activeRemoteParticipant(participant)
- The system UI shows the speaker name correctly
- However, didActivate is never called
- Audio data arrives via WebSocket but cannot be played (no audio session)
Setup:
- Channel joined successfully before backgrounding
- UIBackgroundModes includes push-to-talk
- No manual audio session activation (setActive) anywhere in my code
- AVAudioEngine setup only happens inside didActivate delegate method
- Issue persists even after channel restoration via channelDescriptor(restoredChannelUUID:)
Question: Is this expected behavior or a bug? If expected, what's the correct approach to handle incoming PTT audio when the app is backgrounded and hasn't received audio while in the foreground yet?