使用动态链接首次下载后更新应用程序时未调用 openURL 方法

Posted

技术标签:

【中文标题】使用动态链接首次下载后更新应用程序时未调用 openURL 方法【英文标题】:openURL method not getting called when updating app after first download with dynamic link 【发布时间】:2018-01-02 09:53:07 【问题描述】:

当我通过构建新版本来更新我的应用程序时,会调用 openURL 方法。但是当我点击动态链接并在之后进行更新时,不再调用 openURL 方法。

有人可以解释为什么会这样吗?

这是我想用 openURL 方法做事的代码/

- (BOOL)application:(UIApplication *)application

        openURL:(NSURL *)url

        options:(NSDictionary<NSString *, id> *)options 



// Sends the URL to the current authorization flow (if any) which will

// process it if it relates to an authorization response.

if ([_currentAuthorizationFlow resumeAuthorizationFlowWithURL:url]) 

    _currentAuthorizationFlow = nil;

    return YES;





FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];

NSString *userID = [[NSUserDefaults standardUserDefaults] stringForKey:@"xx"];

NSString *firstTimeAppOpened = [[NSUserDefaults standardUserDefaults] stringForKey:@"xxx"];


if (dynamicLink != nil) 

    if ([dynamicLink.url.absoluteString length] != 0) 

        NSLog(@"App opened with link: %@", dynamicLink);



        NSString *snippet = [NSString stringWithFormat:@"URLScheme: Received dynamic firebase link: %@", dynamicLink.url.absoluteString];

        NSString *category = @"DYNAMIC_LINK";

        NSString *pathFromURL = [dynamicLink.url.absoluteString lastPathComponent];


        [SiteConnector sendAuditWithSnippet:snippet inCategory:category];



        NSString *firstTimeAppOpened = [[NSUserDefaults standardUserDefaults] stringForKey:@"FirstTimeAppOpened"];



        if ([dynamicLink.url.absoluteString rangeOfString:@"murat"].location == NSNotFound) 

            [self dynamicLinkBehaviour:pathFromURL second:dynamicLink.url absolutePath:nil];

         else 

            if (firstTimeAppOpened == nil) 

                [self onboardingDynamicLink:dynamicLink.url.absoluteString];

            

        

    

    else 

        if (userID == nil && firstTimeAppOpened == nil) 

            [self openWelcomeScreen];

        

    





NSString *valueToSave = @"yes";

[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"FirstTimeLoggedIn"];

[[NSUserDefaults standardUserDefaults] synchronize];



return [[FBSDKApplicationDelegate sharedInstance] application:application

                                                      openURL:url

                                            sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]

                                                   annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];

【问题讨论】:

你想用 openURL 打开一个 url 吗? @SandipGill 是的,当应用程序第一次启动时,我需要进行检查。但是 openURL 方法仅在我下载应用程序以及进行更新时调用(通过在之前的安装之上安装)。但是,当我使用 firebase 动态链接下载应用程序时,它可以工作,但当我在其之上进行更新时,它就不行了。 所以 firebase 动态链接做了一些奇怪的事情。在对使用 firebase 动态链接进行的下载进行上述更新后,它不会打开 openURL 方法。 好的,可以分享一下代码吗? @SandipGill 我已将 openURL 方法添加到此“问题”中。 【参考方案1】:

openURL 仅在通过 URI 方案(即fb://)打开应用程序时调用。 Firebase 在大多数情况下使用通用链接,通用链接打开的应用会触发continue userActivity 协议功能。您可以参考他们的文档以获取该代码:

func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([Any]?) -> Void) -> Bool 
  guard let dynamicLinks = DynamicLinks.dynamicLinks() else 
    return false
  
  let handled = dynamicLinks.handleUniversalLink(userActivity.webpageURL!)  (dynamiclink, error) in
    // ...
  

  return handled

这是我推荐使用 Branch 的原因之一,因为无论是 URI 方案还是通用链接,它们都在一个回调中进行处理。

【讨论】:

感谢您的帮助。但是每次第一次安装应用程序时都会调用 openURL。所以我的问题仍然存在..我需要这种方法来激活或不激活。两者都不做..【参考方案2】:

你好@iosporgrammerIOS 请试试这个。

var yourUrl = NSURL(string:"url_String")! 如果 UIApplication.shared.canOpenURL(yourUrl as URL) UIApplication.shared.openURL(yourUrl as URL)

目标 C

UIApplication *application = [UIApplication sharedApplication]; NSURL *URL = [NSURL URLWithString:@"http://www.google.com"]; [应用程序 openURL:URL 选项:@ completionHandler:^(BOOL 成功) 如果(成功) NSLog(@"打开的网址"); ];

【讨论】:

以上是关于使用动态链接首次下载后更新应用程序时未调用 openURL 方法的主要内容,如果未能解决你的问题,请参考以下文章

VB.Net SQL DataAdapter 首次运行时未更新

FBSDKLoginManager logInWithReadPermissions:fromViewController:处理程序:应用程序首次运行时未调用完成

iOS:首次加载时未调用 iCarousel 委托方法

首次打开应用时如何从动态链接中获取长链接?

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

使用 xmpp 框架时未调用委托方法