Firebase 和 Facebook 的 ExceptionInInitializerError
ExceptionInInitializerError with Firebase and Facebook
我最近将 firebase 升级到最新版本,现在使用我们的服务器生成的自定义令牌进行身份验证。我还在对我的 firebase 实例进行自定义初始化,如此处 https://firebase.googleblog.com/2017/03/take-control-of-your-firebase-init-on.html 所述。初始化是在我的应用程序 onCreate 方法的第 3 行完成的(在调用 super 并设置静态实例变量之后),所以它尽早完成。
我得到以下异常,但它不能始终如一地重现,所以它似乎是 firebase 和 facebook sdks 之间的某种竞争条件。
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
java.lang.ExceptionInInitializerError
at com.google.firebase.perf.internal.RemoteConfigManager.zzcb(Unknown Source)
at com.google.firebase.perf.internal.FeatureControl.<init>(Unknown Source)
at com.google.firebase.perf.internal.FeatureControl.zzar(Unknown Source)
at com.google.firebase.perf.internal.GaugeManager.<init>(Unknown Source)
at com.google.firebase.perf.internal.GaugeManager.zzbf(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzat.<init>(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzat.zza(Unknown Source)
at com.google.firebase.perf.network.FirebasePerfUrlConnection.instrument(Unknown Source)
at com.facebook.GraphRequest.createConnection(GraphRequest.java:1410)
at com.facebook.GraphRequest.toHttpConnection(GraphRequest.java:1070)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1158)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1134)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1118)
at com.facebook.GraphRequest.executeAndWait(GraphRequest.java:1093)
at com.facebook.GraphRequest.executeAndWait(GraphRequest.java:987)
at com.facebook.internal.FetchedAppSettingsManager.getAppSettingsQueryResponse(FetchedAppSettingsManager.java:207)
at com.facebook.internal.FetchedAppSettingsManager.access0(FetchedAppSettingsManager.java:47)
at com.facebook.internal.FetchedAppSettingsManager.run(FetchedAppSettingsManager.java:122)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.coffeemeetsbagel. Make sure to call FirebaseApp.initializeApp(Context) first.
at com.google.firebase.FirebaseApp.getInstance(com.google.firebase:firebase-common@@16.0.4:240)
at com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance(Unknown Source)
at com.google.firebase.perf.internal.RemoteConfigManager.<init>(Unknown Source)
at com.google.firebase.perf.internal.RemoteConfigManager.<clinit>(Unknown Source)
at com.google.firebase.perf.internal.RemoteConfigManager.zzcb(Unknown Source)
at com.google.firebase.perf.internal.FeatureControl.<init>(Unknown Source)
at com.google.firebase.perf.internal.FeatureControl.zzar(Unknown Source)
at com.google.firebase.perf.internal.GaugeManager.<init>(Unknown Source)
at com.google.firebase.perf.internal.GaugeManager.zzbf(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzat.<init>(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzat.zza(Unknown Source)
at com.google.firebase.perf.network.FirebasePerfUrlConnection.instrument(Unknown Source)
at com.facebook.GraphRequest.createConnection(GraphRequest.java:1410)
at com.facebook.GraphRequest.toHttpConnection(GraphRequest.java:1070)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1158)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1134)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1118)
at com.facebook.GraphRequest.executeAndWait(GraphRequest.java:1093)
at com.facebook.GraphRequest.executeAndWait(GraphRequest.java:987)
at com.facebook.internal.FetchedAppSettingsManager.getAppSettingsQueryResponse(FetchedAppSettingsManager.java:207)
更新 删除 firebase 性能插件似乎可以解决问题;但是,我想要插件提供的自动跟踪,所以我想找到一个允许我同时使用 firebase 和 facebook
的解决方案
Facebook 表示他们的 android sdk 目前与 firebase 性能插件不兼容。
问题的原因似乎是 Facebook SDK 在 Firebase Performance 初始化之前尝试进行网络请求。我找到了一个强制 Firebase 在 facebook 之前初始化的解决方案。
- 在您的 Android 清单中删除 Firebase 和 Facebook 的 "init providers"。这些在每个 SDK 中用于自动初始化每个库。
2.You 然后可以从 Application onCreate 方法手动初始化每个库,在 Facebook 之前调用 Firebase。
在你的AndroidManifest.xml文件中:
<!--Init Firebase manually in Application class-->
<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:authorities="${applicationId}.firebaseinitprovider"
tools:node="remove"
/>
<!--Init Facebook manually in Application class-->
<provider
android:name="com.facebook.internal.FacebookInitProvider"
android:authorities="${applicationId}.FacebookInitProvider"
tools:node="remove"/>
在你的申请中class
@Override
public void onCreate() {
super.onCreate();
FirebaseApp.initializeApp(this);
FacebookSdk.sdkInitialize(this);
}
我不认为这是一个很好的解决方案,但它现在可以完成工作,直到 Facebook 或 Firebase 更新他们的库以在应用程序启动期间停止此冲突。
我最近将 firebase 升级到最新版本,现在使用我们的服务器生成的自定义令牌进行身份验证。我还在对我的 firebase 实例进行自定义初始化,如此处 https://firebase.googleblog.com/2017/03/take-control-of-your-firebase-init-on.html 所述。初始化是在我的应用程序 onCreate 方法的第 3 行完成的(在调用 super 并设置静态实例变量之后),所以它尽早完成。
我得到以下异常,但它不能始终如一地重现,所以它似乎是 firebase 和 facebook sdks 之间的某种竞争条件。
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
java.lang.ExceptionInInitializerError
at com.google.firebase.perf.internal.RemoteConfigManager.zzcb(Unknown Source)
at com.google.firebase.perf.internal.FeatureControl.<init>(Unknown Source)
at com.google.firebase.perf.internal.FeatureControl.zzar(Unknown Source)
at com.google.firebase.perf.internal.GaugeManager.<init>(Unknown Source)
at com.google.firebase.perf.internal.GaugeManager.zzbf(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzat.<init>(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzat.zza(Unknown Source)
at com.google.firebase.perf.network.FirebasePerfUrlConnection.instrument(Unknown Source)
at com.facebook.GraphRequest.createConnection(GraphRequest.java:1410)
at com.facebook.GraphRequest.toHttpConnection(GraphRequest.java:1070)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1158)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1134)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1118)
at com.facebook.GraphRequest.executeAndWait(GraphRequest.java:1093)
at com.facebook.GraphRequest.executeAndWait(GraphRequest.java:987)
at com.facebook.internal.FetchedAppSettingsManager.getAppSettingsQueryResponse(FetchedAppSettingsManager.java:207)
at com.facebook.internal.FetchedAppSettingsManager.access0(FetchedAppSettingsManager.java:47)
at com.facebook.internal.FetchedAppSettingsManager.run(FetchedAppSettingsManager.java:122)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.coffeemeetsbagel. Make sure to call FirebaseApp.initializeApp(Context) first.
at com.google.firebase.FirebaseApp.getInstance(com.google.firebase:firebase-common@@16.0.4:240)
at com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance(Unknown Source)
at com.google.firebase.perf.internal.RemoteConfigManager.<init>(Unknown Source)
at com.google.firebase.perf.internal.RemoteConfigManager.<clinit>(Unknown Source)
at com.google.firebase.perf.internal.RemoteConfigManager.zzcb(Unknown Source)
at com.google.firebase.perf.internal.FeatureControl.<init>(Unknown Source)
at com.google.firebase.perf.internal.FeatureControl.zzar(Unknown Source)
at com.google.firebase.perf.internal.GaugeManager.<init>(Unknown Source)
at com.google.firebase.perf.internal.GaugeManager.zzbf(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzat.<init>(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzat.zza(Unknown Source)
at com.google.firebase.perf.network.FirebasePerfUrlConnection.instrument(Unknown Source)
at com.facebook.GraphRequest.createConnection(GraphRequest.java:1410)
at com.facebook.GraphRequest.toHttpConnection(GraphRequest.java:1070)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1158)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1134)
at com.facebook.GraphRequest.executeBatchAndWait(GraphRequest.java:1118)
at com.facebook.GraphRequest.executeAndWait(GraphRequest.java:1093)
at com.facebook.GraphRequest.executeAndWait(GraphRequest.java:987)
at com.facebook.internal.FetchedAppSettingsManager.getAppSettingsQueryResponse(FetchedAppSettingsManager.java:207)
更新 删除 firebase 性能插件似乎可以解决问题;但是,我想要插件提供的自动跟踪,所以我想找到一个允许我同时使用 firebase 和 facebook
的解决方案Facebook 表示他们的 android sdk 目前与 firebase 性能插件不兼容。
问题的原因似乎是 Facebook SDK 在 Firebase Performance 初始化之前尝试进行网络请求。我找到了一个强制 Firebase 在 facebook 之前初始化的解决方案。
- 在您的 Android 清单中删除 Firebase 和 Facebook 的 "init providers"。这些在每个 SDK 中用于自动初始化每个库。 2.You 然后可以从 Application onCreate 方法手动初始化每个库,在 Facebook 之前调用 Firebase。
在你的AndroidManifest.xml文件中:
<!--Init Firebase manually in Application class-->
<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:authorities="${applicationId}.firebaseinitprovider"
tools:node="remove"
/>
<!--Init Facebook manually in Application class-->
<provider
android:name="com.facebook.internal.FacebookInitProvider"
android:authorities="${applicationId}.FacebookInitProvider"
tools:node="remove"/>
在你的申请中class
@Override
public void onCreate() {
super.onCreate();
FirebaseApp.initializeApp(this);
FacebookSdk.sdkInitialize(this);
}
我不认为这是一个很好的解决方案,但它现在可以完成工作,直到 Facebook 或 Firebase 更新他们的库以在应用程序启动期间停止此冲突。