从深层链接启动应用程序时未调用 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 应用程序吗?