我有一个即时应用程序和一个Firebase动态链接,该链接重定向到该即时应用程序。
但是,当我单击计算机上的动态链接时,该链接会指向我网站上不存在的页面。
根据Google文档:https://firebase.google.com/docs/dynamic-links/android/create
当用户在桌面Web浏览器上打开动态链接时,他们将加载此URL(除非指定了ofl参数)。如果您没有与链接内容等效的网站,则URL无需指向有效的网站资源。在这种情况下,您应该设置从该URL到例如主页的重定向。
所以我为我的动态链接创建了一个重定向 / share / **到/
而且,当我单击计算机上的链接时,它会进入我网站的主页。 但是我的动态链接也位于我的主页上,因此不再打开即时应用程序。
所以我的问题是:如何配置重定向,以将桌面用户从/ share / **重定向到/,而又不会破坏我的即时应用程序?
答案 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());
}