Java 如何创建Firebase短动态链接
我正在Android上用Java成功创建Firebase动态链接。我这样做的代码是在一个按钮单击侦听器中Java 如何创建Firebase短动态链接,java,android,firebase,firebase-dynamic-links,Java,Android,Firebase,Firebase Dynamic Links,我正在Android上用Java成功创建Firebase动态链接。我这样做的代码是在一个按钮单击侦听器中 shareButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLin
shareButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
.setLink(Uri.parse("https://www.mycompany.com/"))
.setDomainUriPrefix("https://mycompany.page.link/test")
.setAndroidParameters(
new DynamicLink.AndroidParameters.Builder("com.mycompany.app")
.setFallbackUrl(Uri.parse("https://www.mycompany.com/"))
.setMinimumVersion(1)
.build())
.buildDynamicLink();
Uri dynamicLinkUri = dynamicLink.getUri();
shareDynamicLink(dynamicLinkUri);
}
});
public void shareDynamicLink(Uri dynamicLink)
{
Intent shareIntent = new Intent();
String msg = "Check this out: " + dynamicLink;
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, msg);
shareIntent.setType("text/plain");
startActivity(shareIntent);
}
这会发送一个长的动态链接,效果很好。现在我想缩短链接,所以我用以下代码替换了“ShareDynamicClink”方法
public void shareDynamicLink(Uri dynamicLink)
{
Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
.setLongLink(dynamicLink)
.buildShortDynamicLink()
.addOnCompleteListener(Objects.requireNonNull(this.getActivity()), new OnCompleteListener<ShortDynamicLink>()
{
@Override
public void onComplete(@NonNull Task<ShortDynamicLink> task)
{
if (task.isSuccessful())
{
// Short link created
Uri shortLink = Objects.requireNonNull(task.getResult()).getShortLink();
Uri flowchartLink = task.getResult().getPreviewLink();
Log.e("DynamicLink", "shortLink: " + shortLink + System.lineSeparator());
Log.e("DynamicLink", "flowChartLink: " + flowchartLink + System.lineSeparator());
Intent shareIntent = new Intent();
String msg = "Check this out: " + shortLink;
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, msg);
shareIntent.setType("text/plain");
startActivity(shareIntent);
}
else
{
Toast.makeText(context, "Failed to share event.", Toast.LENGTH_SHORT).show();
}
}
});
}
我错过了什么?这似乎应该奏效
注意:我不需要长动态链接,只需要短链接。我试着如下更改onclick侦听器
shareButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Task<ShortDynamicLink> dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
.setLink(Uri.parse("https://www.mycompany.com/"))
.setDomainUriPrefix("https://mycompany.page.link/test")
.setAndroidParameters(
new DynamicLink.AndroidParameters.Builder("com.mycompany.app")
.setFallbackUrl(Uri.parse("https://www.mycompany.com/"))
.setMinimumVersion(1)
.build())
.buildShortDynamicLink()
.addOnCompleteListener(Objects.requireNonNull(getActivity()), new OnCompleteListener<ShortDynamicLink>()
{
@Override
public void onComplete(@NonNull Task<ShortDynamicLink> task)
{
if (task.isSuccessful())
{
Uri shortLink = Objects.requireNonNull(task.getResult()).getShortLink();
Uri flowchartLink = task.getResult().getPreviewLink();
Log.e("DynamicLink", "shortLink: " + shortLink + System.lineSeparator());
Log.e("DynamicLink", "flowChartLink: " + flowchartLink + System.lineSeparator());
}
else
{
Log.e("DynamicLink", "Link failed: " + task.getException().getMessage() + System.lineSeparator());
}
}
});
}
});
你打算用长的版本,还是只用短的版本?如果是这样的话,如果在
onClick(…)
方法中使用.buildShortDynamicLink()
而不是.buildDynamicLink()
,而不在shareDynamicLink(…)
中进行转换,该方法是否有效,我的问题源于对编程生成的链接与预定义链接如何工作的误解。在我的例子中,我试图使用来自Firebase控制台的预定义链接(“https://mycompany.page.link/test)作为我生成的链接的前缀。当我试图缩短它时,这在后端造成了某种混乱。我仍然不明白它到底不喜欢什么,但关键是它失败了
因此,生成链接的解决方案是只使用Firebase控制台中的基本前缀-.setDomainPrefix(“https://mycompany.page.link/"). 使用它,我可以创建“.buildShortDynamicLink()”或“buildDynamicLink()”
我在Firebase控制台中创建的链接(“http://mycompany.page.link/test)只能逐字使用--无需生成任何内容。只需将其逐字放入文本消息中,即可完成。我只想要短的一个,但它不允许我使用.buildShortDynamicLink(),因为这需要onClick()的匿名函数中的匿名函数。上面添加了重构onClick()处理程序。仍然收到400错误。我将.setDomainUriPrefix(“)更改为.setDomainUriPrefix(”),并且不再失败。但是我在Firebase控制面板中创建的链接包括“/test”,那么我应该如何使用它呢?我也想到了这一点,但是网络上的一些Google文档/示例在其
域前缀中再次包含“/something”。以下链接有效吗<代码>mycompany.page.link/test/
?注意后面的斜杠。我不是100%确定,但我认为问题是我的一个根本性误解。我在Firebase控制台中创建的动态链接可以而且必须逐字使用——根本不需要在代码中构建链接。该链接不是“前缀”URI。在代码中创建内容必须使用基本URI作为其“前缀”。我想我是在混合隐喻。
shareButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Task<ShortDynamicLink> dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
.setLink(Uri.parse("https://www.mycompany.com/"))
.setDomainUriPrefix("https://mycompany.page.link/test")
.setAndroidParameters(
new DynamicLink.AndroidParameters.Builder("com.mycompany.app")
.setFallbackUrl(Uri.parse("https://www.mycompany.com/"))
.setMinimumVersion(1)
.build())
.buildShortDynamicLink()
.addOnCompleteListener(Objects.requireNonNull(getActivity()), new OnCompleteListener<ShortDynamicLink>()
{
@Override
public void onComplete(@NonNull Task<ShortDynamicLink> task)
{
if (task.isSuccessful())
{
Uri shortLink = Objects.requireNonNull(task.getResult()).getShortLink();
Uri flowchartLink = task.getResult().getPreviewLink();
Log.e("DynamicLink", "shortLink: " + shortLink + System.lineSeparator());
Log.e("DynamicLink", "flowChartLink: " + flowchartLink + System.lineSeparator());
}
else
{
Log.e("DynamicLink", "Link failed: " + task.getException().getMessage() + System.lineSeparator());
}
}
});
}
});
400: Cannot shorten a short Dynamic Link:
https://mycompany.page.link/test?afl=https%3A%2F%2Fwww.mycompany.com%2F&amv=1
&apn=com.mycompany.app&ibi=com.mycompany.app&ifl=https%3A%2F%2F
www.mycompany.com%2F&isi=963543827&ipfl=https%3A%2F%2Fwww.mycompany.com%2F
&link=https%3A%2F%2Fwww.mycompany.com%2F
[https://firebase.google.com/docs/dynamic-links/rest#create_a_short_link_from_parameters]