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