【问题标题】:Firebase pending dynamic links not workingFirebase 挂起的动态链接不起作用
【发布时间】:2017-01-29 11:43:03
【问题描述】:

根据 Firebase 动态链接文档,即使未安装应用程序,如果用户在设备上打开链接,Appstore 上的应用程序页面也会打开,并且应用程序安装后,应用程序会在首次启动时处理链接。 经过一番调查,这是如何处理的,我发现 Firebase 有一个叫做“挂起的动态链接”的东西,并且可以预料,AppDelegate 方法是用这些链接调用的:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options

这个假设的来源: https://groups.google.com/forum/#!msg/firebase-talk/2STD8eIi61I/8KJqZN7TBAAJ

但是当我尝试测试这个“挂起的动态链接”功能时,这两个 AppDelegate 方法都没有被调用

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options

同时,如果安装了应用程序,动态链接将按预期工作,如果从 Gmail 应用程序通过 Chrome 打开,则通过 openURL: 方法打开,通过 iOS9 上的通用链接打开,如果从 Notes 或 Mail 应用程序打开,则通过更高版本(实际上是通过 Safari )。

所以,我的问题是:“待处理的动态链接”期望如何工作?我的应用无法处理它们的原因可能是什么?

----------------编辑----------------

问题是,默认情况下,Firebase 会尝试使用等于应用程序包 ID 的 URL 方案打开应用程序,这不是我的情况。我已将 Firebase 的配置更改为下一个:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
options.deepLinkURLScheme = @"MY-CUSTOM-SCHEME";
[FIRApp configureWithOptions:options];

它开始工作,例如openURL: 方法现在在第一个应用打开时调用,如果之前在设备上打开过链接。

【问题讨论】:

    标签: ios firebase firebase-dynamic-links


    【解决方案1】:

    安装后深度链接基于检查标志:

    • [FIRApp configure] 调用
    • Dynamic Links SDK 检查是否为全新安装(例如,不存在标志)
    • 如果是,它会调用动态链接 API 来检查是否有要解析的动态链接
    • 如果是,SDK 使用在 FIROptions 上手动设置的自定义 URL 方案或小写包 ID(例如 com.foo.bar)调用 [[UIApplication sharedApplication] openURL:url];

    如果您没有收到,请检查自定义 URL 方案是否正确定义。

    【讨论】:

    • 谢谢@ian-barber 的解释。我已经设置了FIROptionsdeepLinkURLScheme 属性,它开始工作。如果您是 Firebase 团队成员,绝对值得将这些注释添加到 DynamicLinks 文档中。
    • @OlexandrStepanov 我有同样的问题,我认为我根据需要设置了 deepLinkURLSchemes:FIROptions.default().deepLinkURLScheme = "com.foo.boo" FIRApp.configure() 你能解释一下如何您是否设法使用 xcode 模拟应用首次安装?
    • 文档已更新!谢谢。您可以通过设置使其更清楚: FIROptions.default().deepLinkURLScheme = Bundle.main.bundleIdentifier
    【解决方案2】:

    澄清一下,如果我对链接的 Google 网上论坛帖子的理解是正确的,Firebase 动态链接库只会检查一次“待处理的动态链接”。曾经。因此,如果该应用已经检查了待处理的链接,您需要将其删除并重新安装以再次检查。

    现在回答您的问题,如果单击链接时未安装应用程序,则通常不会调用这两种方法。 openURL 方法响应自定义 URI 方案,continueUserActivity 方法响应通用链接。当用户在第一次下载后手动打开应用程序时,这些都不会被使用。 Firebase documentation 确实说 openURL 方法总是在初始安装时调用,但我从未见过其他地方发生过这种情况,因此他们可能正在做一些不寻常的事情。

    有跑题的风险,我建议看看Branch.io(完全披露:我在团队中)。您将获得动态链接的所有好处,以及一系列额外功能和更清晰的文档:)

    【讨论】:

    • 感谢@AlexBauer,我会考虑使用 Branch.io。但是在我的问题之后,您说“Firebase 动态链接库只检查一次‘待处理的动态链接’”。好的,他们检查了,但是应用程序如何知道这些“待处理的动态链接”,它们在首次发布时确实存在?在您使用 Firebase DL 的过程中,您是否曾经获得过这些“待处理的动态链接”?如果是,那么如何?
    • “待处理的动态链接”实际上并未在 Firebase 团队的任何地方使用。讨论线程使用它来表示“用户在首次安装应用程序之前打开的链接”的概念。这一切都是在幕后处理的,所以您应该需要关心的是,无论应用程序是否已安装,您都能获得相同的回报。当然你现在不是,这是问题所在!文档中似乎有 另一个 - (BOOL)application:(UIApplication *)application 方法可能仅适用于新安装 - 你们都设置了吗?
    • 是的,我确实设置了两个应用程序委托方法,并且我可以看到它们在不同的情况下调用:openURL 从 Chrome 打开链接时,continueUserActivity 从 Safari 打开时,都在 iOS9 上。但是在全新安装后,这两种方法都不会被调用。确切地说,步骤是:从设备上卸载应用程序,在设备上打开动态链接,它会在 link 参数中打开 url,从 XCode 安装应用程序并在两个应用程序委托方法中使用断点运行 -> 两种方法都不是叫。那么,您认为这是 Firebase 中的错误吗?
    • 似乎有三个委托方法,而不是两个。你有第二个openURL 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多