Android 动态链接无法在全新应用安装后继续存在

Posted

技术标签:

【中文标题】Android 动态链接无法在全新应用安装后继续存在【英文标题】:Android dynamic link doesn't survive fresh app installation 【发布时间】:2022-01-08 00:56:29 【问题描述】:

我正在尝试使用 Firebase 动态链接在我的应用中实现推荐。

幸福的道路是:

    链接与 JWT 令牌作为参数共享 另一个用户点击该链接,但没有应用程序,因此它转到 Playstore 安装应用后,在应用启动时,通过参数检索 JWT 令牌并存储在本地 新注册完成,发送token到后台激活推荐人奖励

问题是,在这种情况下,第 3 步在第一次应用启动时没有找到任何数据,而当我在安装应用后重新点击链接时找到。

这是为推荐人生成链接的方式:

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()

链接缩短:

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() 方法中读取链接:

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 轨道安装中存活,因此我尝试离开 beta 并使用远程配置将其隐藏在生产轨道中,但我无法看到任何区别.

我使用的版本是:

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'

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

提前感谢您的帮助!

编辑:

在这种情况下,正确找到了链接和令牌。

    链接与 JWT 令牌作为参数共享 另一个用户点击该链接,但没有应用程序,因此它转到 Playstore 安装应用后,第二个用户再次点击链接,首次打开应用

【问题讨论】:

以及data?.linkvar isReferralLink ... 之后的内容 抱歉我刚刚重新测试了一下,数据实际上是空的。 【参考方案1】:

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

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

在这种情况下,我使用带有活动作为参数的 addOnSuccessListener(),这使它能够感知生命周期。在我的应用中,一个新用户(全新安装)将被重定向到一个入职活动,因此监听器的活动被暂停,并且永远不会触发回调。

=> TLDR:删除此活动参数解决了我的问题。

【讨论】:

我用过同样的东西,它仍然导致null @TejasSherdiwala 您是否按照here 所述检查了您的assetlinks.json?这是我的另一个问题。 我在代码中遇到了一个不同的问题。还有一段代码试图在我输入的逻辑之前提取动态链接。因此,挂起的动态链接意图总是返回 null,因为没有任何待处理的内容。

以上是关于Android 动态链接无法在全新应用安装后继续存在的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

八月起,Android应用安装包的标准发布格式将发生全新变化

Android Alpha内部版本无法登录。我在哪里可以查看日志文件?

未安装应用时,Firebase 动态链接会打开 Weblink 而不是 App Store