88 votes

Comment partager une image sur Instagram dans iOS ?

Mon client souhaite partager une image sur Instagram, Twitter et Facebook.

J'ai fait Twitter et Facebook mais je n'ai pas trouvé d'API ou autre chose sur internet pour partager une image sur Instagram. Est-il possible de partager une image sur Instagram ? Si oui, comment ?

Lorsque j'ai consulté le site de développement 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 obtenu le jeton d'instagram selon instagram.com/developer mais maintenant je ne sais pas quoi faire pour partager avec l'image d'instagram.

0 votes

70voto

Hiren Points 5781

Enfin j'ai eu la réponse. Vous ne pouvez pas directement poster 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;
}

NOTE : une red red redirection vers l'application instagram vous ne pouvez pas revenir à votre application. vous devez ouvrir à nouveau l'application

Télécharger la source à partir de ici

0 votes

Où se trouve la fonction setupControllerWithURL, ou est-elle utilisée ?

0 votes

J'ai utilisé votre code il ouvre une feuille d'actions avec l'option "instagram" mais quand je clique dessus, rien ne se passe pouvez-vous m'aider ?

3 votes

@SurenderRathore vous devez mettre votre image à l'échelle en 612*612 et l'enregistrer au format .ig .ig montre que vous voulez ouvrir votre image dans instagram et vous devez tester dans votre iPhone ou iPod jusqu'à la version 4.3 . iPad n'est pas supporté

9voto

Chintan Patel Points 2378

Pour iOS 6 et les versions supérieures, vous pouvez utiliser cette UIActivity pour télécharger des images sur Instagram, qui présente le même flux de travail en utilisant les crochets iOS, mais simplifie le développement :

https://github.com/coryalder/DMActivityInstagram

0 votes

Bonjour @Chintan Patel comment puis-je obtenir des informations sur le profil de l'utilisateur dans si vous avez un exemple de source s'il vous plaît partager avec nous.

6voto

test Points 121

C'est une réponse correcte que j'ai mise en œuvre avec précision. Dans le fichier .h

 UIImageView *imageMain;
 @property (nonatomic, strong) UIDocumentInteractionController *documentController;

dans le fichier .m seulement écrire

 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");

 }

Vous obtiendrez certainement des résultats. Par exemple, vous verrez un popover en bas avec une image instagram, cliquez dessus et amusez-vous.

2voto

Anooj VM Points 190

Voici la bonne réponse. vous ne pouvez pas poster 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 ];

NOTE : une red red redirection vers l'application instagram vous ne pouvez pas revenir à votre application. vous devez ouvrir à nouveau l'application

0 votes

Vous avez défini le délégué mais ne l'avez pas écrit / affiché ?

1voto

neha_sinha19 Points 9
- (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];
    }
}

Je l'ai essayé dans mon application et cela fonctionnera certainement.

0 votes

Vous devriez peut-être expliquer UIUtils & UICachedFileMgr ?

0 votes

Comprendre. Suggérer de modifier votre réponse pour fournir plus de détails.

0 votes

@Raptor : Veuillez télécharger l'application d'exemple à partir de ce qui suit : lien

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X