Как установить различные параметры в общем доступе WhatsApp с помощью UIActivityViewController в iOS Swift? - PullRequest
0 голосов
/ 25 июня 2018

Я использую UIActivityViewController для обмена контентом из приложения.

Я хочу поделиться различным контентом с разными приложениями для обмена.

Как в сообщении Вывод будет таким: изображение + текст + URL

inWhatsapp я хотел бы поделиться, как показано ниже изображение текст + URL

Как я могу это сделать?См. Скриншоты ниже для этого.

1 Ответ

0 голосов
/ 25 июня 2018

Мне понадобилось время, чтобы понять это, но вот как это сработало для меня:

Подумайте об этой проблеме в два этапа: во-первых, нам нужно сообщить UIActivityViewController, какой контент мы хотим поделиться. Во-вторых, нам нужно возвращать контент, основанный на каждой социальной сети: ссылку, изображение или текст. Приложение для социальных сетей сообщит, с каким контентом оно может работать, и оно будет отображаться только в том случае, если мы поделимся правильным типом контента.

На первом шаге мы попытаемся обмануть приложения для социальных сетей, заявив, что мы хотим поделиться UIImage и NSObject. Это откроет доступ к большинству приложений для социальных сетей.

На втором шаге мы определим, какое приложение для социальных сетей щелкнул пользователь, и вернем для него соответствующий контент.

Реализация:

создать два UIActivityItemSource, один из которых будет возвращать UIImage, а другой - NSObject.

class SocialActivityItem: NSObject, UIActivityItemSource {
    var img: UIImage?
    var url: URL?

    convenience init(img: UIImage, url: URL) {
        self.init()
        self.img = img
        self.url = url
    }

    // This will be called BEFORE showing the user the apps to share (first step)
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return img!
    }

    // This will be called AFTER the user has selected an app to share (second step)
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType?) -> Any? {
        //Instagram
        if activityType?.rawValue == "com.burbn.instagram.shareextension" {
            return img!
        } else {
            return url
        }
    }
}

и

class TextActivityItem: NSObject, UIActivityItemSource {
    var textToShare: String?

    convenience init(textToShare: String) {
        self.init()
        self.textToShare = textToShare
    }

    // This will be called BEFORE showing the user the apps to share (first step)
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return NSObject()
    }

    // This will be called AFTER the user has selected an app to share (second step)
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType?) -> Any? {
      var text = ""
      if activityType?.rawValue == "net.whatsapp.WhatsApp.ShareExtension" {
          text = "Sharing on Whatsapp"
      }

      if activityType == UIActivityType.postToFacebook {
          text = "Sharing on Facebook"
      }
      return text
    }
}

Тогда вам просто нужно все настроить:

let url = URL(string: "www.google.com")!
let socialProvider = SocialActivityItem(img: img, url: url)
let textProvider = TextActivityItem(textToShare: "Sharing on social media!")
let activityViewController = UIActivityViewController(activityItems: [socialProvider, textProvider], applicationActivities: nil)
...