iOS Share Extension未显示/无法接收URL

时间:2017-05-02 22:26:06

标签: ios swift ios-extensions

我的应用程序的iOS Share Extension出现问题。我在共享扩展程序Info.plist中有以下代码。

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>1</integer>
        </dict>
    </dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
</dict>

主要问题是Google Chrome,NYTimes,WSJ和许多其他应用中都没有显示扩展程序。所有这些都应该提供网页或Web URL。

我在某处读到了我必须将以下内容添加到NSExtensionActivationRule dict中。

<key>NSExtensionActivationSupportsText</key>
<true/>

如果我添加,则共享扩展名会出现在上面列出的应用中,但只会将字符串返回到我的扩展程序。例如,如果我在Google Chrome浏览器中转到apple.com并使用我的共享扩展程序,它只会将Apple作为字符串提供给我的应用程序并不支持我的扩展程序。它应该提供某种类型的URL或类似的东西。在NYTimes应用程序中,它只会将文章的标题发送到扩展名。

扩展程序在Safari中完美运行。只是不确定第三方应用程序。

以下是在我的扩展程序的swift文件中接收URL的主要代码。

if let item = extensionContext?.inputItems.first as? NSExtensionItem {
    if let itemProvider = item.attachments?.first as? NSItemProvider {
        if itemProvider.hasItemConformingToTypeIdentifier("public.url") {
            itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { (url, error) -> Void in
                if let shareURL = url as? NSURL {
                    print (shareURL.absoluteString!)

从那里我处理URL作为我的应用程序应该。

当我添加NSExtensionActivationSupportsText选项时,我将上面的代码从public.url略微更改为public.text以及其他一些内容来测试它,它只是返回超级无用的字符串。< / p>

我知道这可以从这些应用程序中获取URL,因为即使在NYTimes中它也有谷歌浏览器的选项,它可能需要一个URL,而不仅仅是文章标题。关于如何获取该URL的任何想法?

1 个答案:

答案 0 :(得分:8)

我建议你使用它:

    <key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <string>
  SUBQUERY (
      extensionItems,
      $extensionItem,
      SUBQUERY (
          $extensionItem.attachments,
          $attachment,
          ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
      ).@count == 1
  ).@count == 1
        </string>
    </dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
</dict>

考虑到你的代码来获取附件,你只是检查第一个inputItems和第一个附件,你需要在两种情况下都有foreach循环并检查所有这些。

相关问题