2015-08-10 4 views
8

Что я пытаюсь сделать, так это сохранить видеоролики в PHPhotoLibrary, а затем удалить их при удалении на удаленном сервере клиентов в приложении (в основном, библиотека фотографий служит в качестве временного хранилища для добавления дополнительного слоя о безопасности в случае, если что-либо вообще не удается (я уже сохранить свои VIDES его в каталоге приложений)Отключить подтверждение при запросе на удаление в PHPhotoLibrary

проблема:.

проблема заключается в том, что на работу, все должно работать без участия пользователя Вы можете записать видео в библиотеку фотографий следующим образом:

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 
     .... 
    }) 
} 

И это работает безупречно, я получаю локальный идентификатор, я храню его для последующего использования. Единороги и радуги.

Теперь, когда я хочу, чтобы удалить это видео сразу после загрузки заканчивается, я называю следующее:

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 
       ... 
      }) 
     } 
    } 
} 

успешно удаляет видео, но пользователь должен подтвердить удаление первого. Это проблема, так как эта резервная копия не будет работать.

Я, очевидно, знаю, почему есть подтверждение (так что вы не очищаете всю библиотеку пользователя, например, но дело в том, что мое приложение сделало видео - и поэтому я подумал, что вокруг будет способ, поскольку, владелец»Я не должен делать это, или по крайней мере иметь возможность отключить подтверждение

заранее спасибо

TLDR:.! Как отключить подтверждение на запрос удаления, если мое приложение создано, что содержание? (Я не хочу ничего удалять).

Примечание: Возможно, кто-то может сказать, что это довольно странная вещь, но приложение распространено внутри, и есть все основания для этого сделать это (видео контент слишком ценен для потери, даже если пользователь удаляет приложение для некоторых причина, или все что-то происходит не так, мы должны иметь возможность сохранять видео), поэтому, пожалуйста, не ставьте под сомнение это и просто сосредоточьте свое внимание на вопросе :)

+0

Я не знаю окончательного ответа на этот вопрос, но сомневаюсь, что это возможно. Как только вы сохраните актив в библиотеке фотографий устройства, вы больше не являетесь владельцем, и вам будет необходимо попросить подтверждение удаления по той причине, о которой вы уже упоминали. Таким образом, игнорируя свою «заметку» в течение минуты: что делает сохранение ваших активов через фреймворк более безопасным, чем сохранение его самостоятельно? – Stuart

+0

Я сам сохраняю содержимое видео в каталоге приложений (зашифровано), но видео будет удалено, если пользователь fe. удаляет приложение; Это уже произошло потому, что пользователи странные существа, поэтому мы пытаемся предотвратить даже это - видео будут сохранены на фотографиях. Проблема заключается в том, что из-за некоторых проблем с владением содержимым мы должны немедленно удалить его, когда мы загружаем его на наш сервер (в основном, система, которая продолжает загружаться после того, как устройство снова подключено к Интернету, поскольку устройство используется в поле без подключения). –

+0

Итак, что происходит, когда пользователь стирает свое устройство или теряет его или просто удаляет актив непосредственно из фотографий? Потери контента обычно избегают путем резервного копирования/синхронизации/_показания пользователям не удалять damn app_ (!), А не путем захвата механизма хранения другого приложения - вы избегаете одной из многих «глупостей пользователей»! Извините, что забрал вас в тот момент, когда вы просили людей не делать этого, но я думаю, что это стоит рассмотреть. Если кто-то, у кого больше знаний о фреймворке, может доказать, что я ошибаюсь, я думаю, вам, возможно, придется мириться с предупреждением или подумать о переосмыслении вашего подхода. – Stuart

ответ

5

Я не вижу способ избегайте подтверждения удаления. Это часть реализации фреймворка, аналогичная тому, как вы не можете запретить устройству запрашивать у пользователя разрешение использовать микрофон, когда ваше приложение пытается его использовать, и является вопросом безопасности & доверия. Как только вы сохранили актив в библиотеке фотографий устройства, ваше приложение больше не является владельцем этого актива, поэтому, как вы отметили в своем вопросе, устройство должно, конечно же, гарантировать, что приложение имеет разрешение пользователя, прежде чем оно начнет удалять такие данные.

Вы никогда не сможете полностью защитить данные своих пользователей от их собственного непредсказуемого поведения - если они решили удалить ваше приложение или удалить определенный актив из фотографий, это зависит от них. Я думаю, что ваш лучший вариант - либо выполнить со встроенным подтверждением удаления, либо предоставить руководство для своих пользователей, чтобы было ясно, что они должны быть осторожны, чтобы защитить эти важные данные, создав резервную копию своего устройства, а не удаление приложения!

Если вы решили придерживаться этого подхода, возможно, самое лучшее, что вы могли бы сделать, это подготовить пользователя к тому, что их устройство может попросить их подтвердить удаление файла, который загружается на ваши собственные серверы. Например, установите свое собственное модальное предупреждение непосредственно перед попыткой удалить актив.Обычно я бы не предлагал такой подход для общедоступного приложения для доставки, но поскольку вы только распространяете его внутри, он может быть приемлемым для вашей команды.