在未经用户授权的情况下删除在 iOS => 9 中拍摄的最后一个屏幕截图?
Posted
技术标签:
【中文标题】在未经用户授权的情况下删除在 iOS => 9 中拍摄的最后一个屏幕截图?【英文标题】:Delete last screenshot taken in iOS =>9 without user authorisation? 【发布时间】:2019-01-10 07:14:24 【问题描述】:我要求在 ios 设备中禁用截屏。由于 Apple 不对此提供支持,我尝试的另一个解决方法是 - 在使用 UIApplicationUserDidTakeScreenshotNotification
拍摄屏幕截图时收到通知,并从照片库中获取最后一张照片并将其删除,如下代码所示 -
func deleteLastTakenScreenshotFromLibrary()
let fetchOptions: PHFetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
if (fetchResult.firstObject != nil)
var firstAsset: PHAsset = fetchResult.firstObject as! PHAsset
let arrayToDelete = NSArray(object: firstAsset)
phphotoLibrary.shared().performChanges(
PHAssetChangeRequest.deleteAssets(arrayToDelete),
completionHandler:
success, error in
print("Finished deleting asset. %@", (success ? "Success" : error))
)
但在这里我发现了 2 个问题 -
a).app 正在请求用户许可,例如 Allow <App Name> to delete this photo? This photo will be deleted from iCloud Photo Library on all your devices.
b).点击allow
后,应用不会永久删除最后一张照片。
即使我在info.plist
中添加了以下权限
1).Privacy - Photo Library Usage Description
2).Privacy - Media Library Usage Description
我不知道如何才能满足这个要求。请帮助,非常感谢您的帮助。谢谢。 :)
【问题讨论】:
Apple 不会让您在未经用户许可的情况下从用户的照片库中删除内容。防止屏幕截图本质上是没有意义的,因为即使您可以,如果用户真的想捕获屏幕,他们也可以简单地拍摄他们的屏幕 当您从应用程序中删除图像时,首先会出现一个对话框询问用户是否要删除它,然后它将照片粘贴在最近删除的文件夹中。你无法绕过这些。 最近删除的文件夹中的图片也可以删除吗? 【参考方案1】:来自PHPhotoLibrary
的文档:
对于 performChanges(:completionHandler:) 或 performChangesAndWait(:) 方法的每次调用,Photos 都会显示一条警报,询问用户是否允许编辑照片库的内容。
【讨论】:
嗨 Gereon.. 你能建议解决这个问题吗? 没有。据我所知,您的要求无法实现。 好的..我们可以在按下主页按钮时隐藏视图内容吗? 是的,在applicationDidEnterBackground
。
我在 appdelegate 中使用了applicationDidEnterBackground
事件,它仅在用户按下主页或锁定按钮时有效,但对于主页+锁定(用于屏幕截图),它不起作用.. Gereon 有什么建议吗?以上是关于在未经用户授权的情况下删除在 iOS => 9 中拍摄的最后一个屏幕截图?的主要内容,如果未能解决你的问题,请参考以下文章
Django Rest Framework 和 React 前端:如何防止未经授权的用户在获得图像 URL 的情况下查看私人图像?