Dear Apple Team,
I have two questions regarding the Push-to-Talk framework on iOS 18:
-
Would it be possible to disable or hide the “Leave” button in the system screen? Currently, only the “Talk” button can be disabled when using the "Listen Only" mode, but the “Leave” button remains active. It would be very helpful to have the option to control or hide this button as well, depending on the use case. At the moment, I can only detect if the user pressed the "Leave" button by checking the PTChannelLeaveReason. However, this alone is not sufficient to prevent unwanted user actions or to guide the user experience more precisely in certain scenarios.
-
I only receive the APNs push notification “type: voip-ptt“ once per active channel. My app is running in the background, and I frequently switch between full- and half-duplex to allow users to reply immediately. After some time, even though a new notification should be triggered, no banner is shown. When I try to talk via the framework, the active speaker is correctly updated, but no notification appears. Only after leaving and rejoining the channel do I receive a new notification – and again, just once.
Could you please let me know whether this is expected behavior or if it might be a bug?
Thank you very much in advance. Best regards, Eugen
Would it be possible to disable or hide the “Leave” button in the system screen?
No. You can certainly file an enhancement request asking for use to provide/tweak what we show here, but the system is always going to provide some way for the user to directly stop the PushToTalk session. That's because one of the primary goals of the PushToTalk framework was providing user level control over this.
I only receive the APNs push notification “type: voip-ptt“ once per active channel.
My forum post here goes into this in depth, but the quick summary is that you shouldn't think of the PushToTalk framework's "channel" as the same thing as your apps. The PushToTalk framework's channel is simply it's connection to your app. There will ONLY ever be one of them and you should not be creating/leaving/joining that channel dynamically. You join it when your PTT session starts and you don't leave it until you session is done. Again, see my other forum post for more details on that means in practice.
My app is running in the background, and I frequently switch between full- and half-duplex to allow users to reply immediately.
A few things here:
-
What are you actually trying to do here? Full duplex means "both users can talk at the same time" while half duplex means "only one user can talk". In hindsight, I'm not sure we should have bothered with half duplex at all. The vast majority of apps don't use it and, in practice, I think any true half duplex app would be better off implementing their own behavior on top of full duplex.
-
Changing the transmission mode does NOT require changing the active system channel. You can just change it on the current channel.
-
Changing the tranmission mode does disrupt the audio session, so changing it while your actively playing/transmitting is a bad idea.
One big conceptual point here- just like CallKit, the PushToTalk framework is an INTERFACE framework. It doesn't DO anything. Your app ultimately has full control over EVERYTHING you actually transmit or record.
Could you please let me know whether this is expected behavior or if it might be a bug?
I can't say for sure but my guess is that you're inadvertently using the framework in a way that just doesn't work. Take a look at what I wrote above, then let me know how that fits with your use case and experience.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware