在未经用户授权的情况下删除在 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 的情况下查看私人图像?

未经授权的所有用户的 Firebase 数据

如何在春季启动中从未经授权的响应中删除变量

在未经授权的情况下调用 RESTful api 时遇到问题?

Wso2用户未经授权

Passport JWT - 未经授权