iOS 在地图上添加共享扩展
iOS add share extension on maps
我想在苹果地图上添加共享扩展,有谁知道怎么做。我尝试如下设置 NSExtensionAttributes 但它不起作用,我的应用程序没有显示在地图的共享中 sheet。
NSExtensionAttributes
NSExtensionActivationRule
NSExetnsionActivationSupportsWebURLWithMaxCount
NSExetnsionActivationSupportsWebPageWithMaxCount
我不确定为什么 NSExtensionActivationSupportsText
不适用于地图,但我尝试时得到了相同的结果。
您需要的是更复杂的激活规则。将激活规则的类型设置为 "string",并使用 App Extension Programming Guide 中描述的 SUBQUERY
格式设置值。当您这样做时,您可以请求一个或多个特定的 UTI。地图将提供纯文本 (public.plain-text
), 应该 等同于 NSExtensionActivationSupportsText
但显然不是。它还提供了位置卡(public.card
)和URL(public.url
)。
通过 UTI 检查任何这些的激活规则看起来像
SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text").@count >= 1).@count >= 1 OR SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, SUBQUERY($attachment.registeredTypeIdentifiers, $uti, $uti UTI-CONFORMS-TO "public.url" AND NOT $uti UTI-CONFORMS-TO "public.file-url").@count >= 1).@count >= 1).@count >= 1 OR SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.vcard").@count >= 1).@count >= 1
这只是检查每个 UTI 的三个 SUBQUERY
子句,OR-ed 在一起。
根据您可以处理的数据,您可能希望减少它以仅涵盖您的扩展知道如何处理的 UTI。例如,如果您只需要 URL,则只使用该部分:
SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, SUBQUERY($attachment.registeredTypeIdentifiers, $uti, $uti UTI-CONFORMS-TO "public.url" AND NOT $uti UTI-CONFORMS-TO "public.file-url").@count >= 1).@count >= 1).@count >= 1
此版本仅检查您获得的 URL 不是文件 URL.
Maps 提供了一个 Apple 地图 URL,类似于 http://maps.apple.com/?q=37.332331,-122.031219&sll=37.332331,-122.031219
如果您使用 vcard UTI,您会得到一个 NSString
编码成一个 NSData
。如果你解码它,它看起来像这样:
BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//iOS 8.2//EN
N:;Shared Location;;;
FN:Shared Location
item1.ADR;type=HOME;type=pref:;;;;;;
item2.URL;type=pref:http://maps.apple.com/?q=37.332331\,-122.031219&sll=37.332331\,-122.031219
item2.X-ABLabel:map url
END:VCARD
我想在苹果地图上添加共享扩展,有谁知道怎么做。我尝试如下设置 NSExtensionAttributes 但它不起作用,我的应用程序没有显示在地图的共享中 sheet。
NSExtensionAttributes
NSExtensionActivationRule
NSExetnsionActivationSupportsWebURLWithMaxCount
NSExetnsionActivationSupportsWebPageWithMaxCount
我不确定为什么 NSExtensionActivationSupportsText
不适用于地图,但我尝试时得到了相同的结果。
您需要的是更复杂的激活规则。将激活规则的类型设置为 "string",并使用 App Extension Programming Guide 中描述的 SUBQUERY
格式设置值。当您这样做时,您可以请求一个或多个特定的 UTI。地图将提供纯文本 (public.plain-text
), 应该 等同于 NSExtensionActivationSupportsText
但显然不是。它还提供了位置卡(public.card
)和URL(public.url
)。
通过 UTI 检查任何这些的激活规则看起来像
SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text").@count >= 1).@count >= 1 OR SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, SUBQUERY($attachment.registeredTypeIdentifiers, $uti, $uti UTI-CONFORMS-TO "public.url" AND NOT $uti UTI-CONFORMS-TO "public.file-url").@count >= 1).@count >= 1).@count >= 1 OR SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.vcard").@count >= 1).@count >= 1
这只是检查每个 UTI 的三个 SUBQUERY
子句,OR-ed 在一起。
根据您可以处理的数据,您可能希望减少它以仅涵盖您的扩展知道如何处理的 UTI。例如,如果您只需要 URL,则只使用该部分:
SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, SUBQUERY($attachment.registeredTypeIdentifiers, $uti, $uti UTI-CONFORMS-TO "public.url" AND NOT $uti UTI-CONFORMS-TO "public.file-url").@count >= 1).@count >= 1).@count >= 1
此版本仅检查您获得的 URL 不是文件 URL.
Maps 提供了一个 Apple 地图 URL,类似于 http://maps.apple.com/?q=37.332331,-122.031219&sll=37.332331,-122.031219
如果您使用 vcard UTI,您会得到一个 NSString
编码成一个 NSData
。如果你解码它,它看起来像这样:
BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//iOS 8.2//EN
N:;Shared Location;;;
FN:Shared Location
item1.ADR;type=HOME;type=pref:;;;;;;
item2.URL;type=pref:http://maps.apple.com/?q=37.332331\,-122.031219&sll=37.332331\,-122.031219
item2.X-ABLabel:map url
END:VCARD