9

根据 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:如果之前在设备上打开了链接,则现在在第一个打开的应用程序上调用方法。

4

2 回答 2

8

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

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

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

于 2016-10-18T18:20:48.753 回答
0

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

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

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

于 2016-09-24T03:54:38.600 回答