xamarin.ios - studio - informes de fallos en MonoTouch y MonoDroid
xamarin visual studio 2015 (3)
Previamente trabajé en la aplicación MonoDroid y construí Crasher como puerto de ACRA. Pero debido a algunas características de Mono y, en particular, .NET, algunas funciones de ACRA no se pueden implementar en MonoDroid. Estaré contento si te ayudará.
Estoy escribiendo una aplicación multiplataforma utilizando Mvvmcross, Mono para Android y MonoTouch. En la aplicación Java de Android, utilizo ACRA para proporcionar informes de fallas e informes ad-hoc. Estos informes se enviaron a nuestro servidor a través de una publicación HTTP.
¿Hay algún complemento de informes de fallos para Mvvmcross? ¿Puede la comunidad Mono * recomendar cualquier biblioteca de informes de fallos?
Si no parece haber nada, ¿cómo se enfrentan los desarrolladores con esto? ¿Cómo capturan las excepciones de aplicaciones no procesadas y los ANR de Android para que se pueda disparar un informe?
Estamos utilizando HockeyApp iOS SDK (creo que tienen uno para Android también).
También empleamos esta solución porque es esencial para bloquear reporteros que trabajan en MonoTouch.
La única experiencia que he tenido en esta área es con Flurry, y solo lo usamos para análisis, no para informes de fallos.
Básicamente lo que hicimos fue registrar todos los eventos importantes de ViewModel usando una interfaz IAnalytics, y luego cada plataforma proporcionó una implementación de IAnalytics como:
WP7:
public class FlurryAnalytics : IAnalytics
{
public const string ApiKeyValue = "--- your key ---";
public void StartSession()
{
FlurryWP7SDK.Api.StartSession(ApiKeyValue);
}
public void LogEvent(string eventName)
{
FlurryWP7SDK.Api.LogEvent(eventName);
}
}
Toque (se usa con enlaces como https://github.com/kevinmcmahon/monotouch-libs/blob/master/FlurryAnalytics/flurry.cs ):
public class FlurryAnalytics : IAnalytics
{
public const string ApiKeyValue = "37SHD8L8VATPBS88AMHU";
public void StartSession()
{
FlurryAPI.StartSession (ApiKeyValue);
}
public void LogEvent(string eventName)
{
FlurryAPI.LogEvent(eventName);
}
}
Android (un poco más complicado: necesita un gancho de cada inicio / parada de una actividad):
public class FlurryAnalytics : IAnalytics, IAndroidActivityTracker
{
public const string ApiKeyValue = "--- your key ---";
private readonly IntPtr _flurryClass;
private readonly IntPtr _flurryOnStartSession;
private readonly IntPtr _flurryOnEndSession;
private readonly IntPtr _flurryLogEvent;
public FlurryAnalytics()
{
_flurryClass = JNIEnv.FindClass("com/flurry/android/FlurryAgent");
_flurryOnStartSession = JNIEnv.GetStaticMethodID(_flurryClass, "onStartSession",
"(Landroid/content/Context;Ljava/lang/String;)V");
_flurryOnEndSession = JNIEnv.GetStaticMethodID(_flurryClass, "onEndSession", "(Landroid/content/Context;)V");
_flurryLogEvent = JNIEnv.GetStaticMethodID(_flurryClass, "logEvent", "(Ljava/lang/String;)V");
}
public void StartSession()
{
// not used in Android - Android relies on Activity tracking instead
}
public void LogEvent(string eventName)
{
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryLogEvent, new JValue(new Java.Lang.String(eventName))));
}
private static void ExceptionSafe(Action action)
{
try
{
action();
}
catch (ThreadAbortException)
{
throw;
}
catch (Exception exception)
{
UITrace.Trace("Exception seen in calling Flurry through JNI " + exception.ToLongString());
}
}
public void OnStartActivity(Activity activity)
{
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryOnStartSession, new JValue(activity), new JValue(new Java.Lang.String(ApiKeyValue))));
}
public void OnStopActivity(Activity activity)
{
ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryOnEndSession, new JValue(activity)));
}
}
De la documentación de Flurry y de algunos blogs, creo que esto podría ampliarse para incluir informes de fallos:
- http://www.thomashajcak.com/solutions-for-crash-reporting-flurry/
- Informe de errores de ráfaga para Android
Pero sin intentarlo, no sé qué tan bien funcionaría dentro de MonoDroid y MonoTouch.