生产中的 FirebaseRemoteConfigClientException (Android)

2024-04-27

到目前为止我做了什么...

我在用Tasks.await blocking https://developers.google.com/android/guides/tasks#blocking工作线程中的 firebase 调用机制以避免回调。

我正在使用工作线程(JobIntentService)进行一些初始化进程。 JobIntentService 在应用程序打开时启动,并且仅运行一次。下面是我的工作线程代码

    if (isDeviceConnectedToInternet()) {
        Tasks.await(FirebaseConfigHelper.getRemoteConfig().fetchAndActivate()); //error here
        initFirebaseConfigVariables();
        // other codes
    }

//FirebaseConfigHelper.java
public static FirebaseRemoteConfig getRemoteConfig() {
    FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
    return mFirebaseRemoteConfig;
}

我在用

implementation 'com.google.firebase:firebase-config:19.0.4'

关于错误

它在测试设备中运行良好。我在另外 15 台设备上进行了测试Firebase 测试实验室 https://firebase.google.com/docs/test-lab。根本没有任何问题。但是当我发布到生产环境时,这个错误发生在一些特定的 Mi 和 Samsung 设备上。

错误日志

我只能得到这个日志,因为生产中发生错误

java.util.concurrent.ExecutionException:
com.google.firebase.remoteconfig.FirebaseRemoteConfigClientException:
The client had an error while calling the backend!  at
com.google.android.gms.tasks.Tasks.zzb(Unknown Source:61)   at
com.google.android.gms.tasks.Tasks.await(Unknown Source:23) at
com.maju.myapp.service.SyncWithFirebaseJobIntentService.syncWithFirebaseConfig(SyncWithFirebaseJobIntentService.java:207)   at
com.maju.myapp.service.SyncWithFirebaseJobIntentService.onHandleWork(SyncWithFirebaseJobIntentService.java:55)  at
androidx.core.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:392)   at
androidx.core.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:383)   at
android.os.AsyncTask$3.call(AsyncTask.java:378) at
java.util.concurrent.FutureTask.run(FutureTask.java:266)    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at
java.lang.Thread.run(Thread.java:919)Caused by:
com.google.firebase.remoteconfig.FirebaseRemoteConfigClientException:
The client had an error while calling the backend!  at
com.google.firebase.remoteconfig.internal.ConfigFetchHttpClient.fetch(com.google.firebase:firebase-config@@19.0.4:194)  at
com.google.firebase.remoteconfig.internal.ConfigFetchHandler.fetchFromBackend(com.google.firebase:firebase-config@@19.0.4:278)  at
com.google.firebase.remoteconfig.internal.ConfigFetchHandler.fetchFromBackendAndCacheResponse(com.google.firebase:firebase-config@@19.0.4:251)  at
com.google.firebase.remoteconfig.internal.ConfigFetchHandler.fetchIfCacheExpiredAndNotThrottled(com.google.firebase:firebase-config@@19.0.4:191)    at
com.google.firebase.remoteconfig.internal.ConfigFetchHandler.lambda$fetch$0(com.google.firebase:firebase-config@@19.0.4:160)    at
com.google.firebase.remoteconfig.internal.ConfigFetchHandler$$Lambda$1.then(Unknown
Source:4)   at com.google.android.gms.tasks.zzf.run(Unknown
Source:2)   ... 3 moreCaused by: java.net.ConnectException: Failed to
connect to
firebaseremoteconfig.googleapis.com/2404:6800:4007:809::200a:443    at
com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:147)    at
com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)  at
com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186) at
com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)  at
com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)   at
com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)    at
com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)    at
com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)   at
com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)   at
com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:262)   at
com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:219) at
com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:30)  at
com.google.firebase.remoteconfig.internal.ConfigFetchHttpClient.setFetchRequestBody(com.google.firebase:firebase-config@@19.0.4:321)    at
com.google.firebase.remoteconfig.internal.ConfigFetchHttpClient.fetch(com.google.firebase:firebase-config@@19.0.4:182)  ...
9 more
  1. 为什么会发生这种情况?
  2. 如何避免呢?

(回调使代码变得丑陋和混乱,为了使代码干净,我更喜欢 Tasks.await)


我联系了 Firebase 支持来解决此问题

他们说

