如何在 iOS Swift 中设置与 UIActivityViewController 共享的 WhatsApp 中的不同参数?
How to set different parameters in WhatsApp sharing with UIActivityViewController in iOS Swift?
我正在使用 UIActivityViewController 从应用程序共享内容。
我想用不同的分享应用分享不同的内容。
Like in Message 输出会是这样。image + text + URL
我想在 Whatsapp 中分享如下图 text + URL
我该怎么做?请参阅下面的屏幕截图。
我花了很长时间才弄明白,但这就是它对我有用的方式:
分两步思考这个问题:首先,我们需要告诉 UIActivityViewController 我们想要分享哪些内容。其次,我们需要 return 基于每个社交媒体的内容,link、图像或文本。由社交媒体应用决定它可以处理哪些内容,并且只有在我们分享正确类型的内容时它才会显示。
第一步,我们将尝试欺骗社交媒体应用程序,说我们要共享一个 UIImage 和一个 NSObject。这将打开大部分社交媒体应用程序以进行共享。
在第二步中,我们将确定用户点击了哪个社交媒体应用程序,以及return为其分配的内容。
实施:
创建两个 UIActivityItemSource,一个 return UIImage,另一个 return 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)
我正在使用 UIActivityViewController 从应用程序共享内容。
我想用不同的分享应用分享不同的内容。
Like in Message 输出会是这样。image + text + URL
我想在 Whatsapp 中分享如下图 text + URL
我该怎么做?请参阅下面的屏幕截图。
我花了很长时间才弄明白,但这就是它对我有用的方式:
分两步思考这个问题:首先,我们需要告诉 UIActivityViewController 我们想要分享哪些内容。其次,我们需要 return 基于每个社交媒体的内容,link、图像或文本。由社交媒体应用决定它可以处理哪些内容,并且只有在我们分享正确类型的内容时它才会显示。
第一步,我们将尝试欺骗社交媒体应用程序,说我们要共享一个 UIImage 和一个 NSObject。这将打开大部分社交媒体应用程序以进行共享。
在第二步中,我们将确定用户点击了哪个社交媒体应用程序,以及return为其分配的内容。
实施:
创建两个 UIActivityItemSource,一个 return UIImage,另一个 return 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)