首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android动态链接无法通过新的应用程序安装

Android动态链接无法通过新的应用程序安装
EN

Stack Overflow用户
提问于 2021-12-01 12:21:31
回答 1查看 864关注 0票数 1

我正试图在我的应用程序中使用Firebase动态链接来实现推荐。

幸福的道路是:

当parameter

  • Another用户单击该链接时,
  1. 链接与JWT令牌共享,它没有应用程序,因此它被安装到Playstore
  2. After应用程序,在应用程序启动时,通过参数检索令牌并存储本地
    1. 新注册,令牌被发送到后端以激活推荐者的奖励

问题是,在这个场景中,步骤3在第一次应用程序启动时找不到任何数据,而当我在安装了应用程序之后重新单击链接时就会找到它。

--这是为引用程序生成链接的方式:

代码语言:javascript
复制
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()

通过以下方式缩短了联系:

代码语言:javascript
复制
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()方法中读取:

代码语言:javascript
复制
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,并使用远程配置将其隐藏在生产跟踪中,但我没有看到任何区别。

我使用的版本是:

代码语言:javascript
复制
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'

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

提前感谢您的帮助!

编辑:

在这个场景中,正确地找到了链接和令牌。

当parameter

  • Another用户单击该链接时,
  1. 链接将与JWT令牌共享,没有应用程序,因此它已安装到Playstore
  2. After应用程序,第二个用户再次单击该链接并首次打开应用程序
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-09 14:08:54

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

代码语言:javascript
复制
FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(activity) { data -> 
                 // Some data reading
            }

在本例中,我使用了带有活动的addOnSuccessListener()作为参数,这使它能够意识到生命周期。在我的应用程序中,一个新用户(新安装)将被重定向到一个入职活动,这样监听器的活动就会暂停,回调也不会被触发。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70184114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档