如何在Instagram的共享流程中打开图片?

时间:2018-08-13 18:47:53

标签: swift xcode facebook instagram phasset

我试图在Instagram的共享流中打开图像,而不必将图像下载到照片库中。这两种方法都可行,但它们也有缺点:

第一种方法:该方法将图像保存在临时位置。然后,它使用UIDocumentInteractionController在Instagram的共享流中打开图像。这里的问题是,一旦显示UIDocumentInteractionController,就会显示多个应用程序,我想避免这种情况。

var documentController: UIDocumentInteractionController!
func shareToInstagram(image: UIImage) {
        DispatchQueue.main.async {
            let instagramURL = URL(string: "instagram://app")
            if UIApplication.shared.canOpenURL(instagramURL!) {
                let imageData = UIImageJPEGRepresentation(image, 100)
                let writePath = (NSTemporaryDirectory() as NSString).appendingPathComponent("instagram.igo")

                do {
                    try imageData?.write(to: URL(fileURLWithPath: writePath), options: .atomic)
                } catch {
                    print(error)
                }

                let fileURL = URL(fileURLWithPath: writePath)
                documentController = UIDocumentInteractionController(url: fileURL) 
                documentController.uti = "com.instagram.exlusivegram"
                documentController.presentOpenInMenu(from: self.view.bounds, in: self.view, animated: true)

            } else {
                print(" Instagram is not installed ")
            }
        }
    }

第二种方法:这是一种很好的方法,因为它不使用UIDocumentInteractionController,而是立即在Instagram共享流中打开图像。这种方法的问题在于,您必须首先将图像保存到照片库中,这是我要避免的事情。

func shareImage() {
        let fetchOptions = PHFetchOptions()
        fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
        let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
        guard let lastAsset = fetchResult.firstObject else { return }
        let localIdentifier = lastAsset.localIdentifier
        let u = "instagram://library?LocalIdentifier=" + localIdentifier
        let url = URL(string: u)!
        if UIApplication.shared.canOpenURL(url) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            print("Error")
        }
    }

我想知道是否可以使用第二种方法而不必将图像保存到照片库中?第一种方法似乎首先将其保存到临时目录中,第二种方法是否有可能这样做?

谢谢

0 个答案:

没有答案