ios - Swift - 如何像在 App Store 中一样共享应用链接
问题描述
我正在尝试使用共享我的应用程序,UIActivityViewController
但无法重现与从 App Store 共享应用程序时相同的效果,这意味着:
当我点击 App Store 中的分享按钮时,我看到了如下内容:
但是当我尝试分享我的应用程序时,我有这个:
我使用的代码是:
if let logo = UIImage(named: "myLogo"), let websiteURL = URL(string: "https://itunes.apple.com/app/idxxxxxxxxxx") {
let objectsToShare = ["My App Name", websiteURL, logo] as [Any]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: [])
if let popoverController = activityVC.popoverPresentationController {
popoverController.sourceView = self.view
popoverController.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
}
present(activityVC, animated: true)
}
该if let popoverController = ...
循环用于防止在使用 iPad 时发生崩溃。
我必须更改哪些内容才能发挥 App Store 的效果?(有一个带有标题和副标题的图像)
此外,一旦我与Messages
例如共享应用程序,这就是区别:
我怎样才能有同样的效果?(带有标题和副标题的单个图像,作为奖励,视频)。我不确定这是否是 iOS 13 的问题,因为所有类似的问题都没有相同的应用共享弹出框。
解决方案
您必须使用新LinkPresentation
框架。
这基本上涉及 UIActivityItemSource 一致性,然后检索将包含活动视图和您正在共享的数据的元数据。数据可以在本地检索或下载。
ExampleController: UIViewController {
var metadata: LPLinkMetadata?
func share() {
let activityView = UIActivityViewController(activityItems: [self], applicationActivities: nil)
present(activityView, animated: true)
}
...
}
extension ExampleController: UIActivityItemSource {
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return metadata
}
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
return metadata
}
func activityViewControllerLinkMetadata(_: UIActivityViewController) -> LPLinkMetadata? {
metadata = LPLinkMetadata()
metadata.title = "Title"
metadata.originalURL = URL(string: "Description")
metadata.url = metadata.originalURL
// Using a locally stored item
metadata.iconProvider = NSItemProvider(object: UIImage(named: "image")!)
metadata.imageProvider = NSItemProvider.init(contentsOf:
Bundle.main.url(forResource: "image", withExtension: "JPG"))
return metadata
}
}
WWDC 演示文稿: https ://developer.apple.com/videos/play/wwdc2019/262/
推荐阅读
- workflow - 没有动物园管理员可以使用 dolphinscheduler 吗?
- google-sheets - 在 Google 表格中,如何将多个列标题和数据转换为包含多个行标签和数据的单列
- php - 如何在 PHP 代码中添加“滚动效果”?
- laravel - Laravel Dusk - 我如何断言浏览器的登录身份?
- python - 如何用硒选择某些按钮
- python - 如何在 kivy 中为动态创建的标签启用滚动视图?
- python - 如何识别 LSTM 中的重要特征
- javascript - 倒计时后重定向到另一个页面
- reactjs - 将 JSX 和功能块与父括号或父标记分开
- google-cloud-storage - Google 存储客户端:System.Net.Sockets.SocketException:现有连接被远程主机强行关闭