如果设备用户的连接出现问题(如我们的情况),则会发生这种情况 SDK尝试调用获取数据,会导致“客户端 调用后端时出错!“ 错误。这样看来 就像您在验证连接性时做了正确的事情一样 在获取远程配置数据之前您最近的更新。你可以 检查我们的实施情况here https://cs.opensource.google/firebase-sdk/firebase-android-sdk/+/master:firebase-config/src/main/java/com/google/firebase/remoteconfig/internal/ConfigFetchHttpClient.java;drc=cfaeae14af2c457c3fb07da4f217f33d45b48a1a;l=196你可以想象我们的通话 这会触发这个问题。

你可以使用Android 网络调试器 https://developer.android.com/studio/profile/network-profiler来模拟 网络调用,这样你就可以捕获你的处理机制以确保 您的实际设备在执行提取时具有正确的连接。

因此问题可能出在设备的网络连接上。我在最近的更新中检查了网络连接。但我仍然在某些设备上遇到此错误。原因可能是设备当前的互联网连接质量较差(@Tash Pemhiwa 在评论中建议)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生产中的 FirebaseRemoteConfigClientException (Android) 的相关文章

  • Firebase FCM 通知图像不会显示

    我在我的项目中使用 FCM 当尝试使用 firebase 撰写通知 功能测试传入通知时 我将标题 正文和图像 URL 添加到消息中 它显示了它应该是什么样子 丰富的通知与图像 但发送给我的通知是正常的 没有任何图像 这是 firebase
  • kotlin中的三元运算符[重复]

    这个问题在这里已经有答案了 我可以用java写 int i 10 String s i 10 Ten Empty 即使我可以将它传递到方法参数中 callSomeMethod i 10 Ten Empty 如何将其转换为 kotlin 在
  • 如何在android中直接从.zip文件读取文件而不解压它

    过去几个月我一直在研究 android 现在我的问题是读取放在 sdcard 上的 zip 文件 我已经成功完成了将 zip 文件下载到 SD 卡上的编码 我已将 img zip 文件下载到 SD 卡上 此 img zip 包含 5 个图像
  • 修改 Settings.apk 以与 Project Glass 配合使用

    我正在尝试构建要在 Google I O 的 Hacking Glass 会议上在 Glass 上使用的 Settings apk 他提到 为了让设置 apk 正常工作 需要修改清单中的一行 这是 AOSP 清单 http pastebin
  • 从 Kotlin 中的字符串中删除字符

    我正在尝试创建一个使用 Kotlin 中的字符串的 Android 计算器 如果逗号 或负数 已经包含一个 我不知道如何删除它 这是我的代码 它正确添加逗号 但如果用户再次单击则不会删除它 if buClickValue contains
  • Android - Firebase - 保存新数据而不覆盖旧数据

    创建此问题是因为我之前的问题包含 2 个问题 而不是将其缩小到 1 Aim 用户将能够存储新数据而不会覆盖之前提交的数据 描述 目前 当用户输入新报告时 事件报告节点中的用户事件报告数据将被覆盖 用户发送的旧事件报告中的数据应与新数据一起保
  • 无法构建 Objective-C 模块“Firebase”

    我收到此错误的原因是import Firebase 无法构建 Objective C 模块 Firebase Xcode 还抱怨 FirebaseAnalytics 说 找不到 FirebaseAnalytics FirebaseAnaly
  • 在 firebase 中,使用单独的端点对多对多关系进行建模是一个好主意吗?

    假设我有一个典型的用户和组数据模型 其中用户可以属于多个组 并且一个组可以拥有多个用户 在我看来 Firebase 文档 https www firebase com docs web guide structuring data html
  • 在 cURL 命令和 postman 中的 Firebase Cloud Messaging 中获取无效令牌

    伙计们 我正在尝试获取有关应用程序实例的信息 并且我还尝试将应用程序实例订阅到 Google Cloud Messaging 主题 但问题是每当我尝试使用server key它给我带来了错误invalid token当我尝试使用web ap
  • 如何使用 Mikephil 饼图从项目中删除小数位

    这是整数的静态值 private int upload 14 bill 15 unbill 85 total 100 unupload 12 sign 10 unsign 90 print 12 unprint 88 设置饼图条目 Arra
  • 如何使用GDK在卡片上显示静态地图?

    在 Mirror API 中我们可以使用类似的东西 img src height 360 width 240
  • Cordova Android 应用程序中的网页不可用

    编辑 我一直在解决这个问题并回顾我的所有步骤 我很乐意缩小这个问题的规模 并在令人困惑的情况下获得更多确切的细节 目前 我觉得 Keycloak 似乎只想将我重定向到 https 据我所知 这应该是 Wildfly 服务器配置问题 编辑 我
  • android拦截最近的应用程序按钮

    我有一个针对儿童的应用程序 我不希望他们能够单击 最近使用的应用程序 按钮 看起来像两个矩形叠在一起的按钮 我正在负责捕获后退按钮和主页按钮 并且我已经搜索并阅读了很多有关尝试捕获 最近的应用程序 按钮的信息 但大多数人说你不能 或者他们的
  • android tabwidget意图选项卡刷新每次点击

    我想使用具有意图的子选项卡创建一个选项卡 以便当用户单击选项卡意图时刷新 每次用户单击选项卡时 我想刷新并调用子意图选项卡的 oncreate 方法 public class Tabs3 extends TabActivity Overri
  • 带有 DialogFragment 的上下文操作栏

    我一直在尝试实现一个上下文操作栏和一个对话框片段 类似于android中的下载小部件 我尝试过设置android windowActionModeOverlay主题要真实 但这似乎不起作用 有什么办法我可以实现它吗 您在屏幕截图中看到的下载
  • 现已弃用使用 Google Places API 获取多种类型

    谷歌最近宣布 自 2016 年 2 月 16 日起 types 参数已被弃用 取而代之的是新的类型参数 每个搜索请求仅支持一种类型 我的问题是 现在有什么方法 不使用已弃用的参数 从单个 API 调用中获取多个地点类型吗 谢谢 None
  • Android Studio同时为同一个项目构建两个应用程序

    我正在使用 Android Studio v0 5 9 制作一个应用程序 它有一个图书馆项目作为依赖 但是 每次我运行该项目时 都会将两个具有相同名称和图标的 APK 部署到我的设备上 第一个 apk app 包含我的主模块 而第二个是库项
  • Gradle 找不到 Android Compose 编译器

    我对这个问题感到非常困惑 我的 gradle 文件中有以下几行 implementation androidx compose runtime runtime 1 0 0 alpha04 implementation androidx co
  • ContactsContract.CommonDataKinds.Phone.CONTENT_URI 与 ContactsContract.Contacts.CONTENT_URI

    In 如何在android中检索联系人列表 https stackoverflow com questions 16124034 how to retrieve the list of contacts in android我看到代码允许您
  • Android 如何在按下或聚焦时使 TextView 文本变为粗体

    我的布局中有一个文本视图 我的要求是当我按下或聚焦它时 文本应该是粗体 否则应该使用普通字体 我该如何实施 使用下面的代码 TextView name TextView findViewById R id TextView01 name h

