如何区分 Firebase 动态链接的启动和安装?

Posted

技术标签:

【中文标题】如何区分 Firebase 动态链接的启动和安装?【英文标题】:How to tell between a launch and an install from a Firebase Dynamic Link? 【发布时间】:2019-01-11 19:08:21 【问题描述】:

当用户点击我的 Firebase 动态链接(带有深层链接)以启动我的 android 应用时,会发生以下两种情况之一:

    如果未安装该应用,用户将被引导至 Google Play 安装该应用,然后使用我的深层链接启动它。 如果应用已安装,它将使用我的深层链接启动。

我的应用需要知道发生了什么。

据我所知,Firebase API 不会告诉我该应用是否已作为 FDL 流程的一部分安装。我错过了什么吗?

附:使用共享首选项对我的目的来说不够好,因为它们在用户清除数据时被删除,因此不能完美地代表安装。我正在寻找类似 @​​987654321@ 广播事件由 Google Play 触发,但它适用于 Firebase 动态链接。

【问题讨论】:

【参考方案1】:

根据documentation,这是完全可能的:

当用户打开您的一个动态链接时,如果您的应用尚未安装,用户会被发送到 Play 商店或应用商店以安装您的应用(除非您另外指定),然后您的应用就会打开。然后,您可以检索传递给您的应用的链接,并根据您的应用处理深层链接

您可以使用Dynamic Links SDK并调用FirebaseDynamicLinks.getDynamicLink()方法来获取传递给链接的数据:

FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent()).addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() 
    @Override
    public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) 
        Uri deepLink = null;
        if (pendingDynamicLinkData != null) 
            deepLink = pendingDynamicLinkData.getLink();
        
    
).addOnFailureListener(this, new OnFailureListener() 
    @Override
    public void onFailure(@NonNull Exception e) 
        Log.w(TAG, "getDynamicLink:onFailure", e);
    
);

您可以将它与存储在 SharedPreferences 中的“firstlaunch”标志结合使用来检测应用程序是否已安装。

    if (prefs.getBoolean("firstlaunch", true)) 
        prefs.edit().putBoolean("firstlaunch", false).commit();
    

https://firebase.google.com/docs/dynamic-links/android/receive

【讨论】:

这并不能告诉我应用程序是刚刚安装还是已经安装,对吗?这就是我需要知道的。 @BarryFruitman - 您可以将其与布尔 SharedPreference 结合使用作为复合键来检测“全新安装”。所以在启动时 - 检查共享首选项中是否存在一个值,如果存在则该应用程序已安装。查看答案编辑 抱歉 pnavk 但我需要比这更好的东西,因为 SharedPreferences 在用户清除数据时被删除,因此它们不能完美地代表安装。

以上是关于如何区分 Firebase 动态链接的启动和安装?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 动态链接重定向

每次用户使用来自 firebase 的动态链接的应用程序安装我的应用程序时,我如何检测和奖励?

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

Firebase 动态链接如何在应用安装中幸存下来的理论是啥?

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

Firebase动态链接,如果安装了应用程序,如何将用户引导到应用程序