• 7
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

I set up Firebase Crashlytics according to Get started with Firebase Crashlytics for my Android app (using Android studio 3.1.3). On my own device as well as on the Emulator, everything works fine and my crashes appear correctly within the Firebase Console. So far so good.

However, there was a crash for one of my app users that was unexpected:

java.lang.IllegalStateException: Must Initialize Fabric before using singleton()

The exception was thrown in another Activity than the MainActivity.

I am aware that you could manually execute the initialization as described here by calling Fabric.with(this, new Crashlytics()); However, there is nothing said about one has to manually initialize the Crashlytics in the Getting Started article mentioned above. I was expecting this is done automatically since all my own tests run fine. So why is it that for some users Crashlytics is set up correctly and for some not?

    • Firebase Crashlytics is a punishingly frustrating product to configure, especially where it is integrated with Fabric Crashlytics. I've found so many scenarios where crash reports just quietly fail (with nothing in even the Crashlytics debug logs) that I've been forced to abandon Fabric Crashlytics, and use "pure" Firebase Crashlytics, whose documentation and onboarding is really not much better.
      • 2
    • Thanks? Do you have any Fabric.with statement in your app? For any Fabric.with statement to be honored with Firebase Crashlytics, you also need to add to your Android Manifest. If not, can you let me know where you are initializing Firebase.
      • 1
    • Thanks for your reply. No, I do not have any Fabric.with statements in my app. I always thought this is not necessary since the official Getting Started documentation of Crashlytics did not say anything about it and my own tests worked fine. Only 2 of my current 150 active app users experienced the issue. Should I add Fabric.with statements or should it be initizialized automatically?
      • 2
    • I'm having the same issue when I'm trying to call Crashlytics.log(priority, tag, message) without previously calling Fabric.with(this, new Crashlytics()) and relying on the automatic initialization.

You need to initialize Crashlytics in your application's onCreate

import android.app.Application;

import com.crashlytics.android.Crashlytics;

import io.fabric.sdk.android.Fabric;

public class TestApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());
    }
}
  • 35
Reply Report
    • Thank you for your answer. As I described, I know I can just to what you propose. However, I thought it would be set up automatically since on my own device everything runs fine. Also, the official documentation does not say anything about this. I just wanted to know why manual setup is required for some devices and for some not?
      • 2
    • I'm almost positive that it does require on all devices maybe you received an exception on one device which called fabric and on other device it didn't throw an exception there for fabric is never called
    • Thanks for your quick reply. Hm... This makes me thinking. Because on my own device the test example on the Getting Started documentation where one crashes the app on purpose via button works fine. I can see the crash report on Crashlytics without ever initializing anything manually. So on my own device it has been initialized somehow.

In my case, The below checks helped to get rid of the error.

If you find code like below in your manifest, set it to true or remove it since it's true by default.

   <meta-data
      android:name="firebase_crashlytics_collection_enabled"
      android:value="false" /> 

Also incase if the value is being pulled in from your build.gradle, check which buildType its in and consider not invoking any Crashlytics functions under that buildType.

Example: build.gradle

android{

    ...

   buildTypes {
        debug{
            manifestPlaceholders = [enableCrashReporting:"false"]
        }
        release {
            manifestPlaceholders = [enableCrashReporting:"true"]
        }
   }
}

In this case you should have your Crashlytics calls wrapped like this -

if(!BuildConfig.DEBUG){
   ...
   Crashlytics.setUserIdentifier(...)
   ...
}
  • 11
Reply Report

If you migrated from Fabric.io to Firebase, there must be some lines you need to DELETE from AndroidManifest.xml

        <!-- Fabric.io Analytics key -->
        <meta-data
            android:name="io.fabric.ApiKey"
            android:value="49yy995568140ee22uio128e00450bd99603fd43" />

With those lines, the Crashlytics plugin can NOT be initialized correctly by Firebase.

  • 5
Reply Report

When you are using Firebase Crashlytics, you don't need to do any Fabric initialization. Everything is done automatically.

But if you want to do any custom logging, via (for example) Crashlytics.log("Custom log"), you need to have FirebaseCrashlytics enabled in your manifest. Check the manifest if you have something like that:

<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="${crashlyticsEnabled}" />

${crashlyticsEnabled} can be set to true or false or via you app level build.gradle. This is typically used to disable Firebase Crashlytics when you are debugging the app.

  • 3
Reply Report

This error had me beat on an Ionic 4 build. I have installed the Cordova firebaseX module, and this error occurred.

From reading the debug log I managed to see that the firebase crashlytics collection was missing a bool. In the androidmanifest I found this line and simply changed the value to a bool for a hot fix. I put in 'true' - and the error is gone.

<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="$FIREBASE_CRASHLYTICS_COLLECTION_ENABLED"/>

So for anyone out there was this error on Ionic platform. Look in the androidmanifest file for the above meta line.

  • 1
Reply Report

I get this exception when migrated from Fabric to FirebaseCrashlytics. I didn't remove

  // Remove the Fabric Crashlytics SDK.
  implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'

And I did not update code:

Crachlytics.log(..

Should became

FirebaseCrashlytics.getInstance().log(...

Actually just follow everything in this document Upgrade to the Firebase Crashlytics SDK

  • 0
Reply Report

To anyone who is working with NDK and has the same issue. Before completing this step from the official documentation // Add the Crashlytics NDK dependency (if you have the // Firebase Crashlytics dependency, replace it). initialize it using original dependency.

  • 0
Reply Report