Как правильно поделиться изображением в Instagram? - PullRequest
0 голосов
/ 14 июня 2019

Как я могу поделиться UIImage с приложением Instagram?

Я знаю, эта тема обсуждалась много раз. Но из-за эволюции SWIFT я надеюсь найти лучшее решение. Я нашел два разных способа сделать это, оба работают на моем устройстве:

1.) Первый подход: UIApplication.shared.open ()

func backgroundImage(_ backgroundImage: Data, attributionURL: String) {
    // Verify app can open custom URL scheme, open if able
    guard let urlScheme = URL(string: "instagram-stories://share"),
        UIApplication.shared.canOpenURL(urlScheme) else {
            // Handle older app versions or app not installed case
            return
    }

    let pasteboardItems = [["com.instagram.sharedSticker.backgroundImage": backgroundImage,
                            "com.instagram.sharedSticker.contentURL": attributionURL]]
    let pasteboardOptions: [UIPasteboard.OptionsKey: Any] = [.expirationDate: Date().addingTimeInterval(60 * 5)]

    UIPasteboard.general.setItems(pasteboardItems, options: pasteboardOptions)

    UIApplication.shared.open(urlScheme)
}

Это открывает мое изображение непосредственно в приложении Instagram. Пока все хорошо, но таким образом, можно поделиться только в Instagram STORIES .

2.) Второй подход: UIDocumentInteractionController ()

private let kInstagramURL = "instagram://"
private let kUTI = "com.instagram.exclusivegram"
private let kfileNameExtension = "instagram.igo"

[...]

if UIApplication.shared.canOpenURL(instagramURL! as URL) {

        let jpgPath = (NSTemporaryDirectory() as NSString).appendingPathComponent(kfileNameExtension)

        do {
            try UIImageJPEGRepresentation(imageInstagram, 0.75)?.write(to: URL(fileURLWithPath: jpgPath), options: .atomic)
        } catch {
            print(error)
        }
        let rect = CGRect.zero
        let fileURL = NSURL.fileURL(withPath: jpgPath)

        documentInteractionController.url = fileURL
        documentInteractionController.delegate = self
        documentInteractionController.uti = kUTI

        // adding caption for the image
        documentInteractionController.annotation = ["InstagramCaption": instagramCaption]
        documentInteractionController.presentOpenInMenu(from: rect, in: view, animated: true)
        //documentInteractionController.presentOptionsMenu(from: rect, in: view, animated: true)
}

При этом открывается всплывающее окно UIDocumentInteractionController, где пользователь может выбрать приложение, с которым он хочет поделиться. К сожалению, многие приложения могут обрабатывать «instagram.igo»: Скриншот всплывающего окна

Моя проблема сейчас:

  • Я хочу позволить пользователю выбрать, если он хочет поделиться в ленте или историях, поэтому решение № 1 не вариант (возможны только истории)
  • UIInteractionController открывает глупое всплывающее окно со слишком большим количеством приложений.

Мой вопрос сейчас: Есть решение открыть приложение напрямую, без всплывающего окна! Но возможно ли также попасть в экран выбора Instagram напрямую без всплывающего окна? Экран выбора в Instagram

В Insta Developer Hooks * нет помощи

...