IOS iMessage扩展截图检测
Posted
技术标签:
【中文标题】IOS iMessage扩展截图检测【英文标题】:IOS iMessage extension screenshot detection 【发布时间】: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 谢谢!我无法让它工作,但希望其他人有解决方案 【参考方案1】:也许有点矫枉过正,但您可以在受 DRM 保护的视频中转换您的图像,并且系统可以防止任何受 DRM 保护的视频的屏幕截图/屏幕共享/屏幕录制。
【讨论】:
我该怎么做?我不确定我完全理解你在说什么 FairPlay 是一种保护您的视频内容不被盗的 drm 技术(Widevine 另一个例子)。系统级别的 ios 不允许制作此类内容的屏幕截图/视频(如果此处的屏幕截图仅黑屏)。因此您可以呈现受保护的视频而不是图像 如果您只想知道是否已截取屏幕截图,这可能真的很繁重。但是,如果您想完全阻止它们,这可能是最好的方法 这似乎是个好主意,唯一的问题是我呈现的是文字,而不是照片。因此,尝试将文本转换为静态视频可能有点矫枉过正,哈哈 @LeviK 文本是一堆像素,你知道 :D以上是关于IOS iMessage扩展截图检测的主要内容,如果未能解决你的问题,请参考以下文章
iOS 10 iMessage 应用扩展:如何计算超高导航栏的高度
Admob 不会为 iOS 10 iMessage 应用扩展加载广告