如何使Firebase动态链接重定向到台式机上的网站以及移动设备上的即时应用程序

时间:2019-07-09 06:34:38

标签: firebase-dynamic-links android-instant-apps

我有一个即时应用程序和一个Firebase动态链接,该链接重定向到该即时应用程序。

但是,当我单击计算机上的动态链接时,该链接会指向我网站上不存在的页面。

根据Google文档:https://firebase.google.com/docs/dynamic-links/android/create

  

当用户在桌面Web浏览器上打开动态链接时,他们将加载此URL(除非指定了ofl参数)。如果您没有与链接内容等效的网站,则URL无需指向有效的网站资源。在这种情况下,您应该设置从该URL到例如主页的重定向。

所以我为我的动态链接创建了一个重定向 / share / **到/

而且,当我单击计算机上的链接时,它会进入我网站的主页。 但是我的动态链接也位于我的主页上,因此不再打开即时应用程序。

所以我的问题是:如何配置重定向,以将桌面用户从/ share / **重定向到/,而又不会破坏我的即时应用程序?

3 个答案:

答案 0 :(得分:2)

在URL中添加“ ofl”参数,以使FDL重定向桌面上的另一个URL。

不幸的是,无法使用Android构建器添加此参数。

因此,您必须手动创建链接,并使用“ setLongLink”方法,如页面底部所示:https://firebase.google.com/docs/dynamic-links/android/create#shorten-a-long-dynamic-link

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLongLink(Uri.parse("https://example.page.link/?link=https://www.example.com/&apn=com.example.android&ibn=com.example.ios"))
        .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();
                } else {
                    // Error
                    // ...
                }
            }
        });

我创建了自己的构建器以包含ofl参数。如果可以的话:

public class DynamicLinkBuilder {

    private String dynamicLink = "https://example.com/foo"

    public DynamicLinkBuilder(String link) {
        this.dynamicLink += "?link=" + link;
    }

    public DynamicLinkBuilder addMinVersion(int minVersion){
        dynamicLink += "&amv=" + minVersion;
        return this;
    }

    public DynamicLinkBuilder addIosUrl(String iosUrl){
        dynamicLink += "&ifl=" + iosUrl;
        return this;
    }

    public DynamicLinkBuilder addDesktopUrl(String desktopUrl){
        dynamicLink += "&ofl=" + desktopUrl;
        return this;
    }

    public DynamicLinkBuilder addFallbackUrl(String fallbackUrl){
        dynamicLink += "&afl=" + fallbackUrl;
        return this;
    }

    public DynamicLinkBuilder addPackageName(String packageName){
        dynamicLink += "&apn=" + packageName;
        return this;
    }

    public DynamicLinkBuilder addSocialMediaLogo(String logoUrl){
        dynamicLink += "&si=" + logoUrl;
        return this;
    }

    public DynamicLinkBuilder addSocialMediaTitle(String title){
        dynamicLink += "&st=" + Uri.encode(title);
        return this;
    }

    public DynamicLinkBuilder addSocialMediaDescription(String description){
        dynamicLink += "&sd=" + Uri.encode(description);
        return this;
    }

    public String build(){
        return dynamicLink;
    }
}

答案 1 :(得分:0)

请先尝试按照以下链接中的步骤进行操作,因为它似乎与您要的内容相似:

opening an Instant App by a Firebase Dynamic Link with custom parameters (App Links)

如果使用该方法后有任何疑问,请发表。

答案 2 :(得分:0)

@Simon,

无需手动链接构建就可以实现,只需使用相同的构建器

私有静态最终字符串OTHER_PLATFORM_LINK_KEY =“ ofl”;

public static Task<ShortDynamicLink> createShortDynamicLink(Uri deepLink, Uri imageUrl, String title, String description) {
    DynamicLink dynamicLink = createDynamicLink(deepLink, imageUrl, title, description);
    return FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLongLink(dynamicLink.getUri())
            .buildShortDynamicLink();
}

public static DynamicLink createDynamicLink(Uri deepLink, Uri imageUrl, String title, String description) {
    DynamicLink dynamicLink = getDynamicLinkBuilder(deepLink, imageUrl, title, description)
            .buildDynamicLink();
    String longDynamicLink = String.valueOf(dynamicLink.getUri());
    longDynamicLink += '&' + OTHER_PLATFORM_LINK_KEY + '=' + DomainConstants.OTHER_PLATFORM_LINK;
    return FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLongLink(Uri.parse(longDynamicLink))
            .buildDynamicLink();
}

public static DynamicLink.Builder getDynamicLinkBuilder(Uri deepLink, Uri imageUrl, String title, String description) {
    return FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLink(deepLink)
            .setDomainUriPrefix(DomainConstants.DYNAMIC_LINK_DOMAIN_URI_PREFIX)
            .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build())
            .setIosParameters(new DynamicLink.IosParameters.Builder(DomainConstants.IOS_BUNDLE_ID)
                    .setAppStoreId(DomainConstants.APP_STORE_ID)
                    .setMinimumVersion(DomainConstants.IOS_MINIMUM_VERSION)
                    .build())
            .setSocialMetaTagParameters(
                    new DynamicLink.SocialMetaTagParameters.Builder()
                            .setTitle(title)
                            .setDescription(description)
                            .setImageUrl(imageUrl)
                            .build())
            .setNavigationInfoParameters(new DynamicLink.NavigationInfoParameters.Builder()
                    .setForcedRedirectEnabled(true)
                    .build());
}