如何在iOS 11中防止屏幕录制

4
由于某些原因,我们的应用程序不希望用户录制屏幕,但在iOS 11中,有一个新功能可以允许用户录制他们的iPhone屏幕。那么是否有一个API或通知可以告诉我用户现在正在录制呢?非常感谢。

你无法完全防止这种情况的发生。即使苹果允许禁用录制功能,越狱手机也可能会绕过它,而且最终,使用相机录制屏幕总是有可能的。 - Carcigenicate
我现在不考虑越狱,你知道iOS11有这样的API吗? - Wong Sam
不,我已经很久没有涉及苹果了。 - Carcigenicate
2个回答

7

您可以使用以下代码检测屏幕是否正在录制:

UIScreen.main.isCaptured
// True if this screen is being captured (e.g. recorded, AirPlayed, mirrored, etc.)

您无法通过项目设置来防止这种情况发生,但是您可以使用模态框或其他方式请求用户禁用它。不确定这对您的AppStore提交会有什么影响。


这不仅是屏幕截图,还包括使用Airplay进行镜像。因此并不是完全的解决方案。 - birdcage
我知道,这就是为什么我添加了一个注释来反映它。 - nathan
值得注意的是,在测试中我已经多次看到这个值返回了错误的结果。我们经常遇到一个bug,即使我们正在使用屏幕录制,但isCaptured返回false。 - FateNuller
1
如何检测 iOS 11 以下的版本? - Amrit Tiwari
@WongSam 如果这是解决您问题的正确答案,请不要忘记接受它(绿色勾号);) - Ahmad F
如果UIScreen.main.isCaptured为真,则如何停止该记录?我通过在控制中心按下RECORD按钮来开始屏幕录制,然后立即打开我的应用程序,然后必须通过编程方式停止该记录。 - McDonal_11

0

在iOS 11中,您可以像这样使用KVO观察UIScreenCapturedDidChangeNotification

NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
    [[NSNotificationCenter defaultCenter] addObserverForName:UIScreenCapturedDidChangeNotification object:nil queue:mainQueue usingBlock:^(NSNotification * _Nonnull note) { 
 //code you want execute
}];

那不是 KVO。 - allenh
你不需要或者想要KVO。通知观察者是正确的。 - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接