Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Post photo to Instagram using their iOS hooks

I use the following code in my iOS app to use Instagram iPhone hooks to post a photo to Instagram. I only want the "Open In..." menu to have Instagram app, no other apps. But in my case Camera+ also shows up. How can I restrict to Instagram?

Also, can I directly open Instagram instead of showing Open In menu?

NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) {
    //imageToUpload is a file path with .ig file extension
    self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:imageToUpload]];
    self.documentInteractionController.UTI = @"com.instagram.photo";
    self.documentInteractionController.annotation = [NSDictionary dictionaryWithObject:@"my caption" forKey:@"InstagramCaption"];
    [self.documentInteractionController presentOpenInMenuFromBarButtonItem:self.exportBarButtonItem animated:YES];
}
like image 549
AmaltasCoder Avatar asked Jan 30 '12 09:01

AmaltasCoder


3 Answers

BTW Instagram added an exclusive file extention (ig) and UTI (com.instagram.exclusivegram) for this. It still opens the Open with... menu but the only option is Instagram.

More info here: https://instagram.com/developer/mobile-sharing/iphone-hooks/

like image 163
JoshOiknine Avatar answered Oct 30 '22 12:10

JoshOiknine


You can get the solution from this link.

  1. Save image with the .igo extension instead of .ig. This is the "exclusive" version of the filetype.

  2. Create a UIDocumentInteractionController, then assign the value com.instagram.exclusivegram to the property UTI.

  3. Present your UIDocumentInteractionController with presentOpenInMenuFromRect:inView:animated.

like image 32
nahung89 Avatar answered Oct 30 '22 13:10

nahung89


This worked for me, do it like this and you will have only Instagram as the exclusive app to open your image.

    NSString *documentDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    // *.igo is exclusive to instagram
    NSString *saveImagePath = [documentDirectory stringByAppendingPathComponent:@"Image.igo"];
    NSData *imageData = UIImagePNGRepresentation(filteredImage);
    [imageData writeToFile:saveImagePath atomically:YES];

    NSURL *imageURL=[NSURL fileURLWithPath:saveImagePath];

    _docController=[[UIDocumentInteractionController alloc]init];
    _docController.delegate=self;
    _docController.UTI=@"com.instagram.photo";
    [_docController setURL:imageURL];
    _docController.annotation=[NSDictionary dictionaryWithObjectsAndKeys:@"#yourHashTagGoesHere",@"InstagramCaption", nil];
    [_docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];
like image 4
user2421700 Avatar answered Oct 30 '22 12:10

user2421700