从深层链接启动应用程序时未调用 AppDelegate ContinueUserActivity,应归咎于 Firebase SDK

Posted

技术标签:

【中文标题】从深层链接启动应用程序时未调用 AppDelegate ContinueUserActivity,应归咎于 Firebase SDK【英文标题】:AppDelegate ContinueUserActivity not called when launching app from deep link, Firebase SDK is to blame 【发布时间】:2019-06-14 18:56:10 【问题描述】:

在我的 AppDelegate 类中,我正在尝试处理启动 Xamarin ios 应用程序的深层链接,以便我可以根据 url 将用户导航到应用程序中的正确位置。我正在覆盖所有 ContinueUserActivity 和 OpenUrl 方法,但是这些方法都没有被调用(当应用程序关闭或只是暂停时)。我正在通过在 iOS 日历中包含深层链接 (https://example.com/path1/path2) 进行测试事件,然后在应用程序以调试模式运行时点击我的 iPhone 6(运行 iOS 12.3.1)上的链接。点击链接时我的应用确实打开了,但在任何被覆盖的方法中都没有遇到断点。

public override bool ContinueUserActivity (UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler) 
            return true;
        

    public override bool OpenUrl (UIKit.UIApplication app, Foundation.NSUrl url, Foundation.NSDictionary options) 
                return true;
            

            public new bool OpenUrl (UIKit.UIApplication app, Foundation.NSUrl url, UIKit.UIApplicationOpenUrlOptions options) 
                return true;
            

            public override bool OpenUrl (UIApplication application, NSUrl url, string sourceApplication, NSObject annotation) 
                return true;
            

我认为通用链接设置正确(关联域等),否则它不会启动我的应用程序。此外,我已经确认我的 FinishedLaunching 方法返回 true,正如我在别处读到的那样,如果返回 false,则不会调用 ContinueUserActivity 和 OpenUrl。 AppDelegate 中的其他重写方法(如 OnActivated 和 WillContinueUserActivity)被调用,但不是我需要在深层链接 url 处获取的方法。

这是 Xamarin iOS 错误吗?还是我做错了什么?我使用的是最新版本的 Xamarin iOS (12.8.0.2)。

编辑:更多信息...事实证明,Firebase SDK 是破坏深层链接的罪魁祸首。如果我禁用它,那么单击深层链接将成功调用 ContinueUserActivity。但是,只要我调用 Firebase.Core.App.Configure(),随后的深层链接点击仍将打开应用程序,但不再调用 ContinueUserActivity。我不确定如何解决此问题,因为我需要 Firebase for Analytics(Google Analytics 即将停用...)

【问题讨论】:

你可能还需要WillContinueUserActivity:和DidFailUserActivity,如果WillContinue返回false,可以调用DidFail @NSGangster 如果 WillContinue 返回 false,我不确定您的意思。如果我重写 WillContinueUserActivity,我需要自己返回 true 或 false。即使我返回 true,也永远不会调用 ContinueUserActivity。 那么 WillContinueUserActivity 会断点吗?你检查它是否失败了吗? 是的,WillContinueUserActivity 命中断点。我不确定它是否失败是什么意思。它只是覆盖了该方法,然后我需要返回 true 或 false。我无法调用 base.WillContinueUserActivity 来查看结果是什么,因为这会引发异常,说明您无法调用基本方法。 还有另一种方法DidFailUserActivity,如果你覆盖它并断点它,你可以看到NSError,它应该会给你更多关于它失败原因的信息。如果您的 ContinueUserActivity 未被调用,则很可能断点会命中 DidFailUserActivity 方法。 【参考方案1】:

感谢@Andrew McKinley,但对于遇到相同问题的其他人,解决方案是向您的 Info.plist 文件添加一个新密钥:

键:FirebaseAppDelegateProxyEnabled 类型:布尔值 值:否(假)

在 Firebase 停止对深层链接 url 的劫持处理之后,当点击深层链接时,AppDelegate.ContinueUserActivity 会被正确调用。

【讨论】:

以上是关于从深层链接启动应用程序时未调用 AppDelegate ContinueUserActivity,应归咎于 Firebase SDK的主要内容,如果未能解决你的问题,请参考以下文章

应用程序从深层链接启动,然后从启动器再次激活重新启动活动

从深层链接启动时,我可以使用代码退出我的 android 应用程序吗?

从 Xcode 启动 App Clip 时未调用 SceneDelegate 的“继续”

Facebook延迟深层链接不起作用

如果应用程序通过深层链接打开,共享元素转换不起作用

如何在 SwiftUI 中从通知深层链接到屏幕?