Мой клиент хочет поделиться изображением в Instagram, Twitter, Facebook.
Я работал с Twitter и Facebook, но не нашел ни API, ни чего-либо еще в Интернете для публикации изображения в Instagram. Можно ли поделиться изображением в Instagram? если да, то как?
Когда я зашел на сайт разработчиков Instagram, я обнаружил библиотеки Ruby on Rails и Python. Но документации iOS Sdk нет
У меня есть токен из Instagram согласно instagram.com/developer, но теперь я не знаю, что делать дальше, чтобы поделиться с изображением Instagram.
ios
objective-c
swift
instagram-api
Hiren
источник
источник
Ответы:
Наконец-то я получил ответ. вы не можете напрямую размещать изображение в инстаграмме. Вы должны перенаправить свое изображение с помощью 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; }
ПРИМЕЧАНИЕ: после перенаправления в приложение Instagram вы не сможете вернуться в свое приложение. тебе нужно снова открыть свое приложение
Скачать исходный код отсюда
источник
Вот полный протестированный код для загрузки изображения и текста подписи в Instagram.
файл 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; }
ИЛИ
-(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", @"") } }
и напишите это в .plist
<key>LSApplicationQueriesSchemes</key> <array> <string>instagram</string> </array>
источник
Вы можете использовать одну из схем URL-адресов, предоставленных Instagram
Официальный документ Instagram здесь
Поделиться с 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) } } } }
Поделиться с прямым перенаправлением
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) } } } }
расширение для изменения размера фотографии до рекомендованного размера
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 } }
Не забудьте добавить нужную схему в список
источник
Надеюсь, этот ответ разрешит ваш вопрос. Это напрямую откроет папку библиотеки в Instagram вместо камеры.
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]; } }];
источник
если вы не хотите использовать 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) } } }
источник
Для iOS 6 и выше вы можете использовать эту UIActivity для загрузки изображений в Instagram, который имеет тот же рабочий процесс с использованием хуков iOS, но упрощает разработку:
https://github.com/coryalder/DMActivityInstagram
источник
это правильный ответ, который я подробно описываю. В файле .h
UIImageView *imageMain; @property (nonatomic, strong) UIDocumentInteractionController *documentController;
in.m файл только писать
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"); }
Обязательно получите результат. Например, вы увидите всплывающее окно снизу с изображением Instagram. Нажмите на него и получайте удовольствие.
источник
Я пробовал это в своем приложении, и он отлично работает (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) }
источник
Вот правильный ответ. вы не можете напрямую размещать изображение в Instagram. Вам нужно перенаправить в Instagram с помощью 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 ];
}
ПРИМЕЧАНИЕ: после перенаправления в приложение Instagram вы не сможете вернуться в свое приложение. тебе нужно снова открыть свое приложение
источник
Вы можете сделать это без использования UIDocumentInteractionController и сразу перейти в Instagram с помощью следующих трех методов:
Оно работает так же, как и все другие известные приложения. Код написан на Objective c, так что вы можете перевести его на быстрый, если хотите. Что вам нужно сделать, так это сохранить изображение на устройстве и использовать URLScheme.
добавьте это в свой .m файл
#import <Photos/Photos.h>
Сначала вам нужно сохранить свой UIImage на устройство с помощью этого метода:
-(void)savePostsPhotoBeforeSharing { UIImageWriteToSavedPhotosAlbum([UIImage imageNamed:@"image_file_name.jpg"], self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); }
Этот метод является обратным вызовом для сохранения изображения на ваше устройство:
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo; { [self sharePostOnInstagram]; }
После сохранения изображения на устройстве вам необходимо запросить только что сохраненное изображение и получить его как 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"); } } }
И не забудьте поместить это в свой info.plist под
LSApplicationQueriesSchemes
<string>instagram</string>
источник
- (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]; } }
Я пробовал это в своем приложении, и это определенно сработает
источник
UIUtils
&UICachedFileMgr
?Что касается меня, то здесь описан лучший и самый простой способ Поделиться фото в Instagram из моего приложения для iOS.
Вам необходимо сохранить изображение на устройстве в формате .igo, а затем использовать «UIDocumentInteractionController» для отправки локального пути приложения Instagram. Не забудьте установить "UIDocumentInteractionControllerDelegate"
Мой совет - добавить что-то вроде:
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { <your code> }
источник
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];
источник
Я заметил, что если вы
URL
укажете на изображениеactivityItems
вместоUIImage
,Copy to Instagram
элемент действия появится сам, и вам не придется ничего делать. Обратите внимание, чтоString
объекты внутриactivityItems
будут отброшены, и в Instagram нет возможности предварительно заполнить подпись. Если вы все еще хотите намекнуть пользователю, чтобы он опубликовал определенную подпись, вам нужно создать настраиваемое действие, в котором вы копируете этот текст в буфер обмена и сообщаете пользователю об этом, как в этой сути .источник
@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"); } } }
ПРИМЕЧАНИЕ: - IMP TODO: - Добавьте ключ ниже в Info.plist
<key>LSApplicationQueriesSchemes</key> <array> <string>instagram</string> </array>
источник
Я использовал этот код:
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];
источник
-(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; }
источник
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];
источник