'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