【问题标题】:Firebase Dynamic-Links is not working for different target in same project in iOSFirebase 动态链接不适用于 iOS 中同一项目中的不同目标
【发布时间】:2017-05-25 18:30:30
【问题描述】:

Android 和 iOS 的 Firebase 动态链接行为是否不同?如何为 iOS 中的不同目标实现同一项目的 Firebase 动态链接?

在 Android 中,Firebase 动态链接适用于不同的风格,但在 iOS 中,Firebase 动态链接不适用于不同的目标。

对于 iOS,对于具有不同目标的同一项目,我必须为 Firebase Dynamic-Links with Firebase 实施什么?

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 每次打开主项目时,我点击从 firebase 生成的链接,而不是打开不同的目标,我给 ibi 以生成深度链接 @Shatath
    • 我在 plist 中没有看到任何这样的键。你的意思是我们应该手动添加它吗?另外,由于我对两个目标都使用相同的 firebase 项目,所以在这种情况下,深度链接快捷方式将是相同的。这是什么意思? @Sharath
    【解决方案2】:

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

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

    【讨论】:

    • 但是在android中它可以顺利运行而无需创建新项目所以,ios的实际原因是什么?
    【解决方案3】:

    @VishalPatoliyaツ 我向 Firebase 开发人员询问了这件事,他们说这个功能不在他们的待办事项列表中)并提议提出请求以论证为什么需要这种可能性。也许它有时会被实施......

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

    【讨论】:

      【解决方案4】:

      TLDR

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


      解决方案 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 托管来提供手动创建的版本。然后,您可以使用apple-app-site-association 对其进行配置以满足您的需求,即仅将特定路径重定向到每个目标,而不是将所有路径匹配到所有目标。

      免责声明:我还没有测试过这种方法,因为在我的情况下它不值得额外的工作。

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

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


      背景

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

      在 Android 上,所需的 assetlinks.json 文件映射完整的域,包括 Android 应用(或风格)列表的所有路径。特定应用是否支持特定链接,由通过在您的 Android 清单文件中本地路由所需路径来确定。

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

      Firebase 动态链接限制

      很遗憾,官方文档中的任何地方都没有提到此限制。但是,它已被证实,例如herehere。如第一个链接中所述,他们曾经计划添加此功能,但看起来他们仍然没有。我会联系支持人员要求更新,并要求他们至少在文档中添加适当的提示。


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

      【讨论】:

      • 在同一个项目中使用新的子域(又名:URL 前缀)对我不起作用,因为每个子域的 apple-app-site-association json 都是相同的。你是如何让它发挥作用的?
      • 您指的是“解决方案1:使用多个(子)域”中描述的方法,对吗?在这种情况下,所有apple-app-site-association 都是相同的应该没问题。如上所述,如果您使用不同的Associated Domains Entitlement 配置就足够了。也就是说,理论上所有目标都可以使用apple-app-site-association 中列出的任何子域,但它们只会监听您添加到本地Associated Domains Entitlement 配置中的子域(后者当然必须是前者的子集)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多