如何使我的Firebase动态链接在桌面设备上重定向到我的网站,并在移动设备上重定向到我的即时应用程序

9
我有一个即时应用和一个 Firebase 动态链接,该链接重定向到该即时应用。
但是,当我在计算机上单击动态链接时,链接会导致我的网站的不存在页面。
根据 Google 文档:https://firebase.google.com/docs/dynamic-links/android/create 当用户在桌面 Web 浏览器上打开动态链接时,它们将加载此 URL(除非指定了 ofl 参数)。如果您没有与链接内容相对应的 Web 等效项,则 URL 不需要指向有效的 Web 资源。在这种情况下,您应该设置从此 URL 到您的主页的重定向。
因此,我为我的动态链接创建了一个重定向,将 /share/** 重定向到 /。
它起作用了,当我在计算机上单击链接时,我会进入我的网站首页。但是我的动态链接也会引导到我的首页,并且不再打开我的即时应用。
那么我的问题是:如何配置重定向,以便将桌面用户从 /share/** 重定向到 /,而不会破坏我的即时应用?
4个回答

7

@Simon,

可以通过使用相同的构建程序而无需手动链接构建来实现它。

private static final String 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());
}

这应该是被接受的答案 ;D - Javier

6
在桌面上添加“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;
    }
}

可以使用Ivan Karpiuk的答案将ofl参数添加到Firebase Android构建器创建的链接中,无需手动创建完整链接。 - Vadim Kotov

1
我用了一种类似的方法解决了这个问题,但代码更短: 正如其他人所提到的,你必须手动向链接添加一个“ofl”参数。我的方法是:
// Grab link from Firebase builder
guard var longDynamicLink = shareLink.url else { return }
// Parse URL to string
var urlStr = longDynamicLink.absoluteString
// Append the ofl fallback (ofl param specifies a device other than ios or android)
urlStr = urlStr + "&ofl=https://www.meetmaro.com/"
// Convert back to a URL
var urlFinal = URL(string: urlStr)!

// Shorten the url & check for errors
DynamicLinkComponents.shortenURL(urlFinal, options: nil, completion:{ [weak self] url,warnings,error in
        if let _ = error{
            return
        }
        if let warnings = warnings{
            for warning in warnings{
                print("Shorten URL warnings: ", warning)
            }
        }
        guard let shortUrl = url else {return}
        // prompt the user with UIActivityViewController
        self?.showShareSheet(url: shortUrl)
    })

最终的URL可以用于与另一个函数一起呈现可共享的面板,例如:self.showShareSheet(url: finalUrl),这将触发UIActivityViewController。
原创思路来自http://ostack.cn/?qa=168161/
更多关于ofl的信息:https://firebase.google.com/docs/dynamic-links/create-manually?authuser=3#general-params

0
基于@Ivan Karpiuk的回答:

文件:

ofl 除 Android 和 iOS 外其他平台上打开的链接。这对于在桌面上指定不同的行为非常有用,比如显示应用内容/载荷的完整网页(由参数“link”指定),并提供另一个动态链接来安装该应用程序。

添加此DynamicLink.Builder扩展:

private fun DynamicLink.Builder.otherPlatformParameters(): DynamicLink.Builder {
    var longDynamicLink = this.buildDynamicLink().uri.toString()
    longDynamicLink += "&ofl=" + YOUR_URL

    longLink = Uri.parse(longDynamicLink)

    return this
}

将 YOUR_URL 替换为你自己的网址,然后:

FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(...)
        .setDomainUriPrefix(...)
        .setAndroidParameters(...)
        .setIosParameters(...)
        .setSocialMetaTagParameters(...)
        .otherPlatformParameters()
        .buildShortDynamicLink()

所以我们通过createDynamicLink()创建一个长链接,使用otherPlatformParameters()添加ofl,然后将其转换为短链接buildShortDynamicLink()


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