如何在 iOS Swift 中与 UIActivityViewController 共享的 WhatsApp 中设置不同的参数?

Posted

技术标签:

【中文标题】如何在 iOS Swift 中与 UIActivityViewController 共享的 WhatsApp 中设置不同的参数?【英文标题】:How to set different parameters in WhatsApp sharing with UIActivityViewController in iOS Swift? 【发布时间】:2018-06-25 11:16:44 【问题描述】:

我正在使用 UIActivityViewController 来共享来自应用程序的内容。

我想用不同的分享应用分享不同的内容。

就像在消息输出中一样。image + text + URL

我想在 Whatsapp 中分享如下图 text + URL

我该怎么做?请参阅下面的屏幕截图。

【问题讨论】:

Share image/text through WhatsApp in an ios app的可能重复 @SahilKapoor 请检查这个应用程序:itunes.apple.com/in/app/hq-live-trivia-game-show/… 它在 whatsapp 共享上共享文本 + URL 【参考方案1】:

我花了很长时间才弄清楚这一点,但这对我来说是这样的:

分两步思考这个问题:首先,我们需要告诉 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)

【讨论】:

以上是关于如何在 iOS Swift 中与 UIActivityViewController 共享的 WhatsApp 中设置不同的参数?的主要内容,如果未能解决你的问题,请参考以下文章

Swift iOS 10 的推送通知

在 Swift 中与 UIActivityViewController 共享字典

在 Swift 中与 mongoDB 和 Parse 联合

如何在 android 中与 agora.io sdk 共享屏幕?

在 iOS 中与 InAppBrowser 插件一起使用时如何更改状态栏颜色?

iOS:如何在导航栏中与 NavigationBar Title 平行放置一个按钮?