Mój klient chce udostępnić zdjęcie na Instagramie, Twitterze, Facebooku.
Zrobiłem Twitter i Facebook, ale nie znalazłem żadnego interfejsu API ani niczego w Internecie, aby udostępnić zdjęcie na Instagramie. Czy można udostępniać zdjęcia na Instagramie? jeśli tak, to jak?
Kiedy sprawdzałem stronę deweloperów Instagrama, znalazłem Biblioteki Ruby on Rails i Python. Ale nie ma dokumentacji dotyczącej iOS Sdk
Otrzymałem token z instagramu, jak na instagram.com/developer, ale teraz nie wiem, co zrobić dalej, aby udostępnić obraz na Instagramie.
ios
objective-c
swift
instagram-api
Hiren
źródło
źródło
Odpowiedzi:
Wreszcie dostałem odpowiedź. nie możesz bezpośrednio opublikować zdjęcia na Instagramie. Musisz ponownie zredagować swój obraz za pomocą 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; }
UWAGA: po przekierowaniu do aplikacji Instagram nie możesz wrócić do aplikacji. musisz ponownie otworzyć aplikację
Pobierz źródło stąd
źródło
Oto w pełni przetestowany kod do przesłania obrazu + tekstu podpisu na Instagram.
in.h plik
//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; }
LUB
-(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", @"") } }
i napisz to do .plist
<key>LSApplicationQueriesSchemes</key> <array> <string>instagram</string> </array>
źródło
Możesz użyć jednego z podanych przez Instagram schematów adresów URL
Oficjalny dokument na Instagramie tutaj
Udostępnij za pomocą 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) } } } }
Udostępnij przez bezpośrednie przekierowanie
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) } } } }
rozszerzenie do zmiany rozmiaru zdjęcia do zalecanego rozmiaru
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 } }
Nie zapomnij dodać wymaganego schematu w plist
źródło
Mam nadzieję, że ta odpowiedź rozwiąże Twoje pytanie. Spowoduje to bezpośrednie otwarcie folderu biblioteki na Instagramie zamiast aparatu.
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]; } }];
źródło
jeśli nie chcesz używać 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) } } }
źródło
W przypadku iOS 6 i nowszych możesz użyć tej funkcji UIActivity do przesyłania obrazów na Instagram, który ma ten sam przepływ pracy przy użyciu haków iOS, ale upraszcza programowanie:
https://github.com/coryalder/DMActivityInstagram
źródło
to jest poprawna odpowiedź, którą szczegółowo implementuję. W pliku .h
UIImageView *imageMain; @property (nonatomic, strong) UIDocumentInteractionController *documentController;
in.m plik tylko zapis
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"); }
Na pewno otrzymasz wynik. Np. Zobaczysz od dołu popover z obrazem instagramu, kliknij na niego i baw się dobrze.
źródło
Wypróbowałem to w mojej aplikacji i działa idealnie (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) }
źródło
Oto poprawna odpowiedź. nie możesz bezpośrednio opublikować zdjęcia na Instagramie. Musisz przekierować na Instagram za pomocą 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 ];
}
UWAGA: po przekierowaniu do aplikacji Instagram nie możesz wrócić do aplikacji. musisz ponownie otworzyć aplikację
źródło
Możesz to zrobić bez użycia UIDocumentInteractionController i przejść bezpośrednio na Instagram za pomocą tych 3 metod:
Działa tak jak wszystkie inne znane aplikacje. Kod jest napisany w Objective c, więc jeśli chcesz, możesz go przetłumaczyć na szybki. To, co musisz zrobić, to zapisać obraz na urządzeniu i użyć URLScheme
dodaj to do swojego pliku .m
#import <Photos/Photos.h>
Najpierw musisz zapisać swój UIImage na urządzeniu za pomocą tej metody:
-(void)savePostsPhotoBeforeSharing { UIImageWriteToSavedPhotosAlbum([UIImage imageNamed:@"image_file_name.jpg"], self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); }
Ta metoda to wywołanie zwrotne do zapisania obrazu na twoim urządzeniu:
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo; { [self sharePostOnInstagram]; }
Po zapisaniu obrazu na urządzeniu musisz odpytać obraz, który właśnie zapisałeś i pobrać go jako zestaw PHA
-(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"); } } }
I nie zapomnij umieścić tego w swoim info.plist pod
LSApplicationQueriesSchemes
<string>instagram</string>
źródło
- (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]; } }
Wypróbowałem to w mojej aplikacji i na pewno zadziała
źródło
UIUtils
&UICachedFileMgr
?Jak dla mnie, najlepszy i najłatwiejszy sposób opisany tutaj Udostępnij zdjęcie na Instagramie z mojej aplikacji na iOS
Musisz zapisać obraz na urządzeniu w formacie .igo, a następnie użyć „UIDocumentInteractionController”, aby wysłać lokalną ścieżkę aplikacji Instagram. Nie zapomnij ustawić „UIDocumentInteractionControllerDelegate”
Radzę dodać coś takiego:
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { <your code> }
źródło
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];
źródło
Zauważyłem, że jeśli zamiast
URL
wskazania wskażesz na obrazek , element działania pojawia się sam i nie musisz robić nic więcej. Pamiętaj, że przedmioty w środku zostaną wyrzucone i nie ma możliwości wcześniejszego wypełnienia napisów na Instagramie. Jeśli nadal chcesz podpowiedzieć użytkownikowi, aby opublikował określony podpis, musisz utworzyć niestandardowe działanie, w którym skopiujesz ten tekst do schowka i poinformujesz o tym użytkownika, tak jak w tym skrócie .activityItems
UIImage
Copy to Instagram
String
activityItems
źródło
@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"); } } }
UWAGA: - IMP TODO: - Dodaj poniższy klucz w Info.plist
<key>LSApplicationQueriesSchemes</key> <array> <string>instagram</string> </array>
źródło
Użyłem tego kodu:
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];
źródło
-(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; }
źródło
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];
źródło