2016-03-31 19 views
7

Wäre es möglich, ein Bild auf Instagram zu teilen, indem man das Action Share Sheet umgeht? HinweisiOS - Bild an Instagram senden - DocumentInteraction

Bitte, ich bin bewusst der UIDocumentInteractionController und den Haken und in der Tat funktioniert es gut. Mit ihrem Beispielcode erhalten Sie eine Copy to Instagram Option (entweder einmalig, wenn Sie die exklusive UTI verwenden oder eine große Liste von Apps, die neben Instagram ein JPG/PNG verarbeiten können).

Das funktioniert gut, aber ich würde gerne wissen, ob es eine Möglichkeit gibt, die Aktion "Copy to Instagram" auszuführen, ohne das Menü UIDocumentInteractionController in iOS 9+ zu präsentieren.

Für den Datensatz ist dies eine vereinfachte Version des Codes, der perfekt funktioniert. Vorausgesetzt, dass Sie eine gültige NSURL haben ...

 guard let data: NSData = NSData(contentsOfURL: url), 
        image = UIImage(data: data) else { 
      return 
     } 

     let imageData = UIImageJPEGRepresentation(image, 100) 
     let captionString = "caption" 
     let writePath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent("instagram.ig") 

     guard let _ = imageData?.writeToFile(writePath, atomically: true) else { 
      return 
     } 

     let fileURL = NSURL(fileURLWithPath: writePath) 
     self.documentController = UIDocumentInteractionController(URL: fileURL) 
     self.documentController.delegate = self 
     self.documentController.UTI = "com.instagram.photo" 
     self.documentController.annotation = NSDictionary(object: captionString, forKey: "InstagramCaption") 
     self.documentController.presentOpenInMenuFromRect(viewController.view.frame, inView: viewController.view, animated: true) 

Das Problem ist, dass dies ein „Aktionsblatt“ präsentieren, und ich möchte zu tun vermeiden, dass, wenn möglich, möchte ich instagram.ige (oder was auch immer den Namen verwenden, es war um es exklusiv zu machen) und dieses ActionSheet überspringen.

Ist das möglich?

UPDATE: Ich habe keine Lösung dafür gefunden, aber es scheint, als ob Instagram endlich Erweiterungen hinzufügt/hinzufügt: "Instagram hat kürzlich die Funktion zum Teilen von Erweiterungen seiner iOS App hinzugefügt. Jetzt können Sie Fotos von Dritten teilen. Party-Anwendungen direkt auf Instagram“ Quelle: http://www.macworld.com/article/3080038/data-center-cloud/new-instagram-feature-for-ios-makes-it-easier-to-share-photos-from-other-apps.html

+0

Sie eine Lösung für diese gefunden? Es scheint, selbst nach dem letzten Update von Instagram, Sie brauchen noch ein Aktienblatt, bevor Sie Instagram öffnen, anstatt es direkt zu machen. –

+0

habe ich nicht, aber ich habe auch nicht wieder versucht, um ehrlich zu sein. Ich glaube (wenn ich mich nicht falsch erinnere), dass der Kunde sich nicht darum gekümmert hat und sich entschieden hat, mit Instagram getrennt umzugehen. Lame. –

Antwort

2
import Photos 
... 

func postImageToInstagram(image: UIImage) { 
     UIImageWriteToSavedPhotosAlbum(image, self, #selector(SocialShare.image(_:didFinishSavingWithError:contextInfo:)), nil) 
} 
func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) { 
     if error != nil { 
      print(error) 
     } 

     let fetchOptions = PHFetchOptions() 
     fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 
     let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions) 
     if let lastAsset = fetchResult.firstObject as? PHAsset { 
      let localIdentifier = lastAsset.localIdentifier 
      let u = "instagram://library?LocalIdentifier=" + localIdentifier 
      let url = NSURL(string: u)! 
      if UIApplication.sharedApplication().canOpenURL(url) { 
       UIApplication.sharedApplication().openURL(NSURL(string: u)!) 
      } else { 
       let alertController = UIAlertController(title: "Error", message: "Instagram is not installed", preferredStyle: .Alert) 
       alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) 
       self.presentViewController(alertController, animated: true, completion: nil) 
      } 

     } 
} 
+1

Um diese Arbeit zu machen, müssen die folgenden in plist hinzuzufügen: LSApplicationQueriesSchemes instagram Thyselius

+1

Gibt es eine Möglichkeit, dies zu Fotoalbum, ohne zu speichern, zu tun? –