未从发布配置中的 Android 应用接收 Application Insights 遥测

问题描述 投票:0回答:1

我花了两天的大部分时间来解决以下问题,但我已经没有想法了。希望有类似经历的人可以帮助我。

我有一个具有共享后端的 .NET 8.0 iOS、Windows 和 Android 应用程序。异常日志记录到应用程序洞察对于 iOS 和 Windows 来说工作得很好,但它只适用于我应用程序的 DEBUG 配置中的 Android。

复制

在应用程序启动期间实例化遥测客户端:

var telemetryConfiguration = TelemetryConfiguration.CreateDefault();
    var telemetryConnection = config["ApplicationInsightsConnection"];
    telemetryConfiguration.ConnectionString = telemetryConnection;

    var telemetryClient = new TelemetryClient(telemetryConfiguration);
    Mvx.IoCProvider.RegisterSingleton(telemetryClient);

将事件或异常写入 Application Insights:

    /// <inheritdoc />
    public void LogException(Exception exception, string? message, IDictionary<string, string>  properties)
    {
        var telemetryClient = Mvx.IoCProvider?.Resolve<TelemetryClient>();
        
        // Both Don't work
        telemetryClient?.TrackException(new ExceptionTelemetry(new Exception("Test Thomas Release Config")));
        telemetryClient?.TrackEvent("Test Thomas Release Config");
    }

预期行为

在 Android 上,在发布模式下编译我的应用程序后,我希望使用 telemetryClient.Track 发送的异常在应用程序洞察中可见。

相关包、工具和运行时版本

应用洞察版本2.22.0 平台:.Net 8 应用程序、Android(无 Maui)。

其他背景

  • 当我将 telemetryClient 记录到 Android 控制台时,telemetryClient 不会引发任何异常,并且 telemetryClient、连接字符串等都已正确实例化并且具有正确的值和类型。
  • 如果我处理异常,遥测客户端也不会发送遥测数据(因此应用程序不会崩溃)。
  • 在发布模式下关闭 .csproj 中的代码优化选项(如链接)没有什么区别。
  • 通过遥测客户端实例发送事件遥测而不是错误遥测***也***不起作用(仅发布配置)。
  • 异常的大小没有区别。即使我这样做,它也不会进入应用程序洞察:例如抛出新的异常(“测试”)。
  • 我想扩展一下,我对共享相同域代码的 Windows 和 iOS 应用程序执行完全相同的操作。在这些情况下,例外情况确实会出现在应用程序洞察中。也在发布配置中。
c# android azure-application-insights mvvmcross
1个回答
0
投票
  • 如果您使用 ProguardR8 进行代码缩减,请包含保留 Application Insights 库的规则。

proguard-rules.pro:

-keep class com.microsoft.** { *; }
-keep class io.opentelemetry.** { *; }
-keep class com.azure.** { *; }
-keep class com.microsoft.applicationinsights.** { *; }

在这里,我已经为应用程序安装了以下依赖项。

enter image description here

发布模式配置与调试模式配置不同。检查您是否在应用程序关闭或崩溃之前刷新遥测数据。这在发布模式下尤其重要,其中优化可能会导致应用程序更积极地终止。

App.xaml.cs:

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;

namespace MauiApp1
{
    public partial class App : Application
    {
        private static TelemetryClient _telemetryClient;

        public App()
        {
            InitializeComponent();

            // Initialize Application Insights
            var telemetryConfiguration = TelemetryConfiguration.CreateDefault();
            telemetryConfiguration.ConnectionString = "InstrumentationKey=1dc7bxx8-xxxx-487e-xxxx-af89xxxxxxa1;IngestionEndpoint=https://eastus-8.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/;ApplicationId=5fxxxxx5-xxxx41b6-axxx-9xxxx4xxxx1e"; // Replace with your actual Application Insights connection string
            _telemetryClient = new TelemetryClient(telemetryConfiguration);

            MainPage = new AppShell();

            // Log an exception on app start for testing
            LogException(new Exception("Test exception on app start"));
        }

        public static void LogException(Exception exception)
        {
            _telemetryClient?.TrackException(exception);
            _telemetryClient?.Flush(); // Ensure telemetry is sent immediately
        }

        public static void LogEvent(string eventName)
        {
            _telemetryClient?.TrackEvent(eventName);
            _telemetryClient?.Flush(); // Ensure telemetry is sent immediately
        }
    }
}

MainPage.xaml.cs:

using System;
using Microsoft.ApplicationInsights;

namespace MauiApp1
{
    public partial class MainPage : ContentPage
    {
        int count = 0;

        public MainPage()
        {
            InitializeComponent();
        }

        private void OnCounterClicked(object sender, EventArgs e)
        {
            count++;

            if (count == 1)
                CounterBtn.Text = $"Clicked {count} time";
            else
                CounterBtn.Text = $"Clicked {count} times";

            SemanticScreenReader.Announce(CounterBtn.Text);

            // Log a custom event for button clicks
            App.LogEvent("ButtonClicked");
        }
    }
}

enter image description here

日志跟踪:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.