随机推荐

  • 使用 jQuery 将播放/暂停/结束功能绑定到 HTML5 视频

    我正在尝试绑定play pause and ended使用 jQuery 的事件但有一个问题 当我右键单击视频并选择播放或暂停时 图标会正确更改 当我单击播放按钮时 它会更改为暂停 但如果我单击暂停按钮继续播放视频 它不会更改为再次播放 谁
  • 为什么数组前需要加星号?

    我不知道这是哈希问题还是数组问题 但我不明白为什么第三个示例中需要星号 才能获得填充数据的哈希 如果没有它 它会输出一个空的哈希值 coding utf 8 require pp pp first name Shane last name
  • JavaFX 虚拟键盘不显示

    我是javafx新手 我制作了一个简单的应用程序表单 它有 锚定窗格 Pane 文本域 我在触摸屏设备上运行该应用程序 但虚拟键盘不显示 文本字段已经聚焦 我使用的是 JDK 8u25 场景生成器 2 0 根据我读到的 http docs
  • 增加 SQL 命令的命令超时

    我有一个小问题 希望有人能给我一些建议 我正在运行一个 SQL 命令 但由于数据量很大 该命令似乎需要大约 2 分钟才能返回数据 但默认的连接时间是 30 秒 我如何增加这个时间 并将其应用到这个命令 public static DataT
  • 如何保留操作/标题栏但隐藏通知栏

    如何保留操作 标题栏但隐藏通知栏 这个问题看起来已经得到了回答 但我发现的大多数答案都隐藏了操作栏和通知栏 我希望能够保留操作 标题栏 我得到的最好的方法是隐藏两者并使用线性布局来显示自定义操作 标题栏 但我想要一个系统生成的 另外 是否可
  • 是否可以用 R 编写音乐并播放? (Mac OS X)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有一种方法可以用 r 编写脚本来创作音乐 就像编码程序 SuperCollider 或编码
  • 求解序言中极其简单的方程:A = B + C?

    我有一个非常简单的方程 我希望能够在序言中求解 A B C 我希望能够编写一个谓词来表达这种关系 它可以处理任何一个未实例化的参数 无需推广到更复杂的关系或方程 myEquation A B C something 我可以使用以下语义进行调
  • C# 中的多个 SQL 查询将变量作为列返回

    我正在开展一个创建注册系统的学校项目 我选择的数据库方法是使用 T SQL 因为它是我已经熟悉的东西 我正在使用下面的代码来查询数据库 public void button3 Click object sender EventArgs e
  • Python:在 Plotly 中的图形上方创建注释空间

    我想在图中创建额外的注释空间 请参阅附图中的绿色区域 目前 y 轴定义了绘图的高度 我可以将绘图推到超出 y max 限制 在某个点 在图像中标记为红色 之后隐藏 y 轴吗 我尝试避免轴到达 评论部分 绿色 谢谢你 在此输入图像描述 htt
  • Parsec-Parser 工作正常,但是可以做得更好吗?

    我尝试这样做 解析以下形式的文本 一些文本 0 0 0 一些文本 0 0 0 0 0 0 更多文本 0 0 0 进入一些数据结构的列表 内部 一些文本 外部 0 0 0 内部 一些文本 外部 0 0 0 外部 0 0 0 内部 更多文本 外
  • 用C#排列桌面图标

    好吧 伙计们 这就是我想要实现的目标 我希望所有无序的桌面图标在单击按钮时都排列在桌面的左上角 这是我正在使用的代码 DllImport user32 dll private static extern IntPtr GetDesktopW
  • jQuery UI 选项卡 - 如果相应的内容面板为空,如何删除选项卡列表项?

    我正在使用 cms 系统的基本 jQuery UI 选项卡设置 我想知道如果具有相应 id 的内容面板为空 是否可以隐藏导航选项卡 HTML div ul li a href tabs 1 Nunc tincidunt a li li a
  • Active Admin:如何设置页面标题?

    这看起来应该相对简单 但我在寻找答案时遇到了一些麻烦 如何在 ActiveAdmin 中设置页面标题 合并答案并添加一点 这大部分都在维基百科上的这个页面 https github com gregbell active admin wik
  • 在 Win7 上捆绑 Meteor 应用程序时出现 ENOTEMPTY 和 EPERM 异常? :(

    Help 我已经使用 Meteor 工作了大约两个月了 在我的 OSX 家庭环境中一切都进展顺利 但我最近将其中一些代码带入了工作中的 Windows 7 环境中 而 Meteor 在 Windows 上的行为却有所不同 具体来说 代码捆绑
  • 在 Prolog、尾递归中计算斐波那契数列

    我想在 Prolog 中以递归尾部模式计算斐波那契数列 fibonacci 0 0 fibonacci 1 1 fibonacci N Result fibonacci N 1 0 fibonacci N Result Count Coun
  • 什么是可用于 Web 应用程序的跨浏览器和跨操作系统安全键盘快捷键?

    我正在开发一个相当大的 Web 应用程序 对于一些常见任务使用热键可能是一个好主意 然而 我发现对于所有不同的浏览器和操作系统来说 找到安全的组合键是一个问题 For example Chrome has such a long list
  • phpunit 避免模拟的构造函数参数

    有什么方法可以避免 phpunit 调用模拟对象的构造函数 否则我需要一个模拟对象作为构造函数参数 另一个模拟对象作为构造函数参数 等等 api 似乎是这样的 getMock className methods array array ar
  • localizedStringWithFormat 如何工作?

    请注意 我不是在问NSLocalizedString 宏 我问的是NSString类函数 instancetype localizedStringWithFormat NSString format 这是两件不同的事情 Question 我
  • 如何提供准备好的 git 提交消息?

    按照惯例 我在 git 中创建故事分支 以在其中包含 Jira 问题 ID 例如FOO 1001 我有一个脚本可以帮我做到这一点 现在 我准备了另一个脚本 用于从 Jira API 获取 FOO 1001 的标题 我想在输入时实现这一目标
  • 生产中的 FirebaseRemoteConfigClientException (Android)

    到目前为止我做了什么 我在用Tasks await blocking https developers google com android guides tasks blocking工作线程中的 firebase 调用机制以避免回调 我正