通过长按链接打开的共享菜单中的 Safari 浏览器中未显示应用程序图标

Posted

技术标签:

【中文标题】通过长按链接打开的共享菜单中的 Safari 浏览器中未显示应用程序图标【英文标题】:App icon not shown in Safari in the share menu opened by a long press on a link 【发布时间】:2016-12-02 12:00:35 【问题描述】:

我的应用有一个扩展程序。此扩展在 Safari 中可用。当我使用 Safari 分享按钮时

然后它会打开一个共享面板,我的应用程序图标就在那里。但是,如果我在 Safari 中按住一个链接几秒钟,然后弹出以下警报 并点击 Share... 按钮,然后它会打开一个类似的共享面板,我看到有 Facebook 和 Twitter 图标,但我的应用程序图标不见了。有人知道如何让它出现在那个共享面板中吗?

这是当我点击“分享...”按钮时打开的内容:

【问题讨论】:

您是否在扩展程序中添加了应用图标? 我不确定你到底是什么意思,但是如果你问我是否在 Safari 中启用了应用程序扩展,那么是的。正如我所说,当我使用分享按钮时,一切正常 我的意思是,你会在你的 Xcode 项目中添加应用程序图标,对吧?您需要在 Xcode 项目中为 Share 扩展程序设置应用程序图标。 好吧,我不确定一切是否正确,但是,对于通常的共享按钮,一切都按预期工作。应用程序图标显示正确,我可以通过点击它来打开扩展程序。所以我假设图标已经设置好了。但我认为这无论如何都不是图标本身的问题。如果没有图标,它会显示一个默认的 ios 图标,不是吗? 能否添加点击分享后的截图...? 【参考方案1】:

我找到了解决方案。在我的扩展的 plist 中有一个名为 NSExtensionActivationRule 的键。它属于NSExtensionAttributes 字典,而后者又属于NSExtension 字典。所以NSExtensionActivationRule 的值对我来说如下所示:

<string>SUBQUERY (
            extensionItems,
            $extensionItem,
            SUBQUERY (
            $extensionItem.attachments,
            $attachment,
            ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" ||
            ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text"
            ).@count &gt;= 1
            ).@count &gt;= 1</string>

据我所知,这是$attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text" 行,它可以发挥所有作用。

完整的NSExtension 字典如下所示:

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationDictionaryVersion</key>
        <integer>2</integer>
        <key>NSExtensionActivationRule</key>
        <string>SUBQUERY (
            extensionItems,
            $extensionItem,
            SUBQUERY (
            $extensionItem.attachments,
            $attachment,
            ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" ||
            ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text"
            ).@count &gt;= 1
            ).@count &gt;= 1</string>
        <key>NSExtensionActivationUsesStrictMatching</key>
        <integer>2</integer>
    </dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
</dict>

【讨论】:

谢谢。您能以 XML 格式发布 info.plist 的 NSExtension 部分吗?我的看起来像这样:` NSExtensionNSExtensionAttributesNSExtensionActivationRuleNSExtensionActivationSupportsWebURLWithMaxCount 1NSExtensionMainStoryboardMainInterfaceNSExtensionPointIdentifiercom.apple.share-services ` 非常有趣,谢谢!我会试试的。我认为public.url 可以长按 URL 链接。 它将链接作为字符串传递给扩展。我不得不把它变成里面的url 啊,有道理。虽然当您想要共享链接时寻找纯文本远非显而易见......

以上是关于通过长按链接打开的共享菜单中的 Safari 浏览器中未显示应用程序图标的主要内容,如果未能解决你的问题,请参考以下文章

解决ios长按图片出现阴影问题

H5移动端禁止长按弹出系统菜单"选择复制","在浏览器打开"

ios怎么把webm保存到相册

让iPhone自带的Safari浏览器拥有强大的功能

求代码,Android系统长按如何禁止出现复制链接、打开链接菜单

长按 url 并选择“在 safari 中打开”时 DynamicLink 不起作用