【问题标题】:Short Dynamic link error com.google.android.gms.common.api.ApiException: 8:短动态链接错误 com.google.android.gms.common.api.ApiException: 8:
【发布时间】:2018-09-03 14:55:39
【问题描述】:

我正在尝试让 Firebase 动态链接在我的应用中工作。

我有以下功能

    //long
    String link = "http://www.blessd.mobi";
    DynamicLink m = FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLink(Uri.parse(link))
            .setDynamicLinkDomain("blessd.page.link")
            .setAndroidParameters(
                    new DynamicLink.AndroidParameters.Builder("mobi.blessd")
                            .build())
            .buildDynamicLink();
    Uri t = m.getUri();
    String ll = t.toString();
    Log.d(TAG + " long link:", ll);

    //short
    Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLink(Uri.parse("http://www.blessd.mobi"))
            .setDynamicLinkDomain("blessd.page.link")
            .setAndroidParameters(
                    new DynamicLink.AndroidParameters.Builder("mobi.blessd")
                            .build())
            .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();
                        String sl = shortLink.toString();
                        String fcl = flowchartLink.toString();
                        Log.d(TAG + " short link:", sl);
                        Log.d(TAG + " flow chat link:", fcl);
                    } else {
                        // Error
                        // ...
                        Log.d(TAG + " short links:", "problem");
                        Exception exception = task.getException();
                        Log.e("TAG", "Short Dynamic link error", exception);
                    }
                }
            });

我成功生成了一个长链接。我已经在网络浏览器的调试模式下调试了长链接 没有错误。

但是短链接没有运行,我收到以下错误:

09-03 16:14:06.816 4551-4551/? E/TAG:短动态链接错误 com.google.android.gms.common.api.ApiException:8:

谢谢。

【问题讨论】:

    标签: android firebase firebase-dynamic-links


    【解决方案1】:

    Firebase 团队能够重现该问题,并已将此问题报告给他们的团队。

    目前,此问题有两种解决方法:

    • 使用动态链接版本 16.0.1 能够生成简短的动态链接: implementation 'com.google.firebase:firebase-core:16.0.1'
      implementation 'com.google.firebase:firebase-dynamic-links:16.0.1'

    • 坚持使用16.1.1版本,先创建长链接,然后尝试使用guide缩短长动态链接。

    【讨论】:

    • 您好,感谢您的解决方案。当我使用 16.0.1 时,我收到以下错误无法通知依赖解析侦听器。 [[16.0.0,16.0.0], [16.0.2,16.0.2]] 的各种其他库正在请求库 com.google.android.gms:play-services-measurement-base,但解析为16.0.2。禁用插件并使用 ./gradlew :app:dependencies 检查您的依赖关系树。然后我将 16.0.3 用于两个库,它仍然给我上述异常 8 错误。
    • 您使用其他 Firebase 库吗?也许,你必须降级别人。至少,在这种情况下,firebase-core 和 firebase-dynamic-links 都应该有 16.0.1。您可以使用命令 ./gradlew -q dependencies app:dependencies 来查看您的应用程序的哪个部分需要 play-services-measurement-base 并降级它。
    • 我在我的项目中使用这些行: implementation 'com.google.firebase:firebase-core:16.0.1' implementation 'com.google.firebase:firebase-config:16.0.0' implementation ' com.google.firebase:firebase-messaging:17.1.0' 实施 'com.google.firebase:firebase-dynamic-links:16.0.1'
    • 对不起最后一件事。如果我想知道依赖关系,我将在哪里或如何使用 ./gradlew 命令。我正在使用 Android 工作室。
    • 还是不行。你能提供更多信息吗?您在顶级 build.gradle 中使用的是什么版本的 com.google.gms:google-services:?你在使用com.google.android.gms:play-services-auth 依赖吗?在这种情况下是哪个版本?提前致谢
    【解决方案2】:

    使用我的解决方案来构建您的短链接并避免降级 Firebase。

               String builtLink = new LinkBuilder().setDomain("example.page.link")
               .setLink("your link goes here")
               .setSd(socialTagDesc)
               .setSt(socialTagTitle)
               .setSi("social image link here")
               .setApn("android app pkg")
               .setAmv("android min version")
               .setIbi("ios app pkg")
               .setImv("ios app min version")
               .setIsi("iosid number").build();
    
        DynamicLink.Builder builder =  FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLongLink(Uri.parse(builtLink));
    
        builder.buildShortDynamicLink()
                .addOnSuccessListener(listener)
                .addOnFailureListener(failureListener);
    
    
    
    
    
     public 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);
        }
    }
    

    【讨论】:

      【解决方案3】:

      解决方案:

      第一步:检查更新版本implementation 'com.google.android.gms:play-services-auth:18.1.0'

      第 2 步:检查链接、domainUriPrefix 应用级别和 Firebase 控制台动态链接设置

      第 3 步:检查 sha1 密钥

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-19
        • 1970-01-01
        • 2020-12-17
        相关资源
        最近更新 更多