FirebaseRemoteConfigClientException на производстве (Android) - PullRequest
0 голосов
/ 09 марта 2020

Что я сделал до сих пор ...

Я использую Tasks.await блокирующий механизм для вызовов 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 Test Lab . Проблем не было вообще. но когда я выпустил в производство, эта ошибка произошла в некоторых определенных c Mi и Samsung устройствах.

Журнал ошибок

Я смог получить только этот журнал, потому что ошибка возникает в производственном процессе

java .util.concurrent.ExecutionException: com.google.firebase.remoteconfig.FirebaseRemoteConfigClientException: у клиента произошла ошибка при вызове серверной части! на com.google. android .gms.tasks.Tasks.zzb (неизвестный источник: 61) на com.google. android .gms.tasks.Tasks.await (неизвестный источник: 23) на com.maju.myapp .service.SyncWithFirebaseJobIntentService.syncWithFirebaseConfig (SyncWithFirebaseJobIntentService java:. 207) в com.maju.myapp.service.SyncWithFirebaseJobIntentService.onHandleWork (SyncWithFirebaseJobIntentService java:. 55) в androidx.core.app.JobIntentService $ CommandProcessor.doInBackground (JobIntentService . java: 392) в androidx.core.app.JobIntentService $ CommandProcessor.doInBackground (JobIntentService. java: 383) в android .os.AsyncTask $ 3.call (AsyncTask. java: 378) в java .util.concurrent.FutureTask.run (FutureTask. java: 266) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1167) в java .util.concurrent.Thread. $ Worker.run (ThreadPoolExecutor. java: 641) в java .lang.Thread.run (Thread. java: 919) Причина: com.google.firebase.remoteconfig.FirebaseRemoteConfigClientException: у клиента возникла ошибка При вызове бэкэнда! на com.google.firebase.remoteconfig.internal.ConfigFetchHttpClient.fetch (com.google.firebase: firebase-config @@ 19.0.4: 194) на com.google.firebase.remoteconfig.internal.ConfigFetchHandler.fetchFromBackend (com.google. .firebase: firebase-config @@ 19.0.4: 278) на com.google.firebase.remoteconfig.internal.ConfigFetchHandler.fetchFromBackendAndCacheResponse (com.google.firebase: firebase-config @@ 19.0.4: 251) на com.google. .firebase.remoteconfig.internal.ConfigFetchHandler.fetchIfCacheExpiredAndNotThrottled (com.google.firebase: firebase-config @@ 19.0.4: 191) в com.google.firebase.remoteconfig.internal.ConfigFetchHandler.lambda firebase: firebase-config @@ 19.0.4: 160) на com.google.firebase.remoteconfig.internal.ConfigFetchHandler $$ Lambda $ 1.then (неизвестный источник: 4) на com.google. android .gms.tasks. zzf.run (неизвестный источник: 2) ... еще 3Причинено: java. net .ConnectException: не удалось подключиться к firebaseremoteconfig.googleapis.com/2404:6800:4007:809::200a:443 в ком . android .okhttp.internal.io. RealConnection.connectSocket (RealConnection. java: 147) на com. android .okhttp.internal.io.RealConnection.connect (RealConnection. java: 116) на com. android .okhttp.internal.http. StreamAllocation.findConnection (StreamAllocation. java: 186) в com. android .okhttp.internal.http.StreamAllocation.findHealthyConnection (StreamAllocation. java: 128) в com. android .okhttp.internal.http. StreamAllocation.newStream (StreamAllocation. java: 97) на com. android .okhttp.internal.http.HttpEngine.connect (HttpEngine. java: 289) на com. android .okhttp.internal.http. HttpEngine.sendRequest (HttpEngine. java: 232) в com. android .okhttp.internal.hu c .HttpURLConnectionImpl.execute (HttpURLConnectionImpl. java: 465) в com. android .h .hu c .HttpURLConnectionImpl.connect (HttpURLConnectionImpl. java: 131) в com. android .okhttp.internal.hu c .HttpURLConnectionImpl. getOutputStream (HttpURLConnectionImpl. java: 262) в com. android .okhttp.internal.hu c. c .HttpsURLConnectionImpl.getOutputStream (HttpsURLConnectionImpl. java: 30) по адресу com.google.firebase.remoteconfig.internal.ConfigFetchHttpClient.setFetchRequestBody (com.google.firebase@ 32.0 config.basebase- .google.firebase.remoteconfig.internal.ConfigFetchHttpClient.fetch (com.google.firebase: firebase-config @@ 19.0.4: 182) ... еще 9

  1. Почему это так происходит?
  2. Как этого избежать?

(Обратные вызовы делают код уродливым и грязным, для создания чистого кода я предпочитаю Tasks.await)

1 Ответ

0 голосов
/ 30 марта 2020

Я связался с Firebase Support для этой проблемы

Они сказали

Это происходит, если при подключении пользователя устройства возникла проблема, так как наш SDK пытался вызовите выборку данных, и это вызовет ошибку «». У клиента возникла ошибка при вызове серверной части! ». При этом, похоже, что вы делаете правильные вещи при проверке подключения в ваших последних обновлениях, прежде чем вы получите данные удаленной конфигурации. Вы можете проверить нашу реализацию здесь , чтобы вы могли визуализировать наш вызов, который вызовет эту проблему.

Вы можете использовать Android сетевой отладчик для имитации сетевых вызовов , чтобы вы могли перехватить ваш механизм обработки, чтобы убедиться, что ваше реальное устройство имеет правильное подключение при выполнении выборки.

Таким образом, проблема может заключаться в сетевом подключении устройства. Я проверяю подключение к сети в последних обновлениях. но все же я получаю эту ошибку в некоторых устройствах. Причиной может быть низкое качество соединения Inte rnet на данный момент устройств (@ Ta sh Pemhiwa предлагается в комментарии)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...