在MonoTouch的和MonoDroid的崩溃报告(crash reporting in Mono

2019-09-16 20:29发布

我正在写使用Mvvmcross,单声道Android和MonoTouch的一个跨平台的应用程序。 在Java Android应用我端起我用ACRA提供崩溃报告和临时报告。 这些报告通过HTTP POST发送到我们的服务器。

是否有任何崩溃报告的Mvvmcross插件吗? 可以将单声道*社区推荐任何崩溃报告库?

如果有似乎没有任何东西,怎么是其他开发商处理这个? 他们是如何捕捉未捕获的应用程序异常和Android ANR的,这样的报告可以被解雇了吗?

Answer 1:

我已经在这个领域唯一的经验是乱舞 - 我们只使用提供的分析,而不是崩溃报告。

基本上我们所做的是使用IAnalytics界面登录从视图模型的所有重要事件,然后每个平台提供像IAnalytics的实现:

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);
    }
}

触摸(使用绑定一样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);
    }
}

安卓(有点复杂 - 它需要一个钩子从每一个启动活动/停止):

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)));
    }
}

从乱舞的文档和一些博客在那里,我相信这可以扩展到包括崩溃报告:

  • http://www.thomashajcak.com/solutions-for-crash-reporting-flurry/
  • 乱舞错误报告为Android

但是,如果没有尝试它,我不知道它将如何以及内部MonoDroid的和MonoTouch的工作。



Answer 2:

此前我曾在MonoDroid的应用,并内置不速之客作为ACRA的端口。 但由于单声道的,特别是.NET的一些功能,ACRA的一些功能不能在MonoDroid的实现。 会很高兴,如果它会帮助你。



Answer 3:

我们使用HockeyApp的iOS SDK(我相信他们有一个用于Android系统也是如此)。
我们也采用此修复程序 ,因为它是必不可少的崩溃记者在MonoTouch的工作。



文章来源: crash reporting in MonoTouch and MonoDroid