在PHPhotoLibrary中禁用对删除请求的确认

我试图做的是将video保存到PHPhotoLibrary,然后删除它们时,上传到客户端远程服务器在应用程序完成(基本上,照片库作为临时存储添加额外的安全层,以防万一什么都失败了(我已经将我的video保存在应用程序目录中)。

问题:

问题是为了工作,一切都必须工作,没有来自用户的input。 你可以写video到这样的照片库:

func storeVideoToLibraryForUpload(upload : SMUpload) { if PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.Authorized { // Don't write to library since this is disallowed by user return } PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in // Write asset let assetRequest = PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(NSURL(fileURLWithPath: upload.nonsecureFilePath!)!) let assetPlaceholder = assetRequest.placeholderForCreatedAsset let localIdentifier = assetPlaceholder.localIdentifier // Store local identifier for later use upload.localAssetIdentifier = localIdentifier }, completionHandler: { (success, error) -> Void in .... }) } 

这完美的作品,我得到本地标识符,我存储它以备后用。独angular兽和彩虹。

现在,当我想在上传结束后立即删除该video时,请拨打以下电话:

 func removeVideoFromLibraryForUpload(upload : SMUpload) { // Only proceed if there is asset identifier (video previously stored) if let assetIdentifier = upload.localAssetIdentifier { // Find asset that we previously stored let assets = PHAsset.fetchAssetsWithLocalIdentifiers([assetIdentifier], options: PHFetchOptions()) // Fetch asset, if found, delete it if let fetchedAssets = assets.firstObject as? PHAsset { PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in // Delete asset PHAssetChangeRequest.deleteAssets([fetchedAssets]) }, completionHandler: { (success, error) -> Void in ... }) } } } 

其中成功删除video,但用户必须先确认删除。 这是一个问题,因为备份不起作用。

我明显知道为什么有确认(所以你不清楚整个用户库,但事情是,我的应用程序制作了video – 所以我认为会有解决办法,因为作为一个“所有者”,我应该不这样做,或者至less有select禁用确认。

提前致谢!

TLDR :如果我的应用程序创build了该内容,如何禁用删除请求上的确认? (我不想删除其他东西)。

注意:有人可能会说这是一件相当奇怪的事情,但应用程序是在内部分发的,这样做是有充分的理由的(video内容太有价值,不会丢失,即使用户由于某种原因删除了应用程序,或者有任何问题,我们需要能够保存video),所以请不要质疑,只要把注意力集中在这个问题:)

我看不到一种方法来避免删除确认。 这是Photos框架的实现细节,类似于您的应用程序尝试使用它时无法阻止设备询问用户使用麦克风的权限的方式,并且是安全和可信的问题。 将设备保存到设备照片库之后,您的应用不再是该设备的所有者,因此,如您在问题中提到的那样,设备必须确保该应用在删除此类数据之前已获得用户的许可。

如果用户决定删除应用程序或从照片中删除特定资产,则无法完全保护用户的数据免受不可预知的行为,这取决于他们。 我认为你最好的select是或者忍受内置的删除确认,或者为你的用户提供一个指南,说明他们应该小心地通过备份他们的设备来保护这些重要的数据,而不是删除应用程序!

如果你决定坚持这种方法,或许你可以做的最好的事情是准备用户,他们的设备可能会要求他们确认删除正在上传到自己的服务器的文件。 例如,在试图删除资产之前,build立自己的模式警报。 我通常不会为公共运输应用程序提供这种方法,但是由于您只是在内部进行分发,因此您的团队可能会接受。