当动态链接具有自定义子域时,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
始终是false
和completion
从handleUniversalLink
函数永远不会被调用。
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
总是正确的,来自handleUniversalLink
的completion
被调用并且我收到了预期的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 进行深度链接