Android和iOS的Firebase动态链接的行为是不是不同?如何在iOS中为不同的目标实现同一项目的Firebase动态链接?
在安卓系统中,火库动态链接可以在不同的版本中正常工作,但在iOS中,火库动态链接不能用于不同的目标。
对于iOS,对于不同目标的同一项目,我必须为Firebase动态链接实现什么?
Android和iOS的Firebase动态链接行为不同的实际原因是什么?要为不同的目标实现Firebase动态链接,我是否必须为同一应用程序创建一个单独的项目?
发布于 2020-04-14 21:20:17
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原生提供的任何网址前缀(如pets.page.link)。
创建firebase.json文件时,请不要使用建议的"appAssociation": "AUTO",选项,而应将其设置为NONE。这将防止Firebase自动创建有问题的apple-app-site-association文件(以及assetlinks.json)。使用Firebase托管来提供手动创建的版本。然后,您可以使用apple-app-site-association根据需要对其进行配置,即只将特定路径重定向到每个目标,而不是将所有路径都匹配到所有目标。
免责声明:我还没有测试过这种方法,因为在我的情况下,它不值得额外的工作。
解决方案3:使用多个Firebase项目
当然,您可以简单地为每个目标创建一个新的Firebase项目。您不能在多个项目中使用相同的(子)域,因此您被迫隐式地实现解决方案1。
背景
为什么它可以在安卓系统上运行,而不能在iOS上运行?
在Android上,所需的assetlinks.json文件映射完整的域名,包括指向Android应用程序(或风格)列表的所有路径。特定应用程序是否支持特定链接,由您通过在Android Manifest文件中本地路由所需路径来确定。
在iOS上,情况正好相反:所需的apple-app-site-association文件确定哪些路径与哪些应用程序相匹配。不幸的是,在使用Firebase动态链接时,您并不负责此文件,而Firebase只是将URL的所有路径与Firebase项目中包含的所有应用程序相匹配。在本地,您只能配置iOS应用程序的Associated Domains Entitlement。但是,后者只处理包括所有路径在内的完整域。
Firebase动态链接限制
不幸的是,官方文档中的任何地方都没有提到这个限制。然而,它已经被确认,例如here或here。正如第一个链接中所述,他们曾经计划添加此功能,但看起来仍然没有。我将联系支持人员以请求更新,并要求他们至少在文档中添加适当的提示。
PS:我知道这是一个相当古老的问题,在提问的时候,事情可能会有一点不同。然而,这在今天仍然是一个问题。
发布于 2018-09-12 17:03:43
@VishalPatoliyaツ我向Firebase开发人员询问了这个问题,他们说这个功能不在他们的待办事项列表中),并建议向支持人员提出请求,并论证为什么需要这种可能性。也许它会在某些时候被实现。
...though通用链接有多个应用程序支持。在这里你可以了解它是如何工作的:Supporting same domain on two different apps supporting universal links..?
发布于 2017-01-11 13:07:59
对于深度链接,您将使用应用程序的捆绑包标识符。你的其他目标会有不同的标识符。在Info.plist中使用UIApplicationShortcutItems,并在相应的plist文件中为您的深层链接衬衫裁剪添加条目。
https://stackoverflow.com/questions/41582867
复制相似问题