【问题标题】:What to do with handled exceptions in xamarin forms project?如何处理 xamarin 表单项目中处理的异常?
【发布时间】:2017-06-17 14:41:16
【问题描述】:

直到最近我还在使用 Xamarin Insights。我从我的项目中删除了它,因为它显着增加了启动时间和应用程序大小。所以我只剩下微软的 2 个选项 Hockeyapp 和 Mobile Center。这 2 个问题是它们没有任何报告功能来报告捕获的异常,通常是您在 xamarin 表单项目中的 try catch 中所做的。

确实非常令人失望。

xamarin 洞察力有 this 并且工作正常。我想问一下如何在表单项目中报告异常?应用洞察是一种选择。我在其他 .net 项目中使用过,但 UI 确实不太好用。

这里甚至有一个github上的线程

https://github.com/Microsoft/ApplicationInsights-Xamarin/issues/26

微软说我们已经为此工作了一年或更长时间,但从未交付任何东西,并且一直在弃用。

【问题讨论】:

  • 在 HockeyApp 中,您可以通过在 catch 块中添加事件来跟踪捕获异常的次数。但是,您不能真正发回其他信息。
  • 如何将异常作为事件发送?它可以作为字符串工作吗?
  • HockeyApp documents 说支持添加字典以包含测量值等,但我还没有找到一种方法来实际阅读他们网站上的测量值(我可能只是做错了什么尽管)。否则,所有的事件都有利于跟踪该行代码执行了多少次。
  • 我进行了更多挖掘,发现您可以使用 Application Insights 查找事件测量值。因此,使用 HockeyApp 您可以编写一个方法来将异常中的信息打包到字典中,然后在事件中发送。
  • @cvanbeek 不使用 DI 似乎是不可能的。我只是尝试使用 Microsoft.HockeyApp.HockeyClient.Current.TrackEvent()。它不会崩溃,但我在 hockeyapp 的事件选项卡下看不到任何事件

标签: xamarin xamarin.forms hockeyapp mobile-center visual-studio-app-center


【解决方案1】:

我们使用 Mobile Center 报告问题。基本上在每个 catch 语句中,我们使用一个静态类来报告问题,如下所示:

public static class EventTrace
{
    public static void Trace(string menuName, string actionName, Dictionary<string, string> parameters = null)
    {
        try
        {
            Dictionary<string, string> tmp;
            if (parameters != null)
                tmp = new Dictionary<string, string>(parameters);
            else
                tmp = new Dictionary<string, string>();

            tmp.Add("GUID", MobileCenter.InstallId.ToString());
            Analytics.TrackEvent(menuName + " - " + actionName, tmp);
        }
        catch (Exception ex)
        {
            Analytics.TrackEvent("Event Trace - Error creating event", new Dictionary<string, string> { { "Exception", ex.ToString() } });
            Analytics.TrackEvent(menuName + " - " + actionName, parameters);
        }
    }

    public static void Error(string menuName, string exception)
    {
        var parameters = new Dictionary<string, string> { { "Exception", exception } };
        var tmp = new Dictionary<string, string>(parameters);
        try
        {
            tmp.Add("GUID", MobileCenter.InstallId.ToString());
            Analytics.TrackEvent(menuName + " - Error", tmp);
        }
        catch (Exception ex)
        {
            Analytics.TrackEvent("Event Trace - Error creating event", new Dictionary<string, string> { { "Exception", ex.ToString() } });
            Analytics.TrackEvent(menuName + " - Error", parameters);
        }
    }
}

我们有用于跟踪的事件和用于捕获错误的事件。在移动中心,我们基本上可以在事件标签中搜索“错误”语句。

它对我们有用,希望它对你有用!

【讨论】:

  • Hockeyapp 有类似的,但它们在表单级别没有 trackevent,只有在本机级别。它需要像这里描述的那样进行依赖注入 forums.xamarin.com/discussion/92974/… 。你做过类似的事情吗?那么您的 Analytics 对象是您使用接口注入的对象吗?除此之外,你还能看到设备信息和应用版本信息吗?
  • 在我使用 PCL 时,所有错误报告和事件跟踪都位于应用程序的可移植部分。我必须做的唯一棘手的事情是为每个操作系统(在我的情况下为 Android 和 iOS)创建不同的 Mobile Center 项目,并在每次启动时使用提供的不同 Mobile Center ID 初始化 Mobile Center。这里(screenpresso.com/=NGCLe)是一个例子:我正在使用 MVVMCross,所以我的启动都在 Setup 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
相关资源
最近更新 更多