代码之家  ›  专栏  ›  技术社区  ›  Zachary Sweigart

例外情况使用Firebase和Facebook初始化错误

  •  0
  • Zachary Sweigart  · 技术社区  · 7 年前

    我最近将firebase升级到最新版本,现在使用服务器生成的自定义令牌进行身份验证。我还对我的firebase实例进行了自定义初始化,如下所述 https://firebase.googleblog.com/2017/03/take-control-of-your-firebase-init-on.html

    我得到了以下例外,但它并不总是可复制的,所以它似乎是firebase和facebook SDK之间的某种竞争条件。

    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.access$100(FetchedAppSettingsManager.java:47)
            at com.facebook.internal.FetchedAppSettingsManager$1.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)  
    

    使现代化

    1 回复  |  直到 7 年前
        1
  •  0
  •   Zachary Sweigart    7 年前

    Facebook表示,他们的android sdk目前与firebase性能插件不兼容。

    https://developers.facebook.com/bugs/2046702775626929/

        2
  •  0
  •   Joshua Hughes    7 年前

    问题的原因似乎是Facebook SDK试图在Firebase性能初始化之前执行网络请求。我找到了一个解决方案,迫使Firebase在facebook之前进行初始化。

    1. 删除Android清单中Firebase和Facebook的“初始化提供程序”。这些在每个SDK中都用于自动初始化每个库。 2.然后,您可以通过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"/>
    

    在你的申请课上

    @Override
    public void onCreate() {
        super.onCreate();
        FirebaseApp.initializeApp(this);
        FacebookSdk.sdkInitialize(this);
    }
    

    我不认为这是一个很好的解决方案,但它现在起作用了,直到Facebook或Firebase更新它们的库以在应用程序启动期间停止这种冲突。