Vous pouvez le faire sans utiliser UIDocumentInteractionController et accéder directement à Instagram avec ces 3 méthodes:
Cela fonctionne comme toutes les autres applications célèbres. Le code est écrit en Objective c, vous pouvez donc le traduire en swift si vous le souhaitez. Ce que vous devez faire est d'enregistrer votre image sur l'appareil et d'utiliser un URLScheme
ajoutez ceci dans votre fichier .m
#import <Photos/Photos.h>
Vous devez d'abord enregistrer votre UIImage sur l'appareil avec cette méthode:
-(void)savePostsPhotoBeforeSharing
{
UIImageWriteToSavedPhotosAlbum([UIImage imageNamed:@"image_file_name.jpg"], self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
}
Cette méthode est le rappel pour enregistrer l'image sur votre appareil:
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo;
{
[self sharePostOnInstagram];
}
Une fois l'image enregistrée sur l'appareil, vous devez interroger l'image que vous venez d'enregistrer et l'obtenir en tant que PHAsset
-(void)sharePostOnInstagram
{
PHFetchOptions *fetchOptions = [PHFetchOptions new];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO],];
__block PHAsset *assetToShare;
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
[result enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) {
assetToShare = asset;
}];
if([assetToShare isKindOfClass:[PHAsset class]])
{
NSString *localIdentifier = assetToShare.localIdentifier;
NSString *urlString = [NSString stringWithFormat:@"instagram://library?LocalIdentifier=%@",localIdentifier];
NSURL *instagramURL = [NSURL URLWithString:urlString];
if ([[UIApplication sharedApplication] canOpenURL: instagramURL])
{
[[UIApplication sharedApplication] openURL: instagramURL];
} else
{
NSLog(@"No instagram installed");
}
}
}
Et n'oubliez pas de mettre ceci dans votre info.plist sous LSApplicationQueriesSchemes
<string>instagram</string>