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

Jir*_*cak 9 ios swift phphotolibrary

我想要做的是将视频保存到PHPhotoLibrary,然后在上传到应用程序中的客户端远程服务器时将其删除(基本上,照片库充当临时存储,以便在任何事情都失败的情况下添加额外的安全层(I已经将我的视频保存在应用程序目录中).

问题:

问题是要工作,一切都必须在没有用户输入的情况下工作.您可以将视频写入照片库,如下所示:

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
        ....
    })
}
Run Code Online (Sandbox Code Playgroud)

这完美无瑕地工作,我得到本地标识符,我存储它供以后使用..独角兽和彩虹.

现在,当我想在上传完成后立即删除该视频时,我会调用以下内容:

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
                ...
            })
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个成功删除了视频,但用户必须先确认删除.这是一个问题,因为备份不起作用.

我显然知道为什么有确认(所以你没有清除整个用户库,例如,但问题是,我的应用程序制作了视频 - 所以我认为会有解决方法,因为作为"所有者"我应该不这样做,或者至少可以选择禁用确认.

提前致谢!

TLDR:如果我的应用程序创建了该内容,如何禁用删除请求的确认?(我不想删除任何其他内容).

注意:有人可能会说这是相当奇怪的事情,但应用程序是内部分发的,并且有充分的理由这样做(视频内容太宝贵而不会丢失,即使用户出于某种原因删除了应用程序,或者有任何问题,我们需要能够保存视频),所以请不要质疑,只关注问题:)

Stu*_*art 5

我看不到避免删除确认的方法.它是Photos框架的一个实现细节,类似于当您的应用程序尝试使用时,您无法阻止设备询问用户是否允许使用麦克风的方式,这是一个安全和信任的问题.将资产保存到设备照片库后,您的应用不再是该资产的所有者,因此,正如您在问题中所述,设备必须确保该应用在获取此类数据之前已获得用户的许可.

您永远无法完全保护用户的数据免受他们自己不可预测的行为的影响 - 如果他们决定删除您的应用,或从照片中删除特定资产,则由他们决定.我认为您最好的选择是要么忍受内置的删除确认,要么为用户提供指导,明确表示他们应该小心保护这些重要数据,方法是备份他们的设备,而不是删除应用程序!

如果您确实决定坚持这种方法,那么您可能做的最好的事情就是让用户准备好他们的设备可能会要求他们确认删除正在上传到您自己的服务器的文件.例如,在尝试删除资产之前,先建立自己的模态警报.我通常不会建议公共运输应用程序使用这种方法,但由于您只是在内部分发,因此您的团队可能会接受.