有没有办法认识到应用程序是通过didFinishLaunchingWithOptions中的firebase动态链接安装的?

问题描述 投票:1回答:2

我正在我的iOS应用程序中实现firebase动态链接,我已经可以解析链接,重定向到AppStore等。现在我想区分应用程序的第一次运行,当用户从动态链接安装它时 - 我想跳过介绍并向他展示预计会展示的内容。

是否有一些参数,我可以在application(_:didFinishLaunchingWithOptions:)中捕获,所以我可以说它是通过动态链接启动的?

方法application(_:continueUserActivity:userActivity:restorationHandler:)稍后调用,因此介绍已经启动。

这种情况很难测试,因为您必须在AppStore上发布您的应用程序。

ios swift firebase firebase-dynamic-links
2个回答
3
投票

实际上,您无需在App Store中发布应用程序即可实现此功能 - 单击链接,关闭App Store,然后通过Xcode(或任何其他Beta分发平台,如TestFlight或Fabric)安装应用程序构建完全相同的效果。

根据Firebase docs,第一次安装调用的方法是openURL(不,这对我来说也没有意义)。 continueUserActivity方法适用于Universal Links,仅在打开链接时已安装应用程序时使用。

我不知道有什么方法可以在安装“延迟”链接后第一次检测到应用程序何时打开,但只要存在深层链接,您就可以直接路由到共享内容(跳过介绍)。如果没有深层链接,请显示常规介绍。


替代选择

你可以查看Branch.io(完全披露:我在分支团队)。除此之外,Branch还是Firebase动态链接的绝佳替代品,具有大量附加功能。以下是Branch在didFinishLaunchingWithOptions中立即返回的所有参数的示例:

{  
    "branch_view_enabled"   = 0; 
    "browser_fingerprint_id" = "<null>"; 
    data = "{  
      \"+is_first_session\":false,
      \"+clicked_branch_link\":true,
      \"+match_guaranteed\":true,
      \"$canonical_identifier\":\"room/OrangeOak\",
      \"$exp_date\":0,
      \"$identity_id\":\"308073965526600507\",
      \"$og_title\":\"Orange Oak\",
      \"$one_time_use\":false,
      \"$publicly_indexable\":1,
      \"room_name\":\"Orange Oak\", // this is a custom param, of which you may have an unlimited number
      \"~channel\":\"pasteboard\",
      \"~creation_source\":3,
      \"~feature\":\"sharing\",
      \"~id\":\"319180030632948530\",
      \"+click_timestamp\":1477336707,
      \"~referring_link\":\"https://branchmaps.app.link/qTLPNAJ0Jx\"
    }"; 
    "device_fingerprint_id" = 308073965409112574; 
    "identity_id" = 308073965526600507; 
    link = "https://branchmaps.app.link/?%24identity_id=308073965526600507"; 
    "session_id" = 319180164046538734;
}

您可以在Branch文档here上阅读有关这些参数的更多信息。


1
投票

嗯......就我所知,在application:(_:didFinishLaunchingWithOptions)阶段你没有任何东西可以让你知道应用程序是通过动态链接打开的。正如你所提到的,你将不得不等到continueUserActivity跟注。

也就是说,FIRDynamicLinks.dynamicLinks()?.handleUniversalLink几乎立即返回一个布尔值,所以你应该能够利用它来短路你的动画,而不是一个糟糕的用户体验。回调本身可能要到几毫秒之后才会发生,这取决于它是缩短的动态链接(需要网络调用)还是扩展的动态链接(不需要)。

© www.soinside.com 2019 - 2024. All rights reserved.