如何在没有 RPSystemBroadcastPickerView 的情况下以编程方式停止 ReplayKit 2 系统广播
How to programatically stop a ReplayKit 2 system broadcast without RPSystemBroadcastPickerView
我正在尝试实现广播上传扩展,我希望用户能够单击我的应用中的按钮来停止广播。
据我从文档中得知,停止系统广播的唯一方法是:
- 在应用程序中显示
RPSystemBroadcastPickerView
,当用户点击它时,他们会被带到系统 UI 并在那里停止广播。
- 通过其他方式向广播扩展发出停止信号,并在
RPBroadcastSampleHandler
中调用 finishBroadcastWithError
,这将向用户显示一个错误弹出窗口。 Zoom 好像用了这个技巧
然而,我今天在 Facebook Messenger 上尝试屏幕共享功能,他们以某种方式绕过了系统 UI(仅停止流)。
当我点击停止按钮时,屏幕共享立即停止并且不显示系统 UI 或错误弹出窗口
他们是怎么做到的?
我最好的猜测是他们以某种方式获得了一个有效的 RPBroadcastController
对象,但我不知道如何获得。
终于搞清楚了。
你基本上只需要将 nil
传递给 finishBroadcastWithError
。它会发出警告,因为该错误不可为空,但您可以通过以下方式使它安静下来:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
[self finishBroadcastWithError:nil];
#pragma clang diagnostic pop
我正在尝试实现广播上传扩展,我希望用户能够单击我的应用中的按钮来停止广播。
据我从文档中得知,停止系统广播的唯一方法是:
- 在应用程序中显示
RPSystemBroadcastPickerView
,当用户点击它时,他们会被带到系统 UI 并在那里停止广播。 - 通过其他方式向广播扩展发出停止信号,并在
RPBroadcastSampleHandler
中调用finishBroadcastWithError
,这将向用户显示一个错误弹出窗口。 Zoom 好像用了这个技巧
然而,我今天在 Facebook Messenger 上尝试屏幕共享功能,他们以某种方式绕过了系统 UI(仅停止流)。 当我点击停止按钮时,屏幕共享立即停止并且不显示系统 UI 或错误弹出窗口
他们是怎么做到的?
我最好的猜测是他们以某种方式获得了一个有效的 RPBroadcastController
对象,但我不知道如何获得。
终于搞清楚了。
你基本上只需要将 nil
传递给 finishBroadcastWithError
。它会发出警告,因为该错误不可为空,但您可以通过以下方式使它安静下来:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
[self finishBroadcastWithError:nil];
#pragma clang diagnostic pop