2013-08-14 25 views
27

Instagram niedawno wprowadził zmiany w polityce API, która umożliwiła programistom publikowanie zdjęć na platformie Instagram za pośrednictwem ich własnej aplikacji. Kilka innych technik, które wcześniej wykorzystaliśmy w tym celu. Jednym z nich było wywołanie aplikacji Instagram, która w zasadzie otworzyła Instagram i udostępniła go. Poradnik na temat tego, jak można to zrobić, można znaleźć tutaj: How to share image to Instagram from your own iOS appPrzesyłanie zdjęć do Instagrama za pośrednictwem Twojej aplikacji na iOS

Istnieje jednak kilka aplikacji, które pozwalają na bezpośrednie udostępnianie na platformie Instagram bez wywoływania aplikacji Instagram. Hipstamatic's Oggl pozwala na bezpośrednie udostępnianie na Instagram bez wywoływania Instagrama. Poniżej zamieściłem kilka zrzutu ekranu tego procesu.

Kiedy moje zdjęcie zostało zrobione, Oggl dał mi kilka innych sieci społecznościowych, którym mogłem udostępnić moje zdjęcie. Wybrałem Facebooka i Instagram.

enter image description here

Po wybraniu Instagram, otworzyła Safari i przyniósł mi do następujących dwóch stron, aby zezwolić Oggl odpowiedzieć na Instagram. Wprowadziłem moje referencje na Instagramie, a następnie przeniesiono mnie na stronę autoryzacji.

enter image description hereenter image description here

Raz upoważniony Oggl, byłem w stanie przesłać do Instagram iw ciągu kilku sekund, widziałem zdjęcie na moim News Feed Instagram. Ten rodzaj udostępniania jest bardzo podobny do udostępniania na Facebooku i Twitterze. Ma tę samą koncepcję. Jak można to zrobić? Jak można replikować ten dokładny proces w swojej aplikacji? Zdjęcia zrobione w mojej aplikacji to 612px przez 612 px, dzięki czemu są zgodne z wymiarami zdjęć zrobionych na Instagramie. Zaimplementowałem już udostępnianie na Facebooku i Twitterze, ale chciałbym zaimplementować przesyłanie na Instagram, tak jak zrobił to Oggl. czy to możliwe?

Istnieje wielu programistów iOS, którzy mogą skorzystać z dobrze szczegółowej odpowiedzi kanonicznej na to pytanie.

Dziękuję

+3

nie widzę, gdzie faktycznie zadał pytanie. – Jason

+0

@Jason Zmieniłem moje pytanie. Dziękuję, że zauważyłeś mój błąd. – noahandthewhale

+0

Witam @ nhandthewhale wprowadziłeś to feauture. Chcę tego samego. czy możesz mnie zasugerować. – Kittu

Odpowiedz

25

Hipstamatic to jedna z niewielu aplikacji, które otrzymały dostęp do zapisu za pośrednictwem interfejsu API Instagrama.

Instagram nie ma publicznego interfejsu API do publikowania zdjęć, pozwala pobierać dane, ale nie zapisuje własnych.

Hipstamatic i kilka innych aplikacji wynegocjowało specjalne oferty z Instagramem, które umożliwiają im bezpośrednie pisanie API i publikowanie zdjęć.

Dla wszystkich innych programistów musisz użyć haków iOS, aby udostępnić je Instagramowi, przełączając się do ich aplikacji.

O ile wiem, to nie jest łatwo dostać się do Instagram pozwala pisać access- trzeba by mieć górną app z wysokiej jakości treści i być przyjazne dla odpowiednich ludzi :)

+4

Użyj 'UIDocumentInteractionController', aby uruchomić aplikację Instagram z wybranym zdjęciem i podpisem. (Użytkownik może edytować podpis w aplikacji Instagram). –

4

Co próbujesz zrobić jest realizowany poprzez Instagram API http://instagram.com/developer/. Możesz również użyć aplikacji Instagram, aby wykonać podobne czynności. Są one udokumentowane pod numerem iPhone Hooks. Jeśli korzystasz z Ruby Motion, będziesz mógł korzystać z official framework. Niestety, nie ma oficjalnie obsługiwanego interfejsu API dla systemu ObjectOS-C iOS, ale dostępne są również niektóre alternatywy open source, takie jak NRGramKit.

Dokładny sposób implementacji interakcji z interfejsem API Instagram wykracza poza odpowiedź przepełnienia stosu, ale powyższe linki powinny dać dobry punkt wyjścia, jeśli znasz programowanie w systemie iOS.

