Я пытаюсь поделиться изображением с хэштегом, используя UIActivityViewController, и я сталкиваюсь с каким-то странным поведением при попытке поделиться с Twitter, Facebook и Instagram. Кажется, что не существует много документации об этих расширениях общих сервисов.
Сценарий 1: контроллер инициализации с массивом элементов активности с изображением и текстом
Если я инициализирую контроллер так, Twitter и Facebook появятся в контроллере (нет Instagram, так как он не поддерживает текстовые элементы), и оба будут программно предварительно заполнять хэштегов в поле ввода текста:
let activityVC = UIActivityViewController(activityItems: [myHashtagString, myImage], applicationActivities: nil)
Сценарий 2: контроллер инициализации с единственным изображением
В этом случае появляются все сети, но я (очевидно) теряю функцию автоматического хешетага:
let activityVC = UIActivityViewController(activityItems: [myImage], applicationActivities: nil)
Сценарий 3: подкласс UIActivityItemSource
Если я создаю свой собственный подкласс UIActivityItemSource, я могу почти заставить все работать. Тем не менее, и это то, что я не могу понять, используя методы протокола, поскольку у меня есть результаты в автоматическом хэштеге, работающем в Facebook, но не в Twitter. Как это возможно - есть ли специальный ключ для Twitter? Должен быть способ работать, если он работает в сценарии №1...
Интересно, что этот метод работает как для Twitter, так и для Facebook, если я вставляю URL (прокомментировал). Так почему же текст не будет работать для Twitter!?
let activityItem = CustomItemSource(image: image, message: "#TestTag")
let activityVC = UIActivityViewController(activityItems: [activityItem], applicationActivities: nil)
...
class CustomItemSource: NSObject, UIActivityItemSource {
private var image: UIImage!
private var message: String!
// MARK: Init
init(image: UIImage, message: String) {
super.init()
self.image = image
self.message = message
}
// MARK: Item Source Protocol
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return image
}
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
if activityType == .postToTwitter || activityType == .postToFacebook {
//return ["url": URL(string: "https://www.google.com")!, "image": image]
return ["text": message, "image": image]
}
else {
return ["image": image]
}
}
}