请使用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扩展中检测截屏,因为它只是一个扩展而不是完整的应用程序。但是,这位开发者已经成功地做到了。 工作示例