+0

dzięki za odpowiedź, zajrzę teraz i dam ci znać o moich postępach. – noahandthewhale

+0

To dość zaawansowana aplikacja, więc proponuję ją zaimplementować kawałek po kawałku. Nie próbuj * atakować * całej rzeczy naraz. :) Jeśli uważasz, że to rozwiązało Twój problem, byłbym wdzięczny za zaakceptowanie tej odpowiedzi. – allprog

10

Nie możesz bezpośrednio opublikować zdjęcia na Instagram. Musisz przekierować obraz za pomocą UIDocumentInteractionController. Skorzystać z poniższego kodu, nadzieję, że pomoże

@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; 
} 
+1

Ten fragment kodu wydaje się niekompletny i sprzeczny. self.dic jest przypisywany dwa razy, a właściwość UTI jest przypisywana przed zdefiniowaniem dic. W jaki sposób wykorzystywany jest sam obraz? Prawdopodobnie generujesz obraz z bieżącego widoku, ale ten kod również nie istnieje. –

4

dosłownie z dokumentacji API Instagram:

https://instagram.com/developer/endpoints/media/

W tym czasie, przesyłając za pośrednictwem interfejsu API nie jest możliwe. Podjęliśmy świadomy wybór, aby nie dodawać tego z następujących powodów:

  1. Instagram opowiada o Twoim życiu w podróży - mamy nadzieję, że zachęci Cię to do robienia zdjęć z poziomu aplikacji.
  2. Chcemy walczyć ze spamem & zdjęć o niskiej jakości. Kiedy zezwalamy na przesyłanie z innych źródeł, trudniej jest kontrolować, co wchodzi w ekosystem Instagrama. Podsumowując, pracujemy nad sposobami zapewnienia użytkownikom spójnego i wysokiej jakości doświadczenia na naszej platformie.
+0

Jak zauważył Rowan, tylko niewielka paczka aplikacji uzyskała uprawnienia do przesyłania obrazów. – NiloVelez

4

jeśli chcesz po prostu wysłać obraz bez przycinania należy ustawić rozmiar obrazu 640 x 640 lub awarii aplikacji

To mój swift code

var instagramURL = NSURL(string: "instagram://app")! 
     if UIApplication.sharedApplication().canOpenURL(instagramURL) { 
      var documentDirectory = NSHomeDirectory().stringByAppendingPathComponent("Documents") 
      var saveImagePath = documentDirectory.stringByAppendingPathComponent("Image.igo") 
      var imageData = UIImagePNGRepresentation(self.bestScoreShareView.takeSnapshot(W: 640, H: 640)) 
      imageData.writeToFile(saveImagePath, atomically: true) 
      var imageURL = NSURL.fileURLWithPath(saveImagePath)! 
      docController = UIDocumentInteractionController() 
      docController.delegate = self 
      docController.UTI = "com.instagram.exclusivegram" 
      docController.URL = imageURL 
      docController.presentOpenInMenuFromRect(CGRectZero, inView: self.view, animated: true) 

     } else { 
      println("instagram not found") 
     } 

rozszerzenie do wykonania shapshot z UIView

extension UIView { 
    func takeSnapshot(#W: CGFloat, H: CGFloat) -> UIImage { 
     var cropRect = CGRectMake(0, 0, 600, 600) 
     UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.mainScreen().scale) 
     drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true) 
     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     image.imageWithNewSize(CGSizeMake(W, H)) 
     return image 
    } 
} 

przedłużenia na zestaw rozmiar

extension UIImage { 
    func imageWithNewSize(newSize:CGSize) ->UIImage { 
     UIGraphicsBeginImageContext(newSize) 
     self.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height)) 

     let newImage = UIGraphicsGetImageFromCurrentImageContext(); 

     UIGraphicsEndImageContext(); 
     return newImage 
    } 
} 
+0

w ustawionym rozmiarze obrazu "newImage" jest opcjonalne, ale zwracane jest nie-opcjonalne wystąpienie UIImage. 'niech newImage = UIGraphicsGetImageFromCurrentImageContext()!' będzie działać –

0

Użyłem poniżej kod do udostępniania zdjęć w Instagram.

NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"]; 
 
    if([[UIApplication sharedApplication] canOpenURL:instagramURL]) //check for App is install or not 
 
    { 
 
     NSData *imageData = UIImagePNGRepresentation(image); //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 
 
    { 
 
     UIAlertView *errMsg = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"No Instagram Available" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
 
     [errMsg show]; 
 
    } 
 

Powiązane problemy