2013-08-14 3 views
27

Недавно Instagram внес изменения в свою политику API, которая позволила разработчикам публиковать изображения на платформе Instagram через собственное приложение. Несколько других методов, которые мы ранее использовали для этого. Один из них заключался в том, чтобы вызвать приложение Instagram, которое по существу откроет Instagram и сделает доступ к нему. Учебное пособие о том, как это можно сделать, можно посмотреть здесь: How to share image to Instagram from your own iOS appЗагрузка фотографий в Instagram с помощью собственного приложения iOS

Однако есть несколько приложений, которые позволяют осуществлять прямой доступ к платформе Instagram без использования приложения Instagram. Hipstamatic's Oggl позволяет напрямую использовать Instagram без вызова Instagram. Ниже я опубликовал несколько снимков экрана этого процесса.

Как только моя фотография была сделана, Оггл дал мне несколько других социальных сетей, к которым я мог бы поделиться своей фотографией. Я выбрал Facebook и Instagram.

enter image description here

После я выбрал Instagram, он открыл Safari и это привело меня к следующим двум страницам, чтобы разрешить Oggl разместить в Instagram. Я вошел в мои учетные данные Instagram, а затем привел меня на страницу авторизации.

enter image description hereenter image description here

После того, как я уполномочен Oggl, я был в состоянии загрузить в Instagram и в течение нескольких секунд, я увидел фото на моей ленте новостей Instagram. Этот тип обмена очень похож на общий доступ к Facebook и Twitter. Он имеет ту же концепцию. Как это можно сделать? Как можно воспроизвести этот точный процесс в своем приложении? Изображения, сделанные в моей заявке, - 612px на 612 px, поэтому они совместимы с размерами фотографий, сделанных на Instagram. Я уже реализовал общий доступ к Facebook и Twitter, но я хотел бы реализовать загрузку в Instagram так же, как и Oggl. Это возможно?

Есть много разработчиков iOS, которые могут извлечь выгоду из подробного канонического ответа на этот вопрос.

Спасибо

+3

Я не вижу, где вы на самом деле задал вопрос. – Jason

+0

@ Джейсон Я отредактировал мой вопрос. Спасибо, что заметили мою ошибку. – noahandthewhale

+0

Привет @noahandthewhale вы внедрили это feauture. Я хочу этого же. можете ли вы предложить мне. – Kittu

ответ

25

Hipstamatic - одно из немногих приложений, которым был предоставлен доступ к записи через API Instagram.

Instagram не имеет публичного API для публикации фотографий, он позволяет вам получать свои данные, но не писать самостоятельно.

Hipstamatic и несколько других приложений договорились о специальных предложениях с Instagram, которые позволяют им напрямую использовать API записи и отправлять фотографии.

Для всех других разработчиков вам нужно использовать iOS-крючки для обмена с Instagram, переключившись на их приложение.

Насколько я знаю, его не так легко получить Instagram, чтобы писать Access-вы должны иметь верхнее приложение с высоким качеством содержания и быть дружелюбным с нужными людьми :)

+4

Используйте 'UIDocumentInteractionController' для запуска приложения Instagram с выбранной вами фотографией и заголовком. (Пользователь может редактировать заголовок один раз внутри приложения instagram). –

4

То, что вы пытаетесь сделать, это реализуется через Instagram API http://instagram.com/developer/. Вы также можете использовать приложение Instagram для выполнения некоторых подобных действий. Они документированы под номером iPhone Hooks. Если вы используете Ruby Motion, тогда вы сможете использовать official framework. К сожалению, официально не поддерживается API Objective-C iOS, но доступны некоторые альтернативы с открытым исходным кодом, такие как NRGramKit.

Точный способ реализации взаимодействия с API-интерфейсом Instagram находится за пределами ответа на переполнение стека, но приведенные выше ссылки должны дать вам хорошую отправную точку, если вы знакомы с программированием на iOS.

+0

спасибо за ответ, я собираюсь изучить его прямо сейчас и сообщить вам о моем прогрессе. – noahandthewhale

+0

Это довольно продвинутое приложение, поэтому я предлагаю вам реализовать его по частям. Не пытайтесь * атаковать * все это сразу. :) Если вам кажется, что это решило вашу проблему, я был бы признателен, если вы ответите на этот вопрос. – allprog

10

Вы не можете публиковать изображения прямо на Instagram. Вы должны перенаправить свое изображение с помощью 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; 
} 
+1

Этот фрагмент кода кажется неполным и противоречивым. self.dic назначается дважды, а свойство UTI назначается до определения dic. Как используется изображение? Предположительно, вы генерируете изображение из текущего представления, но этот код также отсутствует. –

4

дословно из документации API Instagram:

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

В это время загрузки через API не представляется возможным. Мы сделали сознательный выбор, не добавляя это по следующим причинам:

  1. Instagram - это ваша жизнь в пути - мы надеемся поощрить фотографии из приложения.
  2. Мы хотим бороться со спамом & фотографии низкого качества. Как только мы разрешаем загрузку из других источников, сложнее контролировать то, что входит в экосистему Instagram. Все это говорит о том, что мы работаем над тем, чтобы обеспечить постоянную и качественную работу пользователей на нашей платформе.
+0

Как отметила Rowan, только небольшая группа приложений получила права на загрузку изображений. – NiloVelez

4

если вы хотите просто отправить изображение без обрезки следует установить размер изображения 640 х 640 или сбой приложения

Это мой скор код

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

расширение для принятия шапшот от 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 
    } 
} 

продления размера набор изображений

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

в вашем увеличенном размере размера изображения 'newImage' является необязательным, но вы возвращаете необязательный экземпляр UIImage. 'let newImage = UIGraphicsGetImageFromCurrentImageContext()!' будет работать –

0

Я использовал ниже код для обмена фотографий в 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]; 
 
    } 
 

Смежные вопросы