iOS 11:是否可以阻止屏幕录制?

6
我有一个播放视频的应用程序,我不想让人们使用新的iOS-11功能来录制这些视频并公开发布。该功能在此处描述:这里
我找不到任何关于我的应用程序防止用户录制它的选项的文档。
请问是否有人能够指导我相关信息?
谢谢!

1
你安装了beta版本并尝试过吗?快速查看ReplayKit文档显示:“ReplayKit与AVPlayer内容不兼容。”这似乎表明,如果你的应用程序通过AVPlayer播放视频,则屏幕录制实用程序将无法记录它。 - DonMag
谢谢@DonMag。我还没有尝试过,但会试一试。我不知道ReplayKit有与操作系统功能行为相同的规则,所以没有去看那里。 - ishahak
好的,测试表明完全可以捕获AVPlayer的输出。我使用了我的年度权利向苹果请求支持,并将在下面发布他们的回复。 - ishahak
Netflix和Amazon Prime的iOS应用程序正在使用苹果设备的Apple DRM解决方案 - FairPlay(https://developer.apple.com/streaming/fps/)。当AVPlayer播放FairPlay加密内容时,它无法被iOS11中的屏幕录制捕获。 - Erkam KUCET
2个回答

15
我在此发布了来自 Apple Developer Technical Support(DTS)的官方回应:
虽然没有办法防止屏幕录制,但作为 iOS 11 的一部分,UIScreen 上有新的 API 可供应用程序使用以知道屏幕何时被捕捉: UIScreen.isCaptured 实例属性 UIScreenCapturedDidChange 通知类型属性 屏幕内容可以被记录、镜像、通过 AirPlay 发送或克隆到另一个目标。当屏幕的捕获状态发生更改时,UIKit 发送 UIScreenCapturedDidChange 通知。
通知的对象是其 isCaptured 属性更改的 UIScreen 对象。没有 userInfo 字典。然后,您的应用程序可以处理此更改,并以适合您的使用方式防止捕捉您的应用程序内容。
希望能帮到您!

3

该功能可在iOS11及以上版本中使用。最好将其放置在didFinishLaunchingWithOptions中。

Objective-C语法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  if (@available(iOS 11.0, *)) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenCaptureChanged) name:UIScreenCapturedDidChangeNotification object:nil];
    }

    return YES;
 }




-(void)screenCaptureChanged{

if (@available(iOS 11.0, *)) {

    BOOL isCaptured = [[UIScreen mainScreen] isCaptured];// will keep on checking for screen recorder if it is runnuning or not.

    if(isCaptured){

        UIView *colourView = [[UIView alloc]initWithFrame:self.window.frame];

        colourView.backgroundColor = [UIColor blackColor];

        colourView.tag = 1234;

        colourView.alpha = 0;

        [self.window makeKeyAndVisible];

        [self.window addSubview:colourView];

        // fade in the view

        [UIView animateWithDuration:0.5 animations:^{

            colourView.alpha = 1;

        }];

    }else{

        // grab a reference to our coloured view

        UIView *colourView = [self.window viewWithTag:1234];

        // fade away colour view from main view

        [UIView animateWithDuration:0.5 animations:^{

            colourView.alpha = 0;

        } completion:^(BOOL finished) {

            // remove when finished fading

            [colourView removeFromSuperview];

        }];

    }

} else {

    // Fallback on earlier versions

    // grab a reference to our coloured view

    UIView *colourView = [self.window viewWithTag:1234];

    if(colourView!=nil){

        // fade away colour view from main view

        [UIView animateWithDuration:0.5 animations:^{

            colourView.alpha = 0;

        } completion:^(BOOL finished) {

            // remove when finished fading

            [colourView removeFromSuperview];

        }];

    }

}

}


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