Firebase Dynamic-Links不适用于iOS中同一项目中的不同目标

时间:2017-01-11 04:45:09

标签: android ios firebase deep-linking firebase-dynamic-links

对于Android和iOS,Firebase动态链接的行为是否不同?如何针对iOS中的其他目标为同一项目实施Firebase动态链接?

在Android中,Firebase动态链接可以针对不同的风格正常运行,但在iOS中,Firebase动态链接不适用于不同的目标。

对于iOS,对于具有不同目标的同一项目,我需要为Firebase动态链接实施哪些内容?

Android和iOS的Firebase动态链接行为差异的实际原因是什么?要为不同的目标实施Firebase动态链接,我是否必须为同一个应用程序创建单独的项目?

4 个答案:

答案 0 :(得分:3)

TLDR

Firebase动态链接不支持对同一Firebase项目中包含的多个iOS应用程序/目标使用相同的URL前缀。但是,有多种解决方法:


解决方案1:使用多个(子)域

如果每个iOS应用程序都使用其自己的(子)域进行动态链接,则此方法有效。例如,不是将pets.page.link用于所有目标,而是将cats.page.link用于第一个应用程序目标并将dogs.page.link用于第二个应用程序目标。对此的关键要求是,目标的每个Associated Domains Entitlement仅包含应监听的(子)域。

我个人使用的是这种解决方案,并且效果很好。

解决方案2:使用自定义域

如果您坚持对所有目标使用相同的域,则应该能够通过使用自定义域以及一些额外的工作来解决此问题。

遵循the official documentation来设置自定义域,例如my-own-fancy-pet-app.com,而不要使用Firebase本地提供的任何URL前缀(例如pets.page.link)。

在创建firebase.json文件时,请勿使用建议的"appAssociation": "AUTO",选项,而应将其设置为NONE。这将阻止Firebase自动创建有问题的apple-app-site-association文件(以及assetlinks.json)。改用Firebase Hosting来提供手动创建的版本。然后,您可以使用apple-app-site-association对其进行配置,即仅将特定路径重定向到每个目标,而不是将所有路径都匹配到所有目标。

免责声明:我尚未测试这种方法,因为在我的案例中,这样做并不值得进行额外的工作。

解决方案3:使用多个Firebase项目

当然,您可以简单地为每个目标创建一个新的Firebase项目。您不能在多个项目中使用相同的(子)域,因此不得不隐式实现解决方案1。


背景

为什么它可以在Android上运行,但不能在iOS上运行?

在Android上,必需的assetlinks.json文件将完整的域映射,包括指向Android应用程序(或口味)列表的所有路径。特定应用是否支持特定链接,是由 you 通过在Android Manifest文件中本地路由所需路径来确定的。

在iOS上,是另一回事:所需的apple-app-site-association文件确定哪些路径与哪些应用程序匹配。不幸的是,使用Firebase动态链接时,您不负责此文件,并且Firebase仅将URL的所有路径与Firebase项目中包含的所有应用程序进行匹配。在本地,您只能配置iOS应用的Associated Domains Entitlement。但是,后者确实只能处理包括所有路径在内的完整域。

Firebase动态链接限制

不幸的是,此限制在官方文档中没有任何地方提及。然而,已经证实例如。 herehere。如第一个链接中所述,他们曾经计划添加此功能,但看起来好像还没有。我将与支持人员联系以请求更新,并要求他们至少在文档中添加适当的提示。


PS:我知道这是一个很老的问题,在发问时情况可能有所不同。但是今天仍然是一个问题。

答案 1 :(得分:1)

@VishalPatoliyaツ我向Firebase开发人员询问了此问题,他们说此功能不在他们的待办事项中),并提议提出请求以支持为什么需要这种可能性。也许有时会实现...

...尽管通用链接具有多个应用程序支持。在这里您可以了解其工作原理:Supporting same domain on two different apps supporting universal links..?

答案 2 :(得分:0)

对于深层链接,您将使用应用程序的包标识符。您的其他目标将具有不同的标识符。 在Info.plist中使用UIApplicationShortcutItems,并在相应的plist文件中添加深层链接衬衫剪切的条目。

答案 3 :(得分:0)

如果您希望他们获得不同的应用域,您需要在Firebase中为每个目标创建一个不同的项目。如果不这样做,则无法通过iOS的通用链接系统区分它们。

这意味着您无法创建包含多个应用程序的单个项目。