tutorial apikey android crashlytics

android - tutorial - io fabric apikey



Crashlytics Android SDK-UncaughtExceptionHandler personalizado (4)

Dado que las versiones recientes de Crashlytics realizan la inicialización de forma asíncrona, es mejor usar la devolución de llamada de inicialización de Fabric:

CrashlyticsCore core = new CrashlyticsCore.Builder() .disabled(BuildConfig.DEBUG) .build(); Fabric.with(new Fabric.Builder(this).kits(new Crashlytics.Builder() .core(core) .build()) .initializationCallback(new InitializationCallback<Fabric>() { @Override public void success(Fabric fabric) { mDefaultUEH = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(mCaughtExceptionHandler); } @Override public void failure(Exception e) { } }) .build());

¿Es posible incorporar UncaughtExceptionHandler personalizado junto con crashlytics en una aplicación? Si es así, ¿cómo?


Ninguna si esas soluciones funcionaron para mí. Lo hice como siguiendo:

// Setup handler for uncaught exceptions. Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException (Thread thread, Throwable e) { //Send Report to Crashlytics. Crashlytics will send it as soon as it starts to work Crashlytics.logException(e); //Your custom codes to Restart the app or handle this crash HandleCrashes(thread, e); } });

Y aquí está mi método personalizado para reiniciar la aplicación:

private void HandleCrashes(Thread t, Throwable e) { Intent i = new Intent(mContext, frmLogin.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra("JustLogin", true); startActivity(i); System.exit(1); }


Sí, es posible.

En su clase de aplicación:

@Override public void onCreate() { super.onCreate(); Crashlytics.start(this); initUncaughtExceptionHandler(); } private void initUncaughtExceptionHandler() { final ScheduledThreadPoolExecutor c = new ScheduledThreadPoolExecutor(1); c.schedule(new Runnable() { @Override public void run() { final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread paramThread, Throwable paramThrowable) { // do my amazing stuff here System.err.println("Error!"); //then pass the job to the previous handler defaultHandler.uncaughtException(paramThread, paramThrowable); } }); } }, 5, TimeUnit.SECONDS); }

La razón por la que programo esto después de 5 segundos es porque Crashlytics necesita algo de tiempo para configurar sus cosas. Estoy usando este código y funciona perfectamente. Por supuesto, si su aplicación falla al inicio, lo siento pero no hay un controlador personalizado;)


ACTUALIZAR

Por favor vea la answer @kmityak ya que la inicialización de Crashlytics / Fabric ahora es asíncrona y mi solución a continuación ya no es válida.

RESPUESTA ORIGINAL

Puede configurar su UncaughtExceptionHandler personalizado siempre que pase una excepción al UncaughtExceptionHandler predeterminado que se manejará más adelante a través de Crashlytics.

El código siguiente se implementa dentro de la subclase de aplicación:

private static Thread.UncaughtExceptionHandler mDefaultUEH; private static Thread.UncaughtExceptionHandler mCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { // Custom logic goes here // This will make Crashlytics do its job mDefaultUEH.uncaughtException(thread, ex); } }; @Override public void onCreate() { super.onCreate(); // Order is important! // First, start Crashlytics Crashlytics.start(this); // Second, set custom UncaughtExceptionHandler mDefaultUEH = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(mCaughtExceptionHandler); }

La segunda opción es registrar Crashlytics después de configurar su UncaughtExceptionHandler personalizado. A continuación, Crashlytics informará todas las excepciones no detectadas como fatales, y luego pasará a su controlador personalizado.