Avi*_*are 5 ios uiactivityviewcontroller swift
我的应用程序还没有上线。我从App Store Connect. 我想在社交媒体应用上分享应用链接。我使用了UIActivityViewController:
let string1 = "itms-apps://itunes.apple.com/app/idXXXXXXX"
let url = NSURL(string: string1)
let shareItems = [UIApplication.sharedApplication().openURL(url!)]
let activityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
self.presentViewController(activityViewController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
问题:它没有显示一些社交媒体应用程序,如 WhatsApp。
Joc*_*zer 15
Swift 4 或更高版本的解决方案:
此解决方案也适用于 iPad(上述解决方案在 iPad 上崩溃):
if let urlStr = NSURL(string: "https://itunes.apple.com/us/app/myapp/idxxxxxxxx?ls=1&mt=8") {
let objectsToShare = [urlStr]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
if UIDevice.current.userInterfaceIdiom == .pad {
if let popup = activityVC.popoverPresentationController {
popup.sourceView = self.view
popup.sourceRect = CGRect(x: self.view.frame.size.width / 2, y: self.view.frame.size.height / 4, width: 0, height: 0)
}
}
self.present(activityVC, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
Anb*_*hik 12
这用于打开网站,而不是共享应用程序:
[UIApplication.sharedApplication().openURL(url!)]
Run Code Online (Sandbox Code Playgroud)
改为这样做:
if let name = URL(string: "https://itunes.apple.com/us/app/myapp/idxxxxxxxx?ls=1&mt=8"), !name.absoluteString.isEmpty {
let objectsToShare = [name]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
self.present(activityVC, animated: true, completion: nil)
} else {
// show alert for not available
}
Run Code Online (Sandbox Code Playgroud)
样品见这个
这里的解决方案都很好,但值得考虑实施UIActivityItemSource协议和LinkPresentation框架。
我的解决方案实现了以下目标:
UIActivityViewControllerActivityTypeLPMetaDataProvider视频中所述),因此加载速度更快UIActivityViewController:将项目设置为self:
let activityVC = UIActivityViewController(activityItems: [self], applicationActivities: nil)
Run Code Online (Sandbox Code Playgroud)
排除某些ActivityType不适用的:
activityVC.excludedActivityTypes = [.addToReadingList, .assignToContact, .markupAsPDF, .openInIBooks, .saveToCameraRoll]
Run Code Online (Sandbox Code Playgroud)
对于 iPad,设置popoverPresentationController.sourceView或.barButtonItem(这在 iPhone 上被忽略):
activityVC.popoverPresentationController?.sourceView = myButton
Run Code Online (Sandbox Code Playgroud)
呈现它:
present(activityVC, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
UIActivityItemSource方法https://developer.apple.com/documentation/uikit/uiactivityitemsource
您必须实现占位符方法,根据文档:
占位符对象不必包含任何实际数据,但应尽可能接近您要提供的实际数据对象进行配置。
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return ""
}
Run Code Online (Sandbox Code Playgroud)
以及实际数据,返回 AirDrop 应用程序的链接和其他所有内容的文本:
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
if activityType == .airDrop {
return URL(string: "APP_STORE_URL")!
}
return "Check out the APP_NAME on the App Store: APP_STORE_URL or on the Google Play Store: PLAY_STORE_URL"
}
Run Code Online (Sandbox Code Playgroud)
来自文档:
对于支持主题字段的活动,返回项目的主题。
func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
return "EMAIL_SUBJECT" // e.g. App name
}
Run Code Online (Sandbox Code Playgroud)
LPLinkMetaData方法来自文档:
返回要在共享表的预览标题中显示的元数据。
@available(iOS 13.0, *)
func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {
let metadata = LPLinkMetadata()
metadata.title = "APP_NAME"
return metadata
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17459 次 |
| 最近记录: |