【发布时间】:2019-08-06 02:26:22
【问题描述】:
请使用 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
【问题讨论】:
-
你的问题不太清楚,你打算如何检测用户在没有扩展名的情况下截取了一条消息?
-
@Tom 这是扩展程序打开时,而不仅仅是在标准 iMessage 视图中。我将问题更新为更明确
-
您能否详细说明您是如何测试的?
-
@Tom 我正在使用两部 iPhone,它们都在运行应用程序,而不是模拟器
-
@Tom 谢谢!我无法让它工作,但希望其他人有解决方案
标签: ios swift nsnotificationcenter imessage imessage-extension