webentwicklung-frage-antwort-db.com.de

Hochladen von Fotos über Ihre eigene iOS-App auf Instagram

Instagram hat kürzlich seine API-Richtlinie geändert, mit der Entwickler Bilder über ihre eigene App auf Instagram veröffentlichen können. Einige andere Techniken haben wir bisher dafür eingesetzt. Eine davon war, die Instagram-Anwendung aufzurufen, die im Wesentlichen Instagram öffnet und das Teilen von dort aus ermöglicht. Ein Tutorial, wie das geht, kann man hier sehen: Wie man ein Bild von seiner eigenen iOS-App an Instagram weitergibt

Es gibt jedoch mehrere Anwendungen, die das direkte Teilen auf der Instagram-Plattform ermöglichen, ohne die Instagram-Anwendung aufzurufen. Hipstamatic's Oggl ermöglicht das direkte Teilen auf Instagram, ohne Instagram zu aktivieren. Nachfolgend habe ich einige Screenshots des Prozesses gepostet.

Nachdem mein Foto aufgenommen wurde, gab mir Oggl mehrere andere soziale Netzwerke, an die ich mein Foto weitergeben konnte. Ich habe Facebook und Instagram ausgewählt.

enter image description here

Nachdem ich Instagram ausgewählt hatte, öffnete es Safari und brachte mich auf die folgenden zwei Seiten, um Oggl zu erlauben, auf Instagram zu posten. Ich gab meine Instagram-Anmeldeinformationen ein und brachte mich dann zur Autorisierungsseite.

enter image description hereenter image description here

Nachdem ich Oggl autorisiert hatte, konnte ich ihn auf Instagram hochladen. Innerhalb von Sekunden sah ich das Foto in meinem Instagram-News-Feed. Diese Art der Weitergabe ist der Weitergabe von Facebook und Twitter sehr ähnlich. Es hat das gleiche Konzept. Wie kann man das machen? Wie kann man diesen genauen Prozess in seiner App replizieren? Die in meiner Anwendung aufgenommenen Bilder sind 612px mal 612 px, daher sind sie mit den Abmessungen der auf Instagram aufgenommenen Fotos kompatibel. Ich habe bereits das Teilen auf Facebook und Twitter implementiert, aber ich möchte das Hochladen auf Instagram genauso wie Oggl implementieren. Ist das möglich?

Es gibt viele iOS-Entwickler, die von einer detaillierten kanonischen Antwort auf diese Frage profitieren können. 

Danke dir

28
noahandthewhale

Hipstamatic ist eine der wenigen Apps, die über die Instagram-API schreibgeschützt sind.

Instagram hat keine öffentliche API zum Posten von Fotos. Sie können ihre Daten abrufen, aber keine eigenen schreiben.

Hipstamatic und einige andere Apps haben spezielle Vereinbarungen mit Instagram ausgehandelt, mit denen sie die Schreib-API verwenden und Fotos direkt veröffentlichen können.

Für alle anderen Entwickler müssen Sie iOS-Hooks verwenden, um sie an Instagram weiterzugeben, indem Sie zu ihrer App wechseln.

Soweit ich weiß, ist es nicht einfach, Instagram für Schreibzugriff zu erhalten - Sie müssten eine Top-App mit qualitativ hochwertigen Inhalten haben und mit den richtigen Leuten befreundet sein :)

25
Rowan

Sie können ein Bild nicht direkt auf Instagram posten. Sie müssen Ihr Bild mit UIDocumentInteractionController umleiten. Verwenden Sie den folgenden Code, hoffe, es wird helfen

@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;
}
9
Faran Ghani

wenn Sie das Bild nur ohne Clipping senden möchten, sollten Sie die Bildgröße 640 x 640 oder den Anwendungsabsturz einstellen 

Das ist mein 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")
        }

Erweiterung für Shapshot von uiview nehmen

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

Erweiterung für eingestellte Bildgröße

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

        let newImage = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();
        return newImage
    }
}
4
Beslan Tularov

wörtlich aus der Instagram API-Dokumentation:

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

Derzeit ist das Hochladen über die API nicht möglich. Wir haben uns bewusst entschieden, dies aus folgenden Gründen nicht hinzuzufügen:

  1. Instagram ist über dein Leben unterwegs - wir hoffen, Fotos aus der App heraus anzuregen.
  2. Wir wollen Spam bekämpfen und qualitativ schlechte Fotos. Wenn wir das Hochladen aus anderen Quellen zulassen, ist es schwieriger zu kontrollieren, was in das Instagram-Ökosystem fließt. Trotzdem arbeiten wir daran, sicherzustellen, dass Benutzer auf unserer Plattform konsistente und qualitativ hochwertige Erfahrungen sammeln.
4
NiloVelez

Was Sie zu tun versuchen, wird über die Instagram-API http://instagram.com/developer/ implementiert. Sie können auch die Instagram-App verwenden, um ähnliche Aktionen auszuführen. Diese sind unter iPhone Hooks dokumentiert. Wenn Sie Ruby Motion verwenden, können Sie das offizielle Framework verwenden. Leider gibt es keine offiziell unterstützte Objective-C-iOS-API, jedoch sind einige Open-Source-Alternativen verfügbar, wie beispielsweise das NRGramKit .

Die genaue Art und Weise der Implementierung der Interaktion mit der Instagram-API geht über eine Stack-Overflow-Antwort hinaus. Die obigen Links sollten jedoch einen guten Ausgangspunkt bieten, wenn Sie mit der iOS-Programmierung vertraut sind. 

4
allprog

Vielleicht möchten Sie auch den Abschnitt "Document Interaction" der API-Dokumentation von Instagram für iPhone Hooks ausprobieren. Dies könnte genutzt werden, um das zu tun, was Sie versuchen, und so könnte es auch Oggl sein.

1
omdel

Ich habe den folgenden Code zum Teilen von Fotos in Instagram verwendet.

    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];
    }
    

0
Nirzar Gandhi