iOS 共享扩展无法 displaying/not 能够接收 URL
iOS Share Extension not displaying/not able to receive URL
我的应用程序 iOS 分享扩展有问题。我在共享扩展 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 字典中。
<key>NSExtensionActivationSupportsText</key>
<true/>
如果我添加,则共享扩展会出现在上面列出的应用程序中,但只是 returns 我的扩展的一个字符串。例如,如果我转到 Google Chrome 中的 apple.com
并使用我的共享扩展,它只是提供 Apple
作为我的扩展的字符串,而我的应用并不真正支持它。它应该提供某种类型的 URL 或类似的内容。在 NYTimes 应用程序中,它只会将文章的标题发送到扩展程序。
该扩展在 Safari 中完美运行。只是不确定第 3 方应用程序。
下面是我扩展的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
以及其他一些东西来测试它,它只是返回超级无用的字符串.
我知道可以从这些应用程序中获取 URL,因为即使在纽约时报中,它也有 Google Chrome 的选项,这绝对需要 URL而不仅仅是文章标题。关于如何获得 URL 的任何想法?
我建议你使用这个:
<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 循环并检查所有这些。
我的应用程序 iOS 分享扩展有问题。我在共享扩展 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 字典中。
<key>NSExtensionActivationSupportsText</key>
<true/>
如果我添加,则共享扩展会出现在上面列出的应用程序中,但只是 returns 我的扩展的一个字符串。例如,如果我转到 Google Chrome 中的 apple.com
并使用我的共享扩展,它只是提供 Apple
作为我的扩展的字符串,而我的应用并不真正支持它。它应该提供某种类型的 URL 或类似的内容。在 NYTimes 应用程序中,它只会将文章的标题发送到扩展程序。
该扩展在 Safari 中完美运行。只是不确定第 3 方应用程序。
下面是我扩展的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
以及其他一些东西来测试它,它只是返回超级无用的字符串.
我知道可以从这些应用程序中获取 URL,因为即使在纽约时报中,它也有 Google Chrome 的选项,这绝对需要 URL而不仅仅是文章标题。关于如何获得 URL 的任何想法?
我建议你使用这个:
<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 循环并检查所有这些。