当动态链接具有自定义子域时,Firebase 动态链接在 iOS 上不起作用

Posted

技术标签:

【中文标题】当动态链接具有自定义子域时,Firebase 动态链接在 iOS 上不起作用【英文标题】:Firebase dynamic links are not working on iOS when the dynamic link has the custom subdomain 【发布时间】:2018-06-20 15:36:12 【问题描述】:

我已按照source1、source2 中提到的指南在我的应用中集成了 Firebase 动态链接。默认域的应用程序上的一切都按预期工作。

但是当我在 firebase 控制台上创建 custom subdomain 并在 ios 设备上使用它时,它无法按预期工作(即使安装了应用程序)。我在 Xcode 项目的 Capabilities=>Associated Domains 上添加了新的子域,例如 applinks:example.page.link

下面是直截了当的场景:

1) 应用已安装在设备上。

2) 点击电子邮件上的动态链接(带有自定义子域)https://example.page.link/abcXYZ。

3) 它直接打开了应用程序,我下面代码上的linkHandled 始终是falsecompletionhandleUniversalLink 函数永远不会被调用。

func application(_ application: UIApplication,
                   continue userActivity: NSUserActivity,
                   restorationHandler: @escaping ([Any]?) -> Void) -> Bool 

    if let incomingURL = userActivity.webpageURL 
      let linkHandled = FIRDynamicLinks.dynamicLinks()?.handleUniversalLink(incomingURL, completion:  (dynamiclink, error) in
        if let dynamiclink = dynamiclink, let _ =  dynamiclink.url 
          self.handleIncomingDynamicLink(dynamiclink: dynamiclink)
        
      )

      return linkHandled
    

    return false
  

但是对于像https://my328.app.goo.gl/abcXYZ 这样由firebase 创建的默认域工作正常,linkHandled 总是正确的,来自handleUniversalLinkcompletion 被调用并且我收到了预期的Deep link(配置在firebase 控制台)在completion

对于为什么 Firebase 动态链接无法在自定义子域的应用上运行有任何想法吗?除了link 中提到的自定义子域之外,我是否需要配置任何其他内容?

【问题讨论】:

您安装了哪个版本的 FDL 库?我想知道旧客户端库是否无法处理自定义子域。 @ToddKerpelman 我正在使用 FirebaseDynamicLinks 1.4.0,我的项目的 swift 版本是 3.2。当我从 Pod 文件中删除并重新安装 FirebaseDynamicLinks 时,它仍然只给我 1.4.0,所以我相信我正在使用最新的 FDL 库。仅供参考,我正在使用 Firebase (3.17.0)、FirebaseAnalytics (3.9.0)、FirebaseCore (3.6.0)、FirebaseInstanceID (1.0.10)、FirebaseMessaging (1.2.3)。 @ToddKerpelman 你有什么线索吗? 是的,那已经很老了。 FDL 库的最新版本是 3.0.1,您可以从 Firebase 5.3.0 获得。您可能想要进行完整的 pod 更新,但请记住,这将包括许多重大更改,因此请确保备份您的 podfile.lock 以备不时之需。 @ToddKerpelman 谢谢。出于某种原因,可可豆荚无法让我获得最新版本的 FirebaseDynamicLinks,无论我喜欢从 Pod 文件中删除并重新安装 FirebaseDynamicLinks 或运行 pod update 命令。因此,我从 pod 文件中删除了 FirebaseDynamicLinks 并运行了命令 pod install,它从我的项目中删除了该库,现在我已经从 firebase 控制台下载了 FirebaseDynamicLinks 框架并将其手动集成到我的项目中。现在有了新的 FirebaseDynamicLinks SDK,带有自定义子域的动态链接在应用程序中运行良好 :) 谢谢! 【参考方案1】:

如果 custom 域不工作而 Google 域工作,那么您需要将 FirebaseDynamicLinksCustomDomains 键添加到 info.plist 适用于 iOS

<key>FirebaseDynamicLinksCustomDomains</key>
<array>
  <string>https://custom-domain.com</string>
</array>

参考:https://firebase.google.com/docs/dynamic-links/custom-domains

【讨论】:

这正是我需要的,谢谢你的标注。【参考方案2】:

这是因为我使用的是旧的 FirebaseDynamicLinks 1.4.0。当我更新到 FDL 库 3.0.1 时,带有自定义子域的动态链接在应用程序中运行良好。

我认为我正在使用最新的 FDL 库的原因和 无法确定我使用的是旧的 FDL 库,CocoaPods(a iOS 项目的依赖管理器,read more) 无法得到我 出于某种原因,最新版本的 FirebaseDynamicLinks,无论如何 我喜欢从 Pod 文件中删除并重新安装 FirebaseDynamicLinks 或运行 pod update 命令。所以,我删除了 FirebaseDynamicLinks 从 pod 文件中运行命令 pod install,它删除了该库 从我的项目中,现在我已经下载了 FirebaseDynamicLinks 来自firebase控制台的框架并将其手动集成到我的 项目。现在有了新的 FirebaseDynamicLinks SDK,动态链接与 自定义子域在应用程序中运行良好。

【讨论】:

我遇到了类似的问题。您是从 Firebase 控制台的何处下载 FirebaseDynamicLinks 的? 我设法通过首先更新 cocoapods 然后进行 pod 更新来更新 FirebaseDynamicLinks,这也解决了我的问题。 handleUniversalLink 之前返回 false 并且没有调用回调,但现在它返回 true 并且正在按预期调用回调。 实际上我在使用 Firebase/DynamicLinks 2.0.0 版时遇到了同样的问题,并且由于项目中使用的 swift 语言的更高版本无法使用。将 pod 更新到 2.3.2 版本解决了这个问题,然后函数调用得很好。感谢 Ashok 分享这个:)

以上是关于当动态链接具有自定义子域时,Firebase 动态链接在 iOS 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 动态链接没有与自定义标签上的短 URL 进行深度链接

无法将某些特定子域用于 firebase 动态链接

将我自己的域与 Firebase 动态链接一起使用

无法使用自定义域将 Firebase 动态链接添加到项目

从 firebase 中删除创建的动态链接并使用 firebase 控制台创建新的自定义 URL

iOS-如何使用自定义参数firebase获取动态短链接