ios iphone hooks open instagram directly without showing UIDocumentInteractionController

时光怂恿深爱的人放手 提交于 2019-12-03 12:56:14

I've searched for this myself, I don't think it's possible to use the UIDocumentInteractionController without showing an action sheet, nor does it seem possible to share an image with instagram without using a UIDocumentInteractionController.

Which leads to the unavoidable action sheet.

I understand why they designed it like that (you won't leave an app unknowingly as a user) but it leads to annoying UI design in many cases.

I use a very simple share-open Instagram flow.

  • I save image locally to photos
  • Then I open Instagram with following URL: instagram://library?AssetPath=assets-library

This opens Instagram directly into photos library. Because photo was saved few moments ago, the new photo is visible as the first photo in library.

It looks like this method is NOT mentioned in the Instagram documentation. However, I just confirmed that @sabiland's answer still works in Swift 4.2 iOS 12. Here is some sample code:

func postImageToInstagram(image: UIImage) {
    UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(image:didFinishSavingWithError:contextInfo:)), nil)
}

@objc func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {
    if let err = error {
        print(err)
    }

    let urlString = "instagram://library?AssetPath=assets-library"

    let url = URL(string: urlString)!
    if UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    } else {
        let alertController = UIAlertController(title: "Error", message: "Instagram is not installed", preferredStyle: .alert)
        alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        self.present(alertController, animated: true, completion: nil)
    }
}

Original code source

You also have to make sure you info.plist has the instagram query scheme.

In order for your app to use Instagram's custom URL scheme, you mush whitelist the scheme by adding instagram:// to the LSApplicationQueriesSchemes key in your app's Info.plist.

Source

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!