iOS iMessage扩展截图检测

时间:2019-03-15 03:53:17

标签: ios swift nsnotificationcenter imessage imessage-extension

请使用Swift 4 +

注意:我在iMessage扩展程序中而不是在标准iMessage视图中时正在检测屏幕截图。

更新-我想出了一个可行的解决方案,该解决方案每隔0.3秒左右在敏感信息周期内检查一次照片库,以检查是否添加了新的屏幕截图。如果用户未授予照片库许可,则在他们启用照片库之前,不会向他们显示内容。但是,我仍在寻找其他创新的解决方案,这些解决方案不一定涉及如此繁琐的过程。

我有一个iMessage扩展名,我正在尝试检测屏幕截图。我已经尝试过在网上找到的每个观察者,由于某种原因,它没有注册屏幕截图。

ViewWillAppear()

UIScreen.main.addObserver(self, forKeyPath: "captured", options: .new, context: nil)

观察者

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
    if (keyPath == "captured") {
        let isCaptured = UIScreen.main.isCaptured
        print(isCaptured)
        screenshot()
        //screenshot() sends a message alerting the message was screens hotted. However, the print statement didn't even run.
    }
}

ViewWillDisappear()

UIScreen.main.removeObserver(self, forKeyPath: "captured", context: nil)

我还尝试了标准的默认通知中心

let mainQueue = OperationQueue.main
    NotificationCenter.default.addObserver(forName: UIApplication.userDidTakeScreenshotNotification, object: nil, queue: mainQueue) { notification in
        // executes after screenshot
        print("Screenshotted")
        self.screenshot()
    }

对于声称无法在iMessage扩展程序中检测屏幕截图的人(因为它是扩展程序而不是完整的应用程序),该开发人员已经能够成功地做到这一点 Working Example

1 个答案:

答案 0 :(得分:0)

也许有点矫kill过正,但是您可以在受DRM保护的视频中转换图像,并且系统可以防止受DRM保护的视频的任何屏幕截图/屏幕共享/屏幕录制。