App Center Analytics (Windows)

重要

Visual Studio App Center 已排定於 2025 年 3 月 31 日淘汰。 雖然您可以繼續使用 Visual Studio App Center,直到完全淘汰為止,但有數個建議的替代方案可以考慮移轉至。

深入瞭解支持時程表和替代方案。

App Center Analytics 可協助您了解使用者行為和客戶參與,以改善您的應用程式。 SDK 會自動擷取會話計數和裝置屬性,例如模型、OS 版本等。您可以定義自己的自定義事件,以測量對您而言很重要的專案。 您可以在 App Center 入口網站中取得擷取的所有資訊,以便您分析數據。

如果您尚未在應用程式中設定 SDK,請遵循 WPF/WinForms 使用者入門UWP/WinUI 使用者入門 一節) (。

此頁面中的指示適用於UWP (,包括 Xamarin.Forms 和 WinUI) 、WPF 和 WinForms。

會話和裝置資訊

將 App Center Analytics 新增至您的應用程式並啟動 SDK 之後,它會自動追蹤會話和裝置屬性,例如 OS 版本、模型等等。

注意

在 WinUI app 上,會話數量可能會低於 UWP app,因為其生命週期的特定數據。

國碼 (地區碼)

SDK 不會自動報告國家/地區代碼。 如果您想要手動報告,您可以遵循下列平臺的指示。

UWP

  1. 請確定您 為應用程式啟用 [位置功能 ]。
  2. 取得 Bing 地圖服務 驗證金鑰
  3. 在您呼叫 AppCenter.Start(... typeof(Analytics) ...);之前,請先在任何位置使用下列程序代碼。 身為 BingMapsToken,請使用在步驟 2 中取得的金鑰。
private static async Task SetCountryCode()
{
    // The following country code is used only as a fallback for the main implementation.
    // This fallback country code doesn't reflect the physical device location, but rather the
    // country that corresponds to the culture it uses.
    var countryCode = new GeographicRegion().CodeTwoLetter;
    var accessStatus = await Geolocator.RequestAccessAsync();
    switch (accessStatus)
    {
        case GeolocationAccessStatus.Allowed:
            var geoLocator = new Geolocator
            {
                DesiredAccuracyInMeters = 100
            };
            var position = await geoLocator.GetGeopositionAsync();
            var myLocation = new BasicGeoposition
            {
                Longitude = position.Coordinate.Point.Position.Longitude,
                Latitude = position.Coordinate.Point.Position.Latitude
            };
            var pointToReverseGeocode = new Geopoint(myLocation);
            MapService.ServiceToken = Constants.BingMapsAuthKey;
            var result = await MapLocationFinder.FindLocationsAtAsync(pointToReverseGeocode);
            if (result.Status != MapLocationFinderStatus.Success || result.Locations == null || result.Locations.Count == 0)
            {
                break;
            }

            // The returned country code is in 3-letter format (ISO 3166-1 alpha-3).
            // Below we convert it to ISO 3166-1 alpha-2 (two letter).
            var country = result.Locations[0].Address.CountryCode;
            countryCode = new GeographicRegion(country).CodeTwoLetter;
            break;
        case GeolocationAccessStatus.Denied:
            AppCenterLog.Info(LogTag, "Geolocation access denied. To set country code in App Center, enable location service in Windows 10.");
            break;
        case GeolocationAccessStatus.Unspecified:
            break;
    }
    AppCenter.SetCountryCode(countryCode);
}

注意

若要在分析工作階段上顯示國家/地區代碼, AppCenter.SetCountryCode 必須在呼叫 之前呼叫 AppCenter.Start

WPF/WinForms

由於 WPF/WinForms 平台沒有地理位置 API,因此您可以使用系統國家/地區代碼。

using System.Globalization;

private static void SetCountryCode()
{
    // This fallback country code doesn't reflect the physical device location, but rather the
    // country that corresponds to the culture it uses.
    var countryCode = RegionInfo.CurrentRegion.TwoLetterISORegionName;
    AppCenter.SetCountryCode(countryCode);
}

注意

若要在分析工作階段上顯示國家/地區代碼, AppCenter.SetCountryCode 必須在呼叫 之前呼叫 AppCenter.Start

自訂事件

您可以使用 最多 20 個屬性 來追蹤自己的自訂事件,以瞭解使用者與應用程式之間的互動。

啟動 SDK 之後,請使用 TrackEvent() 方法來追蹤事件與屬性。 您最多可以傳送 200 個不同的事件名稱。 此外,每個事件名稱的最大限制為 256 個字元,每個事件屬性名稱和事件屬性值有 125 個字元。

Analytics.TrackEvent("Video clicked", new Dictionary<string, string> {
    { "Category", "Music" },
    { "FileName", "favorite.avi"}
});

事件的屬性是完全選擇性的 – 如果您只想要追蹤事件,請改用此範例:

Analytics.TrackEvent("Video clicked");

在運行時間啟用或停用 App Center Analytics

您可以在運行時間啟用和停用 App Center Analytics。 如果您停用此功能,SDK 將不會收集應用程式的任何其他分析資訊。

Analytics.SetEnabledAsync(false);

若要再次啟用App Center Analytics,請使用相同的API,但傳遞 true 為參數。

Analytics.SetEnabledAsync(true);

您不需要等候此呼叫,即可 (進行其他 API 呼叫,例如 IsEnabledAsync) 一致。

狀態會保存在裝置的記憶體中,而應用程式會啟動。

檢查 App Center Analytics 是否已啟用

您也可以檢查 App Center Analytics 是否已啟用。

bool isEnabled = await Analytics.IsEnabledAsync();

管理開始會話

根據預設,會話標識碼取決於應用程式的生命週期。 如果您想要手動控制新工作階段的開始,請遵循後續步驟:

注意

請注意,每個 Analytics.StartSession () API 呼叫都會產生新的會話。 如果在手動會話追蹤器模式中,將不會呼叫此 API,則所有傳送記錄都會有 Null 會話值。

注意

請注意,在新的應用程式啟動之後,會話標識碼將會重新產生。

  • 在 SDK 啟動之前呼叫下列方法:
Analytics.EnableManualSessionTracker();
  • 然後,您可以在 之後AppCenter.Start使用 StartSession API:
Analytics.StartSession();

本機儲存體大小

根據預設,SDK 會儲存最多 10 MB 的所有事件記錄。 開發人員可以使用 API 來增加 記憶體大小 ,而 SDK 會持續儲存記錄,直到記憶體已滿為止。

沒有因特網存取

當沒有任何網路連線時,SDK 會在本機記憶體中儲存最多 10 MB 的記錄。 記憶體已滿之後,SDK 會開始捨棄舊的記錄,以空間容納新的記錄。 裝置重新存取因特網之後,SDK 會每隔 6 秒傳送 50 或之後的記錄。

批處理事件記錄

App Center SDK 會在 50 個批次中上傳記錄,如果 SDK 沒有 50 個要傳送的記錄,它仍會在 6 秒後傳送記錄。 最多可以平行傳送三個批次。

重試和輪詢邏輯

App Center SDK 支援可復原網路錯誤的輪詢重試。 以下是重試邏輯:

  • 3 次嘗試每個要求的最大數目。
  • 每個要求都有自己的重試狀態機器。
  • 所有傳輸通道都會停用 (,直到下一個應用程式進程在一個要求耗盡所有重試之後) 為止。

倒退邏輯

  • 50% 隨機化,第一次重試 5 秒到 10 秒,第二次重試介於 2.5 到 5 分鐘之間,最後嘗試 10 到 20 分鐘。
  • 如果網路從關閉切換至 (或從wi-fi切換至行動裝置) ,則會重設重試狀態,並立即重試要求。