Android 动态 link 无法在全新应用程序安装后继续存在

Android dynamic link doesn't survive fresh app installation

我正在尝试使用 Firebase Dynamic 在我的应用中实施推荐 link。

幸福的道路是:

  1. Link 与 JWT 令牌共享作为参数
  2. 另一个用户点击了 link,没有该应用程序,所以它转到了 Playstore
  3. 安装应用程序后,在应用程序启动时,通过参数检索 JWT 令牌并存储在本地
  4. 新注册完成,token发送到后台激活referrer奖励

问题是在这种情况下,第 3 步在第一次启动应用程序时找不到任何数据,而当我在安装应用程序后重新单击 link 时找到了。

这是为 referrer 生成 link 的方式:

val parameters = new DynamicLink.SocialMetaTagParameters.Builder()
                .setImageUrl(...)
                .setTitle(...)
                .build();

val link = Uri.parse("https://my.domain.com/path/?token=${jwtToken}");

val dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLink(link)
                .setSocialMetaTagParameters(parameters)
                .setDomainUriPrefix("https://my.domain.com")
                .setAndroidParameters(DynamicLink.AndroidParameters.Builder().build()))
                .setIosParameters(...) 
                .setNavigationInfoParameters(
                       DynamicLink.NavigationInfoParameters.Builder()
                           .setForcedRedirectEnabled(true)
                           .build
                 ).buildDynamicLink()

link 缩短为:

FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setDomainUriPrefix("https://my.domain.com/")
                .setLongLink(dynamicLink.getUri())
                .buildShortDynamicLink()
                .addOnCompleteListener(activity, task -> {
                    if (task.isSuccessful() && task.getResult() != null) {
                        linkCallback.success(task.getResult().getShortLink().toString());
                    } else {
                        linkCallback.failure(task.getException());
                    }
                })

应用程序打开时,在启动的onResume()方法中读取link activity :

override fun onResume() {
    super.onResume()
    FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent()) // getIntent() refers to the Activity's method
            .addOnSuccessListener(activity) { data -> // Get deep link from result (may be null if no link is found)
   
                val isReferralLink = data?.link?.toString()?.startsWith("https://my.domain.com/path") == true
                val jwt = data?.link?.getQueryParameter("token")

                // Here, data is null. <-------

               // Other attempt :
                data?.let { aiData ->
                    FirebaseAppInvite.getInvitation(aiData)?.let { result ->
                        // Here result is still null
                    }
                }
            } 
}

我在堆栈溢出线程上看到它无法在 beta track install 中存活,所以我试图离开 beta 并使用远程配置将它隐藏在 production track 中,但我无法看到有什么不同。

我使用的版本是:

implementation 'com.google.firebase:firebase-dynamic-links:21.0.0'
implementation 'com.google.firebase:firebase-analytics:20.0.0'
implementation 'com.google.firebase:firebase-invites:17.0.0'

问题: 我在这里遗漏了什么吗?

提前感谢您的帮助!

编辑:

在这种情况下,正确找到 link 和令牌。

  1. Link 与 JWT 令牌共享作为参数
  2. 另一个用户点击了 link,没有该应用程序,所以它转到了 Playstore
  3. 安装应用后,第二个用户再次点击 link 并首次打开应用

好的,经过几天的测试和研究,我发现了它不起作用的原因。

FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(activity) { data -> 
                 // Some data reading
            }

在这种情况下,我使用了带有 activity 作为参数的 addOnSuccessListener(),这使其具有生命周期意识。在我的应用程序中,新用户(全新安装)将被重定向到入职 activity,因此侦听器的 activity 已暂停,并且永远不会触发回调。

=> TLDR:删除这个 activity 参数解决了我的问题。