问题
creating a dynamic link
  DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLink(Uri.parse("http://shaharapp.in/"))
            .setDynamicLinkDomain("https://cuh8g.app.goo.gl/")
            // Open links with this app on Android
            .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build())
            // Open links with com.example.ios on iOS
            .buildDynamicLink();
     dynamicLinkUri = dynamicLink.getUri();
after this, i get a long dynamic link. passing this dynamicLinkUri to shortLinkTask
 Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLongLink(dynamicLinkUri)
            .buildShortDynamicLink();
    shortLinkTask.addOnCompleteListener(new OnCompleteListener<ShortDynamicLink>() {
        @Override
        public void onComplete(@NonNull Task<ShortDynamicLink> task) {
            if (task.isSuccessful()) {
                Uri shortLink = task.getResult().getShortLink();
                link_txt.setText(shortLink.toString());
            }
            else {
                ViewGroup container = (ViewGroup) findViewById(R.id.snackbar_layout);
                Snackbar.make(container, "error", Snackbar.LENGTH_SHORT).show();
            }
        }
    });
This task is not completing, after debugging I got this
com.google.android.gms.common.api.ApiException: 7: Bad Request class com.google.android.gms.common.api.ApiException
回答1:
What is the long link you are getting? I suggest trying long link and ensure the link works correctly.
Also, append &d=1 to long link. Such link will navigate to debug page with possible errors/warnings displayed.
Looking at your code, one possible reason for failure is format of the domain. See example https://firebase.google.com/docs/dynamic-links/android/create . Domain expected to be string containing only domain, without https scheme:
.setDynamicLinkDomain("abc123.app.goo.gl")
    回答2:
Make sure your .setDynamicLinkDomain("https://abc123.app.goo.gl") contains "https://"
回答3:
My Solution when you don't want to downgrade Firebase dependencies
String builtLink = new LinkBuilder().setDomain("example.page.link") .setLink("https://www.example.com/someresource") .setSd(socialTagDesc) .setSt(socialTagTitle) .setSi("image link") .setApn("android app package") .setAmv("android minimum version") .setIbi("ios app package") .setImv("ios min version") .setIsi("ios app id").build(); DynamicLink.Builder builder = FirebaseDynamicLinks.getInstance().createDynamicLink() .setLongLink(Uri.parse(builtLink));
    builder.buildShortDynamicLink()
            .addOnSuccessListener(listener)
            .addOnFailureListener(failureListener);
public static class LinkBuilder{
    private String domain;
    private String link;
    private String apn;
    private String amv;
    private String ibi;
    private String imv;
    private String isi;
    private String st;
    private String sd;
    private String si;
    public String getURLEncode(String input){
        try
        {
            return URLEncoder.encode(input, "UTF-8");
        }
        catch (Exception ex){
            Timber.e(ex);
        }
        return input;
    }
    public LinkBuilder setDomain(String domain) {
        this.domain = domain;
        return this;
    }
    public LinkBuilder setLink(String link) {
        this.link = getURLEncode(link);
        return this;
    }
    public LinkBuilder setApn(String apn) {
        this.apn = apn;
        return this;
    }
    public LinkBuilder setAmv(String amv) {
        this.amv = amv;
        return this;
    }
    public LinkBuilder setIbi(String ibi) {
        this.ibi = ibi;
        return this;
    }
    public LinkBuilder setImv(String imv) {
        this.imv = imv;
        return this;
    }
    public LinkBuilder setIsi(String isi) {
        this.isi = isi;
        return this;
    }
    public LinkBuilder setSt(String st) {
        this.st = getURLEncode(st);
        return this;
    }
    public LinkBuilder setSd(String sd) {
        this.sd = getURLEncode(sd);;
        return this;
    }
    public LinkBuilder setSi(String si) {
        this.si = getURLEncode(si);;
        return this;
    }
    public String build(){
        return String.format("https://%s/?link=%s&apn=%s&amv=%s&ibi=%s&imv=%s&isi=%s&st=%s&sd=%s&si=%s"
                ,domain, link, apn, amv, ibi, imv,isi,st,sd,si);
    }
}
    来源:https://stackoverflow.com/questions/45783907/shortdynamiclink-is-not-generating-short-link-for-dynamic-links