Как правильно поделиться изображением в Instagram?

Как я могу поделиться 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 истории.

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

0 ответов

Другие вопросы по тегам