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