'Firebase Dynamic Link Cannot shorten a short Dynamic Link
I referred many questions in site ,but I can't still getting trouble to generate short dynamic link using Firebase Dynamic Links.
I am trying to generate short dynamic link from a dynamic link. After generating dynamic link its work perfectly and shareable to any other apps. But can't generating short link from that dynamic link.
Its shows error like this in logcat :
com.google.android.gms.common.api.ApiException: 400: Cannot shorten a short Dynamic Link: https://onestickers.page.link/Stickers?sd=Stickers%20for%20WhatsApp%20-%20WAStickerApps&si=https%3A%2F%2Fonestickers.com%2Fimg%2Fmain-logo.png&st=One%20Stickers&amv=11&apn=stickersforwhatsapp.wastickerapps&link=https%3A%2F%2Fapi.wastickerapp.co%3Fpackid%3D201
I am creating dynamic link using code:
private void createShareUri(String pid) {
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("api.wastickerapp.co")
.appendQueryParameter("packid", pid);
DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance()
.createDynamicLink()
.setDomainUriPrefix("https://onestickers.page.link/Stickers")
.setAndroidParameters(new DynamicLink.AndroidParameters.Builder()
.setMinimumVersion(11)
.build())
.setSocialMetaTagParameters(
new DynamicLink.SocialMetaTagParameters.Builder()
.setTitle("One Stickers")
.setDescription("Stickers for WhatsApp - WAStickerApps")
.setImageUrl(Uri.parse("https://onestickers.com/img/main-logo.png"))
.build())
.setLink(builder.build())
.buildDynamicLink();
}
This will be generate dynamic link successfully: https://onestickers.page.link/Stickers?sd=Stickers%20for%20WhatsApp%20-%20WAStickerApps&si=https%3A%2F%2Fonestickers.com%2Fimg%2Fmain-logo.png&st=One%20Stickers&amv=11&apn=stickersforwhatsapp.wastickerapps&link=https%3A%2F%2Fapi.wastickerapp.co%3Fpackid%3D201
And also its working if I will send this link to any apps via Intent!
But after that I am trying to generate short link:
private void createShortDynamicLink(Uri uri) {
FirebaseDynamicLinks.getInstance()
.createDynamicLink()
.setLongLink(uri)
.buildShortDynamicLink()
.addOnCompleteListener(this, task -> {
if (task.isSuccessful()) {
Uri shortLink = Objects.requireNonNull(task.getResult()).getShortLink();
//Uri flowchartLink = task.getResult().getPreviewLink();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "Stickers Link");
intent.putExtra(Intent.EXTRA_TEXT, shortLink.toString());
startActivity(intent);
}
}).addOnFailureListener(mContext, e -> Log.e("DynamicLink>>>", Log.getStackTraceString(e)));
}
And then Its shows logcat!:
E/DynamicLink>>>: com.google.android.gms.common.api.ApiException: 400: Cannot shorten a short Dynamic Link: https://onestickers.page.link/Stickers?sd=Stickers%20for%20WhatsApp%20-%20WAStickerApps&si=https%3A%2F%2Fonestickers.com%2Fimg%2Fmain-logo.png&st=One%20Stickers&amv=11&apn=stickersforwhatsapp.wastickerapps&link=https%3A%2F%2Fapi.wastickerapp.co%3Fpackid%3D201 [https://firebase.google.com/docs/dynamic-links/rest#create_a_short_link_from_parameters]
at com.google.android.gms.common.api.internal.TaskUtil.setResultOrApiException(Unknown Source:6)
at com.google.firebase.dynamiclinks.internal.zzi.zza(Unknown Source:4)
at com.google.firebase.dynamiclinks.internal.zzn.dispatchTransaction(Unknown Source:10)
at com.google.android.gms.internal.firebase_dynamic_links.zzb.onTransact(Unknown Source:12)
at android.os.Binder.execTransact(Binder.java:697)
Please give suggestion if there is any other techniques in android.
Solution 1:[1]
try using the original url https://app.page.link/ instead of https://app.page.link/ChosenName
in your case it'll be: setDomainUriPrefix("https://onestickers.page.link/") instead of setDomainUriPrefix("https://onestickers.page.link/Stickers")
Solution 2:[2]
Create short link also when you create long link like this
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("api.wastickerapp.co")
.appendQueryParameter("packid", pid);
FirebaseDynamicLinks.getInstance().createDynamicLink()
.setLink(builder.build())
.setDomainUriPrefix("https://onestickers.page.link/Stickers")
.setAndroidParameters(
new DynamicLink.AndroidParameters.Builder()
.setMinimumVersion(11)
.build())
.setSocialMetaTagParameters(
new DynamicLink.SocialMetaTagParameters.Builder()
.setTitle("One Stickers")
.setDescription("Stickers for WhatsApp - WAStickerApps")
.setImageUrl(Uri.parse("https://onestickers.com/img/main-logo.png"))
.build())
.buildShortDynamicLink()
Solution 3:[3]
the short link proccess generate a placeholder after the domain your dynamic
links are hosted in https://app.page.link/**{placeholder}**
so if you specify a one, Stickers
in your case you can't short that links as it try to generate the placeholder
but find that it already specify, so it throw the error
as the pattern has to be https://app.page.link/**{route}**
and not something like that https://app.page.link/**{route}**/**{sub-route}**
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Sezi Mik |
Solution 2 | Jignesh Mayani |
Solution 3 | ABDERRAHMANE OUALI |