Mon client souhaite partager une image sur Instagram, Twitter, Facebook.
J'ai fait Twitter et Facebook mais je n'ai trouvé aucune API ou quoi que ce soit sur Internet pour partager une image sur Instagram. Est-il possible de partager une image sur Instagram? si oui alors comment?
Lorsque je consulte le site développeur d'Instagram, j'ai trouvé les bibliothèques de Ruby on Rails et Python. Mais il n'y a pas de documentation sur iOS Sdk
J'ai reçu un jeton d'instagram selon instagram.com/developer mais je ne sais plus quoi faire pour partager avec l'image instagram.
Réponses:
Enfin j'ai eu la réponse. vous ne pouvez pas publier directement une image sur instagram. Vous devez rediriger votre image avec UIDocumentInteractionController.
@property (nonatomic, retain) UIDocumentInteractionController *dic; CGRect rect = CGRectMake(0 ,0 , 0, 0); UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIGraphicsEndImageContext(); NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.igo"]; NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", jpgPath]]; self.dic.UTI = @"com.instagram.photo"; self.dic = [self setupControllerWithURL:igImageHookFile usingDelegate:self]; self.dic=[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile]; [self.dic presentOpenInMenuFromRect: rect inView: self.view animated: YES ]; - (UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate { UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL]; interactionController.delegate = interactionDelegate; return interactionController; }
REMARQUE: une fois que vous êtes redirigé vers l'application instagram, vous ne pouvez pas revenir à votre application. vous devez rouvrir votre application
Télécharger la source d' ici
la source
Voici un code complet testé pour télécharger l'image + le texte de la légende sur Instagram.
fichier in.h
//Instagram @property (nonatomic, retain) UIDocumentInteractionController *documentController; -(void)instaGramWallPost { NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; if([[UIApplication sharedApplication] canOpenURL:instagramURL]) //check for App is install or not { NSData *imageData = UIImagePNGRepresentation(imge); //convert image into .png format. NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it NSString *documentsDirectory = [paths objectAtIndex:0]; //create NSString object, that holds our exact path to the documents directory NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"insta.igo"]]; //add our image to the path [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; //finally save the path (image) NSLog(@"image saved"); CGRect rect = CGRectMake(0 ,0 , 0, 0); UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIGraphicsEndImageContext(); NSString *fileNameToSave = [NSString stringWithFormat:@"Documents/insta.igo"]; NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:fileNameToSave]; NSLog(@"jpg path %@",jpgPath); NSString *newJpgPath = [NSString stringWithFormat:@"file://%@",jpgPath]; NSLog(@"with File path %@",newJpgPath); NSURL *igImageHookFile = [[NSURL alloc]initFileURLWithPath:newJpgPath]; NSLog(@"url Path %@",igImageHookFile); self.documentController.UTI = @"com.instagram.exclusivegram"; self.documentController = [self setupControllerWithURL:igImageHookFile usingDelegate:self]; self.documentController=[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile]; NSString *caption = @"#Your Text"; //settext as Default Caption self.documentController.annotation=[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%@",caption],@"InstagramCaption", nil]; [self.documentController presentOpenInMenuFromRect:rect inView: self.view animated:YES]; } else { NSLog (@"Instagram not found"); } } - (UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate { NSLog(@"file url %@",fileURL); UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL]; interactionController.delegate = interactionDelegate; return interactionController; }
OU
-(void)instaGramWallPost { NSURL *myURL = [NSURL URLWithString:@"Your image url"]; NSData * imageData = [[NSData alloc] initWithContentsOfURL:myURL]; UIImage *imgShare = [[UIImage alloc] initWithData:imageData]; NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; if([[UIApplication sharedApplication] canOpenURL:instagramURL]) //check for App is install or not { UIImage *imageToUse = imgShare; NSString *documentDirectory=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString *saveImagePath=[documentDirectory stringByAppendingPathComponent:@"Image.igo"]; NSData *imageData=UIImagePNGRepresentation(imageToUse); [imageData writeToFile:saveImagePath atomically:YES]; NSURL *imageURL=[NSURL fileURLWithPath:saveImagePath]; self.documentController=[[UIDocumentInteractionController alloc]init]; self.documentController = [UIDocumentInteractionController interactionControllerWithURL:imageURL]; self.documentController.delegate = self; self.documentController.annotation = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"Testing"], @"InstagramCaption", nil]; self.documentController.UTI = @"com.instagram.exclusivegram"; UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController; [self.documentController presentOpenInMenuFromRect:CGRectMake(1, 1, 1, 1) inView:vc.view animated:YES]; } else { DisplayAlertWithTitle(@"Instagram not found", @"") } }
et écrivez ceci dans .plist
<key>LSApplicationQueriesSchemes</key> <array> <string>instagram</string> </array>
la source
Vous pouvez utiliser l'un des schémas d'url fournis par Instagram
Doc officiel Instagram ici
Partager avec UIDocumentInteractionController
final class InstagramPublisher : NSObject { private var documentsController:UIDocumentInteractionController = UIDocumentInteractionController() func postImage(image: UIImage, view: UIView, result:((Bool)->Void)? = nil) { guard let instagramURL = NSURL(string: "instagram://app") else { if let result = result { result(false) } return } if UIApplication.sharedApplication().canOpenURL(instagramURL) { let jpgPath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent("instagrammFotoToShareName.igo") if let image = UIImageJPEGRepresentation(image, 1.0) { image.writeToFile(jpgPath, atomically: true) let fileURL = NSURL.fileURLWithPath(jpgPath) documentsController.URL = fileURL documentsController.UTI = "com.instagram.exclusivegram" documentsController.presentOpenInMenuFromRect(view.bounds, inView: view, animated: true) if let result = result { result(true) } } else if let result = result { result(false) } } else { if let result = result { result(false) } } } }
Partager avec redirection directe
import Photos final class InstagramPublisher : NSObject { func postImage(image: UIImage, result:((Bool)->Void)? = nil) { guard let instagramURL = NSURL(string: "instagram://app") else { if let result = result { result(false) } return } let image = image.scaleImageWithAspectToWidth(640) do { try PHPhotoLibrary.sharedPhotoLibrary().performChangesAndWait { let request = PHAssetChangeRequest.creationRequestForAssetFromImage(image) let assetID = request.placeholderForCreatedAsset?.localIdentifier ?? "" let shareURL = "instagram://library?LocalIdentifier=" + assetID if UIApplication.sharedApplication().canOpenURL(instagramURL) { if let urlForRedirect = NSURL(string: shareURL) { UIApplication.sharedApplication().openURL(urlForRedirect) } } } } catch { if let result = result { result(false) } } } }
extension pour redimensionner la photo à la taille recommandée
import UIKit extension UIImage { // MARK: - UIImage+Resize func scaleImageWithAspectToWidth(toWidth:CGFloat) -> UIImage { let oldWidth:CGFloat = size.width let scaleFactor:CGFloat = toWidth / oldWidth let newHeight = self.size.height * scaleFactor let newWidth = oldWidth * scaleFactor; UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight)) drawInRect(CGRectMake(0, 0, newWidth, newHeight)) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage } }
N'oubliez pas d'ajouter le schéma requis dans plist
la source
J'espère que cette réponse résoudra votre requête. Cela ouvrira directement le dossier de la bibliothèque dans Instagram au lieu de Camera.
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { NSURL *videoFilePath = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[request downloadDestinationPath]]]; // Your local path to the video NSString *caption = @"Some Preloaded Caption"; ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeVideoAtPathToSavedPhotosAlbum:videoFilePath completionBlock:^(NSURL *assetURL, NSError *error) { NSString *escapedString = [self urlencodedString:videoFilePath.absoluteString]; NSString *escapedCaption = [self urlencodedString:caption]; NSURL *instagramURL = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@&InstagramCaption=%@",escapedString,escapedCaption]]; if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { [[UIApplication sharedApplication] openURL:instagramURL]; } }];
la source
si vous ne souhaitez pas utiliser UIDocumentInteractionController
import Photos ... func postImageToInstagram(image: UIImage) { UIImageWriteToSavedPhotosAlbum(image, self, #selector(SocialShare.image(_:didFinishSavingWithError:contextInfo:)), nil) } func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) { if error != nil { print(error) } let fetchOptions = PHFetchOptions() fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions) if let lastAsset = fetchResult.firstObject as? PHAsset { let localIdentifier = lastAsset.localIdentifier let u = "instagram://library?LocalIdentifier=" + localIdentifier let url = NSURL(string: u)! if UIApplication.sharedApplication().canOpenURL(url) { UIApplication.sharedApplication().openURL(NSURL(string: u)!) } else { let alertController = UIAlertController(title: "Error", message: "Instagram is not installed", preferredStyle: .Alert) alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) self.presentViewController(alertController, animated: true, completion: nil) } } }
la source
Pour iOS 6 et supérieur, vous pouvez utiliser cette UIActivity pour télécharger des images sur Instagram qui a le même flux de travail en utilisant des hooks iOS mais simplifie le développement:
https://github.com/coryalder/DMActivityInstagram
la source
c'est la bonne réponse que je mets en œuvre avec le détail. Dans un fichier .h
UIImageView *imageMain; @property (nonatomic, strong) UIDocumentInteractionController *documentController;
in.m fichier uniquement en écriture
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; if([[UIApplication sharedApplication] canOpenURL:instagramURL]) { CGFloat cropVal = (imageMain.image.size.height > imageMain.image.size.width ? imageMain.image.size.width : imageMain.image.size.height); cropVal *= [imageMain.image scale]; CGRect cropRect = (CGRect){.size.height = cropVal, .size.width = cropVal}; CGImageRef imageRef = CGImageCreateWithImageInRect([imageMain.image CGImage], cropRect); NSData *imageData = UIImageJPEGRepresentation([UIImage imageWithCGImage:imageRef], 1.0); CGImageRelease(imageRef); NSString *writePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"instagram.igo"]; if (![imageData writeToFile:writePath atomically:YES]) { // failure NSLog(@"image save failed to path %@", writePath); return; } else { // success. } // send it to instagram. NSURL *fileURL = [NSURL fileURLWithPath:writePath]; self.documentController = [UIDocumentInteractionController interactionControllerWithURL:fileURL]; self.documentController.delegate = self; [self.documentController setUTI:@"com.instagram.exclusivegram"]; [self.documentController setAnnotation:@{@"InstagramCaption" : @"We are making fun"}]; [self.documentController presentOpenInMenuFromRect:CGRectMake(0, 0, 320, 480) inView:self.view animated:YES]; } else { NSLog (@"Instagram not found"); }
Bien sûr, vous obtiendrez un résultat. Par exemple, vous verrez popover du bas avec l'image instagram, cliquez dessus et amusez-vous
la source
J'ai essayé cela dans mon application et cela fonctionne parfaitement (Swift)
import Foundation import UIKit class InstagramManager: NSObject, UIDocumentInteractionControllerDelegate { private let kInstagramURL = "instagram://" private let kUTI = "com.instagram.exclusivegram" private let kfileNameExtension = "instagram.igo" private let kAlertViewTitle = "Error" private let kAlertViewMessage = "Please install the Instagram application" var documentInteractionController = UIDocumentInteractionController() // singleton manager class var sharedManager: InstagramManager { struct Singleton { static let instance = InstagramManager() } return Singleton.instance } func postImageToInstagramWithCaption(imageInstagram: UIImage, instagramCaption: String, view: UIView) { // called to post image with caption to the instagram application let instagramURL = NSURL(string: kInstagramURL) if UIApplication.sharedApplication().canOpenURL(instagramURL!) { let jpgPath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent(kfileNameExtension) UIImageJPEGRepresentation(imageInstagram, 1.0)!.writeToFile(jpgPath, atomically: true) let rect = CGRectMake(0,0,612,612) let fileURL = NSURL.fileURLWithPath(jpgPath) documentInteractionController.URL = fileURL documentInteractionController.delegate = self documentInteractionController.UTI = kUTI // adding caption for the image documentInteractionController.annotation = ["InstagramCaption": instagramCaption] documentInteractionController.presentOpenInMenuFromRect(rect, inView: view, animated: true) } else { // alert displayed when the instagram application is not available in the device UIAlertView(title: kAlertViewTitle, message: kAlertViewMessage, delegate:nil, cancelButtonTitle:"Ok").show() } } } func sendToInstagram(){ let image = postImage InstagramManager.sharedManager.postImageToInstagramWithCaption(image!, instagramCaption: "\(description)", view: self.view) }
la source
Voici la bonne réponse. vous ne pouvez pas publier directement une image sur Instagram. Vous devez rediriger vers Instagram en utilisant UIDocumentInteractionController ...
NSString* imagePath = [NSString stringWithFormat:@"%@/instagramShare.igo", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]]; [[NSFileManager defaultManager] removeItemAtPath:imagePath error:nil]; UIImage *instagramImage = [UIImage imageNamed:@"imagename you want to share"]; [UIImagePNGRepresentation(instagramImage) writeToFile:imagePath atomically:YES]; NSLog(@"Image Size >>> %@", NSStringFromCGSize(instagramImage.size)); self.dic=[UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:imagePath]]; self.dic.delegate = self; self.dic.UTI = @"com.instagram.exclusivegram"; [self.dic presentOpenInMenuFromRect: self.view.frame inView:self.view animated:YES ];
}
REMARQUE: une fois que vous êtes redirigé vers l'application instagram, vous ne pouvez pas revenir à votre application. vous devez rouvrir votre application
la source
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 { // can not share with whats app NSLog(@"No instagram installed"); } } }
Et n'oubliez pas de mettre ceci dans votre info.plist sous
LSApplicationQueriesSchemes
<string>instagram</string>
la source
- (void) shareImageWithInstagram { NSURL *instagramURL = [NSURL URLWithString:@"instagram://"]; if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { UICachedFileMgr* mgr = _gCachedManger; UIImage* photoImage = [mgr imageWithUrl:_imageView.image]; NSData* imageData = UIImagePNGRepresentation(photoImage); NSString* captionString = [NSString stringWithFormat:@"ANY_TAG",]; NSString* imagePath = [UIUtils documentDirectoryWithSubpath:@"image.igo"]; [imageData writeToFile:imagePath atomically:NO]; NSURL* fileURL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"file://%@",imagePath]]; self.docFile = [[self setupControllerWithURL:fileURL usingDelegate:self]retain]; self.docFile.annotation = [NSDictionary dictionaryWithObject: captionString forKey:@"InstagramCaption"]; self.docFile.UTI = @"com.instagram.photo"; // OPEN THE HOOK [self.docFile presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES]; } else { [UIUtils messageAlert:@"Instagram not installed in this device!\nTo share image please install instagram." title:nil delegate:nil]; } }
J'ai essayé cela dans mon application et cela fonctionnera certainement
la source
UIUtils
&UICachedFileMgr
?Quant à moi, la meilleure et la plus simple façon décrite ici Partager une photo sur Instagram à partir de mon application iOS
Vous devez enregistrer l'image sur l'appareil au format .igo, puis utiliser "UIDocumentInteractionController" pour envoyer l'application Instagram du chemin local. N'oubliez pas de définir "UIDocumentInteractionControllerDelegate"
Mon conseil est d'ajouter quelque chose comme:
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { <your code> }
la source
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/Insta_Images/%@",@"shareImage.png"]]; NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", jpgPath]]; docController.UTI = @"com.instagram.photo"; docController = [self setupControllerWithURL:igImageHookFile usingDelegate:self]; docController =[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile]; docController.delegate=self; [docController presentOpenInMenuFromRect:CGRectMake(0 ,0 , 612, 612) inView:self.view animated:YES];
la source
J'ai remarqué que si vous
URL
pointez vers l'image auactivityItems
lieu deUIImage
, l'Copy to Instagram
élément d'activité apparaît lui-même et vous n'avez rien d'autre à faire. Veuillez noter que lesString
objets à l'intérieuractivityItems
seraient supprimés et qu'il n'y a aucun moyen de pré-remplir la légende dans Instagram. Si vous souhaitez toujours indiquer à l'utilisateur de publier une légende particulière, vous devez créer une activité personnalisée dans laquelle vous copiez ce texte dans le presse-papiers et en informez l'utilisateur, comme dans cet article .la source
@import Photos; -(void)shareOnInstagram:(UIImage*)imageInstagram { [self authorizePHAssest:imageInstagram]; } -(void)authorizePHAssest:(UIImage *)aImage{ PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus]; if (status == PHAuthorizationStatusAuthorized) { // Access has been granted. [self savePostsPhotoBeforeSharing:aImage]; } else if (status == PHAuthorizationStatusDenied) { // Access has been denied. } else if (status == PHAuthorizationStatusNotDetermined) { // Access has not been determined. [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { if (status == PHAuthorizationStatusAuthorized) { // Access has been granted. [self savePostsPhotoBeforeSharing:aImage]; } }]; } else if (status == PHAuthorizationStatusRestricted) { // Restricted access - normally won't happen. } } -(void)saveImageInDeviceBeforeSharing:(UIImage *)aImage { UIImageWriteToSavedPhotosAlbum(aImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); } - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo; { if (error == nil){ [self sharePostOnInstagram]; } } -(void)shareImageOnInstagram { PHFetchOptions *fetchOptions = [PHFetchOptions new]; fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:false]]; PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions]; __block PHAsset *assetToShare = [result firstObject]; 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 options:@{} completionHandler:nil]; } else { NSLog(@"No instagram installed"); } } }
REMARQUE: - IMP TODO: - Ajouter la clé ci-dessous dans Info.plist
<key>LSApplicationQueriesSchemes</key> <array> <string>instagram</string> </array>
la source
J'ai utilisé ce code:
NSString* filePathStr = [[NSBundle mainBundle] pathForResource:@"UMS_social_demo" ofType:@"png"]; NSURL* fileUrl = [NSURL fileURLWithPath:filePathStr]; NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.igo"]; [[NSData dataWithContentsOfURL:fileUrl] writeToFile:jpgPath atomically:YES]; NSURL* documentURL = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@", jpgPath]]; UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: documentURL]; self.interactionController = interactionController; interactionController.delegate = self; interactionController.UTI = @"com.instagram.photo"; CGRect rect = CGRectMake(0 ,0 , 0, 0); [interactionController presentOpenInMenuFromRect:rect inView:self.view animated:YES];
la source
-(void)shareOnInstagram { CGRect rect = CGRectMake(self.view.frame.size.width*0.375 ,self.view.frame.size.height/2 , 0, 0); NSString * saveImagePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/ShareInstragramImage.igo"]; [UIImagePNGRepresentation(_image) writeToFile:saveImagePath atomically:YES]; NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", saveImagePath]]; self.documentController=[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile]; self.documentController.UTI = @"com.instagram.exclusivegram"; self.documentController = [self setupControllerWithURL:igImageHookFile usingDelegate:self]; [self.documentController presentOpenInMenuFromRect: rect inView: self.view animated: YES ]; } -(UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate { UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL]; interactionController.delegate = interactionDelegate; return interactionController; }
la source
NSURL *myURL = [NSURL URLWithString:sampleImageURL]; NSData * imageData = [[NSData alloc] initWithContentsOfURL:myURL]; UIImage *imageToUse = [[UIImage alloc] initWithData:imageData]; NSString *documentDirectory=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString *saveImagePath=[documentDirectory stringByAppendingPathComponent:@"Image.ig"]; [imageData writeToFile:saveImagePath atomically:YES]; NSURL *imageURL=[NSURL fileURLWithPath:saveImagePath]; self.documentController = [UIDocumentInteractionController interactionControllerWithURL:imageURL]; self.documentController.delegate = self; self.documentController.annotation = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@""], @"", nil]; self.documentController.UTI = @"com.instagram.exclusivegram"; [self.documentController presentOpenInMenuFromRect:CGRectMake(1, 1, 1, 1) inView:self.view animated:YES];
la source