iOS iMessage扩展截图检测

Lev*_*i K 15 nsnotificationcenter ios imessage swift imessage-extension

请使用Swift 4+

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

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

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

ViewWillAppear()

UIScreen.main.addObserver(self, forKeyPath: "captured", options: .new, context: nil)
Run Code Online (Sandbox Code Playgroud)

观察者

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.
    }
}
Run Code Online (Sandbox Code Playgroud)

ViewWillDisappear()

UIScreen.main.removeObserver(self, forKeyPath: "captured", context: nil)
Run Code Online (Sandbox Code Playgroud)

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

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

对于谁声称这是不可能的iMessage的延期内检测截图,因为它是一个扩展,而不是一个完整的应用程序的人,该开发商已经能够成功地做到这一点 工作实例

Man*_*ear 1

也许这有点矫枉过正,但您可以将图像转换为受 DRM 保护的视频,并且系统会阻止对受 DRM 保护的视频进行任何屏幕截图/屏幕共享/屏幕录制。