Подтвердить что ты не робот

Загрузка фотографий в Instagram через приложение iOS

Недавно Instagram внесла изменения в свою политику API, которая позволила разработчикам публиковать изображения на платформе Instagram через собственное приложение. Несколько других методов, которые мы ранее использовали для этого. Один из них заключался в том, чтобы вызвать приложение Instagram, которое по существу откроет Instagram и сделает доступ к нему. Ниже приведено руководство по тому, как это можно сделать: Как обмениваться изображениями с Instagram из вашего собственного приложения iOS

Однако есть несколько приложений, которые позволяют прямое совместное использование платформы Instagram без вызова приложения Instagram. Hipstamatic 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 пикселей, поэтому они совместимы с размерами фотографий, сделанных на Instagram. Я уже реализовал общий доступ к Facebook и Twitter, но я хотел бы реализовать загрузку в Instagram так же, как и Oggl. Возможно ли это?

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

Спасибо

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Вы не можете напрямую размещать изображение на 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;
}

Ответ 3

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

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

Ответ 4

verbatim из документации API Instagram:

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

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

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

Ответ 5

если вы хотите просто отправить изображение без обрезки, вы должны установить размер изображения 640 x 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
    }
}

Ответ 7

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