应用不在后台时无法识别 Firebase 动态链接 (iOS)

Posted

技术标签:

【中文标题】应用不在后台时无法识别 Firebase 动态链接 (iOS)【英文标题】:Firebase Dynamic Link not recognized when app not in background (iOS) 【发布时间】:2018-01-04 17:27:46 【问题描述】:

当应用处于后台模式(已安装并启动一次)时,点击动态链接会调用 continueUserActivity 方法。

但是,当应用尚未启动(或未安装)时,应用似乎没有检测到动态链接。 application:openURL:options 永远不会被调用, application:userActivity:restorationHandler 只会在应用程序已经启动时被调用。 我在 applicationDidFinishLaunchWithOptions 中遗漏了什么吗?

提前感谢您提供的每一个帮助!

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

 //custom scheme is set to my bundleID as recommended
    [FIROptions defaultOptions].deepLinkURLScheme = MY_CUSTOM_SCHEME;
    [FIRApp configure]

 return YES



- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options 
  FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];


  if (dynamicLink) 
    if (dynamicLink.url) 
      // Handle the deep link. For example, show the deep-linked content,
      // apply a promotional offer to the user's account or show customized onboarding view.
      // ...
      NSLog(@"opened with dynamic link");
     else 
      // Dynamic link has empty deep link. This situation will happens if
      // Firebase Dynamic Links ios SDK tried to retrieve pending dynamic link,
      // but pending link is not available for this device/App combination.
      // At this point you may display default onboarding view.
      NSLog(@"not opened with dynamic link");
    
    return YES;
  
  return NO;


- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
 restorationHandler:(void (^)(NSArray *))restorationHandler 

    NSLog(@"continueUserActivity called");
  BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL
                                                          completion:^(FIRDynamicLink * _Nullable dynamicLink,
                                                                       NSError * _Nullable error) 
             NSLog(@"continueUserActivity called");
        if (error) 
            NSLog(@"dynamic link error: %@", error.localizedDescription);
        
        else 
            NSLog(@"dynamic link called: %@", dynamicLink.url);
        
    ];
  return handled;

【问题讨论】:

【参考方案1】:

您使用的是哪个版本的 Firebase 动态链接 SDK?确保您更新到最新版本。同时运行方法[FIRDynamicLinks performDiagnosticsWithCompletion:nil]; 并检查输出是否有任何错误。

您在哪个应用中点击动态链接?您是否继续点击 AppPreview 页面中的 OPEN 按钮?

【讨论】:

今天刚刚更新了SDK(1.4.0)。我点击笔记应用程序。在我的设备上,如果我单击链接并且应用程序已经在运行,它会调用 continueUserActivity,我可以相应地呈现动态入职。但是如果应用程序已关闭,它只会打开应用程序,但不会调用 continueUserActivity 或 application:openURL:options: methods FDL SDK 的最新版本是 2.3.1。见这里github.com/CocoaPods/Specs/blob/master/Specs/6/e/5/…。您指的是哪个版本 1.4.0?您观察到的行为不正确,在这种情况下使用了通用链接,因此您应该看到传递给 continueUserActivity 的 URL。请打开 Firebase 支持案例或分享您的代码。 使用 Firebase (3.17.0) 使用 FirebaseAnalytics (3.9.0) 使用 FirebaseAuth (3.1.1) 使用 FirebaseCore (3.6.0) 使用 FirebaseDatabase (3.1.2) 使用 FirebaseDynamicLinks (1.4.0)使用 FirebaseInstanceID (1.0.10) 使用 FirebaseInvites (1.3.0) 使用 FirebaseMessaging (1.2.3) 使用 FirebaseStorage (1.1.0) 这是“pod update”后我的终端的摘录 如何获取 2.3.1 SDK你指的是什么? 这些是相当旧的版本号。我建议更新到最新的 Firebase 版本,以确保您没有看到已修复的旧错误。您能否发布您的 Podfile 以澄清 pod update 未能更新的原因?随时打开 Firebase 支持票或在 oleksiyi at google.com 上向我发送电子邮件以私下分享。 您好 Oleksiy,我设法将 Firebase 更新到最新版本,但新版本出现了另一个问题。等其他问题解决后,我会回到这里。

以上是关于应用不在后台时无法识别 Firebase 动态链接 (iOS)的主要内容,如果未能解决你的问题,请参考以下文章

使用 React Native 的 Google Firebase 动态链接在 IOS 上无法正常工作

Firebase 动态链接无法从冷启动 - Xcode 11,iOS 13

Firebase 动态链接无法直接打开应用

未启动应用程序时 Firebase 动态链接不起作用

冷启动 iOS 14 时未处理 iOS Firebase 动态链接

Flutter Firebase 动态链接不适用于新的 ios 应用安装