iOS:如何显示“打开方式”应用切换器(操作系统选择器表)。没有文件,只有一个链接。
Posted
技术标签:
【中文标题】iOS:如何显示“打开方式”应用切换器(操作系统选择器表)。没有文件,只有一个链接。【英文标题】:iOS: How can I show an "Open With" app switcher (OS selector sheet). No file, just a link. 【发布时间】:2018-08-28 16:14:44 【问题描述】:在 ios 中,您可以修改您的 plist 以将文件类型与您的应用程序相关联,因此如果用户选择该文件,则会弹出一个“打开方式...”菜单。 How can I get my app in "Open with"(通过使用 CFBundleDocumentTypes)
但是,对于不代表任何文件的深层链接,我该如何做呢?换句话说,我只想通过电子邮件发送一个在 App Switcher 中解析的深层链接,让用户在 3 个不同的应用程序之间进行选择。
我没有托管或发送任何文件。我只需要传递数据参数,就像常规的深层链接一样,但它可以在 3 个不同的应用程序中打开,而不仅仅是 1 个。
【问题讨论】:
【参考方案1】:如果它是已知的文件类型(即不是您编造的文件类型/扩展名),那么您可以将其添加到 Info.plist。步骤如下:
1) 在 XCode 中单击您的项目并选择“信息”选项卡
2) 在底部,您应该看到“文档类型”;您需要添加您的文档类型。对于名字,你可以写任何东西。类型请参考:https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1
3) 最后一步是展开“Additional document type properties”并添加一个键值对。键应该是字符串类型的“LSHandlerRank”。该值应为“备用”。
如果您有自定义类型,您将执行相同的步骤,但有一些例外:
1) 添加您想要的任何名称的文档类型。
2) 添加符合你项目的类型;例如,如果您为示例公司工作,文件类型为 abc,我会将“com.example.abc”添加到类型中。
3) 接下来,您需要向“导入的 UTI”区域添加一个值。对于描述,使用任何你想要的。
4) 对于标识符,使用您在第 2 步中输入的相同值(即“com.example.abc”)
5) 对于“符合”,请在此处参考 Apple 的文档: https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html#//apple_ref/doc/uid/TP40001319-CH202-BCGJGJGA
6) 在“其他 UTI 属性”下,您将添加一个标有“UTTypeTagSpecification”的字典
7) 在字典下,添加一个标有“public.filename-extension”的数组
8) 在数组下,添加两项。第一个应该是您的扩展程序的大写版本(“ABC”),第二个应该是您的扩展程序的小写版本(“abc”)。
这应该允许应用在 iOS 显示的“打开方式”菜单中弹出。不过,为了处理填充,您需要将以下函数添加到您的 AppDelegate:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
应该这样做!
【讨论】:
我会尽快尝试这些步骤。您认为以下 URL 格式是否可行:localhost/appHook.myCustomExtension?myParamId=paramValues?所以只要我注册 .myCustomExtension 。或(.mce 等),如上所述,那么 HTTP URL 会在我的应用程序中解析吗?我想知道 Safari 是否会优先考虑 HTTP 方案,或者我的自定义文件扩展名会优先考虑?它基本上不是深度链接,因为该方案可以是少数几个应用程序之一,所以我正在考虑使用 HTTP 作为方案(因为我不知道提前安装哪些应用程序)。 而且我还认为 appHook.myCustomExtension (文件)不必实际存在。展示应用程序切换器并将参数传递给许多应用程序之一只是一个技巧。 (模仿“一对多”深层链接)。 我上面描述的内容将允许您使用 .myCustomExtension 打开文件。您在评论中描述的内容看起来像一个网址。该网址会产生什么?如果是其他网页,则无法使用上述步骤打开。如果它生成 .myCustomExtension 类型的文件,那么它应该可以工作。关于 Safari,如果它可以处理扩展,那么我认为它会原生显示它。话虽如此,应该显示一个“打开方式”选项,仍然允许您做您想做的事情。 我的主要挑战是我不知道 URL SCHEME 会提前是什么。所以我不能去:MyApp://Route.因为我不知道“MyApp”会提前是什么。 (我们的平台必须适用于任何处理它的深层链接的应用程序)。所以它基本上是一个动态的深度链接。而且我希望使用文件扩展名作为调用“打开方式”表的一种方式,但没有任何实际文件,并且仍然允许根据需要传递参数,就像深层链接一样。 @FranticRock,URL 本身并不重要。当您导航到有问题的 URL(或任何可能的 URL)时,浏览器中会显示什么?如果可以选择下载具有关联文件扩展名的文件,则无论 URL 方案如何,这都应该有效。以上是关于iOS:如何显示“打开方式”应用切换器(操作系统选择器表)。没有文件,只有一个链接。的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 iOS 应用没有显示在其他应用的“打开方式”对话框中?