在Firebase动态链接中添加参数

4
我希望用户能够通过点击按钮分享我的应用程序中的产品,并向其他潜在用户发送链接,例如

www.myapp.com/offer/123

在此处,“123”必须在用户单击按钮时生成,以便在以后的时间内使用。

FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                @Override
                public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                    Uri deepLink;
                    if (pendingDynamicLinkData != null) {
                        deepLink = pendingDynamicLinkData.getLink();

但是不幸的是,我无法传递参数。

String link = "http://www.myapp.com/offer/123";
        Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLink(Uri.parse(link))
                .setDynamicLinkDomain("fgd3e.app.goo.gl")
                .buildShortDynamicLink()
                .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
                    @Override
                    public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                        if (task.isSuccessful()) {
                            // Short link created
                            Uri shortLink = task.getResult().getShortLink();
                            Uri flowchartLink = task.getResult().getPreviewLink();

有人能教我如何在运行时创建带有自定义参数的动态链接,以便将目标用户重定向到特定产品详细信息页面吗?

2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
11
简短回答: 使用查询参数而不是路径变量,您可以使用pendingDynamicLinkData.getLink()返回的Uri对象中的getQueryParameter方法。

我一直在使用查询参数而不是路径变量。

我发送的是类似于http://www.myapp.com/?offer=123而不是http://www.myapp.com/offer/123

为了动态添加参数,我只需将字符串连接起来:"http://www.myapp.com/?offer=" + myValue

这个URL反过来又是firebase创建的动态链接的一个查询参数:

String url = "https://YourDynamicLinkIdentifier.app.goo.gl/?link=https://myapp.com?offer=" 
+ myOfferVar 
+ "&apn=com.your.apn"; // << Dont forget to change this too

这个生成的URL是我发送到URL缩短器的那一个。

然后在回调函数 onSuccess(PendingDynamicLinkData pendingDynamicLinkData) 中,像你已经做的那样,调用 pendingDynamicLinkDatagetLink() 方法。

现在你有了一个Uri对象,你可以通过调用方法 getQueryParameter("offer") 轻松获取参数。

if (pendingDynamicLinkData != null) {
     deepLink = pendingDynamicLinkData.getLink();
     String offerKey = deepLink.getQueryParameter("offer");

注意:如果您仍然喜欢使用路径变量,您可以获取Uri路径的最后一段。请参见如何获得uri的最后一个路径段


在 Firebase 控制台的动态链接部分中,您有什么?您是否在那里创建/配置了动态链接? - Agustin Zanini
是的,我只是创建了它,对于参数(在Firebase中)没有任何特殊配置的需要,因为您在应用程序中收到的链接是您提供的深度链接加上您添加的所有参数。还有一件事我没有提到,让我更新答案。 - AarónBC.
@AarónBC。如果用户通过 Playstore 动态链接安装了应用程序,然后关闭 PlayStore 并从菜单中打开应用程序,那么动态数据是否会保持不变?我能检测到推荐来源吗?如果其他用户不通过 PlayStore 打开应用程序,则附加项不会被清除。 - Aman Verma
@AarónBC。你好,我还是不太明白你的回答,那么我应该在Firebase控制台上创建什么样的动态链接才能实现动态查询参数呢? - MNFS

5

您需要使用长深链接发送参数。

例如:

1)打开谷歌测试URL应用的链接:

https://xx.page.link/?link=https://xx.com/invitation/?id=2&apn=com.xx.app&afl=https://play.google.com/apps/testing/com.xx.app

2) 接收参数:

       FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                @Override
                public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                    Uri deepLink = null;
                    if (pendingDynamicLinkData != null) {
                        deepLink = pendingDynamicLinkData.getLink();
                        String paramValue = deepLink.getQueryParameters("id").get(0)); // it will get "2" as a value
                    }

                }
            })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.w("Splash", "getDynamicLink:onFailure", e);
                }
            });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,