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

Bar*_*man 5 android google-play firebase-dynamic-links

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

  1. 如果未安装该应用程序,用户将被定向到 Google Play 安装该应用程序,然后使用我的深层链接启动它。
  2. 如果安装了该应用程序,它将通过我的深层链接启动。

我的应用程序需要知道发生了哪一件事。

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

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

pna*_*avk -1

根据文档,这是完全可能的:

当用户打开您的动态链接之一时,如果您的应用尚未安装,系统会将用户发送到 Play 商店或 App Store 以安装您的应用(除非您另行指定),然后您的应用将打开。然后,您可以检索传递到您的应用程序的链接并根据您的应用程序处理深层链接

您可以使用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);
    }
});
Run Code Online (Sandbox Code Playgroud)

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

    if (prefs.getBoolean("firstlaunch", true)) {
        prefs.edit().putBoolean("firstlaunch", false).commit();
    }
Run Code Online (Sandbox Code Playgroud)

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