Meu cliente deseja compartilhar uma imagem no Instagram, Twitter, Facebook.
Já fiz Twitter e Facebook mas não encontrei nenhuma API nem nada na internet para compartilhar imagem no Instagram. É possível compartilhar imagens no Instagram? se sim, como?
Ao verificar o site do desenvolvedor do Instagram, encontrei as Bibliotecas de Ruby on Rails e Python. Mas não há documentação do iOS Sdk
Recebi o token do instagram conforme instagram.com/developer, mas agora não sei o que fazer a seguir para compartilhar com a imagem do instagram.
ios
objective-c
swift
instagram-api
Hiren
fonte
fonte
Respostas:
Finalmente obtive a resposta. você não pode postar uma imagem diretamente no instagram. Você tem que redirecionar sua imagem com 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; }
NOTA: depois de redirecionar para o aplicativo instagram, você não pode voltar para o seu aplicativo. você tem que abrir seu aplicativo novamente
Baixe a fonte aqui
fonte
Aqui está um código testado completo para fazer upload de imagem + texto da legenda para o Instagram.
arquivo 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", @"") } }
e escreva para .plist
<key>LSApplicationQueriesSchemes</key> <array> <string>instagram</string> </array>
fonte
Você pode usar um dos fornecidos pelo esquema de url do Instagram
Doc oficial do Instagram aqui
Compartilhar com 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) } } } }
Compartilhar com redirecionamento direto
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) } } } }
extensão para redimensionar foto para o tamanho recomendado
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ão se esqueça de adicionar o esquema necessário no plist
fonte
Espero que esta resposta resolva sua dúvida. Isso abrirá diretamente a pasta da biblioteca no Instagram em vez da câmera.
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]; } }];
fonte
se você não quiser usar 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) } } }
fonte
Para iOS 6 e superior, você pode usar esta UIActivity para fazer upload de imagens para o Instagram que tem o mesmo fluxo de trabalho usando ganchos iOS, mas simplifica o desenvolvimento:
https://github.com/coryalder/DMActivityInstagram
fonte
esta é a resposta correta que implemento com detalhes. No arquivo .h
UIImageView *imageMain; @property (nonatomic, strong) UIDocumentInteractionController *documentController;
arquivo in.m apenas grava
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"); }
Com certeza você obterá resultado. Por exemplo, você verá um popover na parte inferior com a imagem do instagram. Clique nele e divirta-se.
fonte
Eu tentei isso no meu aplicativo e está funcionando perfeitamente (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) }
fonte
Aqui está a resposta correta. você não pode postar uma imagem diretamente no Instagram. Você precisa redirecionar para o Instagram usando 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 ];
}
NOTA: depois de redirecionar para o aplicativo instagram, você não pode voltar para o seu aplicativo. você tem que abrir seu aplicativo novamente
fonte
Você pode fazer isso sem usar o UIDocumentInteractionController e ir direto para o Instagram com estes três métodos:
Ele funciona exatamente como todos os outros aplicativos famosos. O código é escrito em Objective c, então você pode traduzi-lo para o swift se quiser. O que você precisa fazer é salvar sua imagem no dispositivo e usar um URLScheme
adicione isso dentro do seu arquivo .m
#import <Photos/Photos.h>
Primeiro, você precisa salvar sua UIImage no dispositivo com este método:
-(void)savePostsPhotoBeforeSharing { UIImageWriteToSavedPhotosAlbum([UIImage imageNamed:@"image_file_name.jpg"], self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); }
Este método é o retorno de chamada para salvar a imagem em seu dispositivo:
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo; { [self sharePostOnInstagram]; }
Depois que a imagem é salva no dispositivo, você precisa consultar a imagem que acabou de salvar e obtê-la como um 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"); } } }
E não se esqueça de colocar isso em seu info.plist em
LSApplicationQueriesSchemes
<string>instagram</string>
fonte
- (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]; } }
Eu tentei isso em meu aplicativo e com certeza funcionará
fonte
UIUtils
&UICachedFileMgr
?Quanto a mim, a melhor e mais fácil maneira descrita aqui Compartilhar foto no Instagram do meu aplicativo iOS
Você precisa salvar a imagem no dispositivo usando o formato .igo, em seguida, use "UIDocumentInteractionController" para enviar o aplicativo Instagram de caminho local. Não se esqueça de definir "UIDocumentInteractionControllerDelegate"
Meu conselho é adicionar algo como:
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { <your code> }
fonte
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];
fonte
Percebi que se você
URL
apontar para a imagem emactivityItems
vez deUIImage
, oCopy to Instagram
item de atividade aparecerá e você não precisará fazer mais nada. Observe que osString
objetos dentroactivityItems
deles serão descartados e não há como preencher previamente a legenda no Instagram. Se você ainda quiser dar uma dica ao usuário para postar uma legenda específica, você precisa criar uma atividade personalizada onde você copia esse texto para a área de transferência e permite que o usuário saiba sobre isso, como nesta essência .fonte
@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"); } } }
NOTA: - IMP TODO: - Adicionar a chave abaixo em Info.plist
<key>LSApplicationQueriesSchemes</key> <array> <string>instagram</string> </array>
fonte
Eu usei este código:
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];
fonte
-(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; }
fonte
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];
fonte