Firebase 挂起的动态链接不起作用

Firebase pending dynamic links not working

根据 Firebase 动态链接文档,即使未安装应用,如果用户在设备上打开 link,Appstore 上的应用页面也会打开,安装应用后,应用会处理 link 在第一次启动时。 经过一些调查如何处理后,我发现 Firebase 有一个叫做 "pending dynamic links" 的东西,预计 AppDelegate 方法是用这些 links:

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

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

但是当我尝试测试此 "pending dynamic lynks" 功能时,这两个 AppDelegate 方法都没有被调用

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

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

所以,我的问题是:"pending dynamic links" 期望如何工作?我的应用无法处理它们的原因可能是什么?

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

问题是,默认情况下 Firebase 会尝试使用 URL 方案打开应用程序,该方案等于应用程序包 ID,这不是我的情况。我已将我的 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: 如果之前在设备上打开过 link,则现在在第一个打开的应用程序上调用方法。

澄清一下,如果我对 linked Google 组 post 的理解是正确的,Firebase 动态链接库只检查一次 'pending dynamic links'。曾经。因此,如果该应用已经检查了待处理的 link,您需要将其删除并重新安装以再次检查。

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

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

post-install deeplinking 是基于检查标志:

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

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