Télécharger PHAsset depuis iCloud (c'est-à-dire qui n'est pas présent sur le périphérique local)

Je veux download un PHAsset sur le server. Maintenant, mon PHAsset peut être une photo ou une video. Je suis capable de le faire avec succès pour les PHAssets présents sur l'appareil local. Mais que se passe-t-il si le PHAsset n'est pas sur le périphérique local et présente à la place sur le iCloud.

Pouvons-nous download directement à partir du iCloud sur le server ou devons-nous d'abord download sur le périphérique local, puis download l'opération sur le server.

Aussi, je serais reconnaissant si quelqu'un pouvait dire comment faire cela.


Mise à jour: lorsque nous autorisons l'access au réseau pour download l'image à partir de l'iCloud, je reçois l'erreur ci-dessous.

{ PHImageErrorKey = "Error Domain=CloudPhotoLibraryErrorDomain Code=1000 \"Error fetching asset with identifier: AUXxudUWWzHheX1dXyRDgXpZN5ty\" UserInfo={NSLocalizedDescription=Error fetching asset with identifier: AUXxudUWWzHheX1dXyRDgXpZN5ty, NSUnderlyingError=0x7fb00a5e9480 {Error Domain=CKErrorDomain Code=6 \"Fetching asset failed\" UserInfo={NSLocalizedDescription=Fetching asset failed, NSUnderlyingError=0x7fb00a511600 {Error Domain=CKInternalErrorDomain Code=2022 \"Fetching asset failed\" UserInfo={NSLocalizedDescription=Fetching asset failed, NSUnderlyingError=0x7fb00a5b6fc0 {Error Domain=com.apple.mmcs Code=16 \"(null)\"}}}}}}"; PHImageResultDeliveredImageFormatKey = 0; PHImageResultIsInCloudKey = 1; PHImageResultWantedImageFormatKey = 20002; } 

Vous devez download l'élément dans votre application mobile, puis le download sur votre server. Je ne pense pas qu'il soit possible de download directement depuis iCloud à cause de Sandboxing et d'autres règles de confidentialité et de security.

Si vous utilisez PHCachingImageManager & PHCachingImageManager , vous devez spécifier l'option spéciale PHImageRequestOptions pour PHImageRequestOptions qui permet à iCloud d'extraire datatables comme décrit dans la documentation :

Si la réponse est OUI et que datatables de ressources demandées ne sont pas stockées sur l'appareil local, Photos télécharge ces données à partir d'iCloud.

REMARQUE : Vous devez activer le droit iCloud avec le service Documents iCloud et configurer le conteneur par défaut. Voir plus de détails ici Activation de CloudKit dans votre application . Comme je peux le voir, il est nécessaire lorsque vous utilisez networkAccessAllowed = true

Par exemple, vous pouvez configurer des options pour votre gestionnaire d'actifs comme ceci:

 PHImageRequestOptions *requestOptions = [PHImageRequestOptions new]; requestOptions.synchronous = NO; requestOptions.resizeMode = PHImageRequestOptionsResizeModeFast; requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; requestOptions.networkAccessAllowed = YES; 

puis requestr des données

 [self.cachingImageManager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:requestOptions resultHandler:^(UIImage * _Nullable resultImage, NSDictionary * _Nullable info) { ... }]; 

Dans ce cas, vous verrez comment iCloud récupère datatables dans le sélecteur de documents avant de passer un appel à resultHandler où vous pouvez gérer l'actif demandé.