Swift - Как поделиться ссылкой на приложение, как в App Store - PullRequest
3 голосов
/ 03 апреля 2020

Я пытаюсь поделиться своим приложением, используя UIActivityViewController, но не могу воспроизвести тот же эффект, что и при совместном использовании приложения из App Store, что означает:

Когда я нажимал кнопку общего доступа в В App Store у меня есть что-то похожее на это:

enter image description here

Но когда я пытаюсь поделиться своим приложением, у меня есть это:

enter image description here

Я использовал следующий код:

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 = ... l oop предназначен для предотвращения взлома sh при использовании iPad .

Что мне нужно изменить, чтобы получить эффект App Store? (иметь изображение с заголовком и подзаголовком)

Более того, как только я поделюсь приложением, например, с Messages, это будет разница:

enter image description here enter image description here

Как я могу получить такой же эффект? (Одно изображение с заголовком и подзаголовком, в качестве бонуса, видео). Я не уверен, что это проблема iOS 13, поскольку у всех похожих вопросов нет одинакового всплывающего окна с общим доступом к приложению.

1 Ответ

0 голосов
/ 06 апреля 2020

Вы должны использовать новую 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
    }
}

Документы: https://developer.apple.com/documentation/uikit/uiactivityitemsource/3144571-activityviewcontrollerlinkmetada

WWD C Представление: https://developer.apple.com/videos/play/wwdc2019/262/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...