App Center Analytics (Windows)

重要

Visual Studio App Center は、2026 年 6 月 30 日まで引き続きサポートされる分析機能と診断機能を除き、2025 年 3 月 31 日に廃止されました。 詳細を参照してください。

App Center Analytics は、ユーザーの行動と顧客エンゲージメントを理解してアプリを改善するのに役立ちます。 SDK では、セッション数とデバイスのプロパティ (モデル、OS バージョンなど) が自動的にキャプチャされます。独自のカスタム イベントを定義して、自分にとって重要なものを測定できます。 キャプチャされたすべての情報は、データを分析するために App Center ポータルで使用できます。

アプリケーションで SDK をまだ設定していない場合は、 WPF/WinForms の概要 または UWP/WinUI の概要 に関するセクション (プラットフォームに基づく) に従います。

このページの手順は、UWP (Xamarin.Forms と WinUI を含む)、WPF、WinForms で機能します。

セッションとデバイスの情報

App Center Analytics をアプリに追加して SDK を起動すると、セッションと OS バージョン、モデルなどのデバイス プロパティが自動的に追跡されます。

注

WinUI アプリでは、そのライフサイクルの詳細により、セッションの量が UWP アプリよりも少なくなります。

国番号

国コードは SDK によって自動的に報告されません。 手動で報告する場合は、以下のプラットフォームの指示に従うことができます。

UWP

  1. アプリの 位置情報機能を有効に していることを確認します。
  2. Bing Maps 認証キーを取得します。
  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);
}

注

Analytics セッションに国コードを表示するには、AppCenter.SetCountryCodeを呼び出す前にAppCenter.Startを呼び出す必要があります。

WPF/WinForms

WPF/WinForms プラットフォームには Geolocation 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);
}

注

Analytics セッションに国コードを表示するには、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();

セッションの開始を管理する

既定では、セッション ID はアプリケーションのライフサイクルによって異なります。 新しいセッションの開始を手動で制御する場合は、次の手順に従います。

注

Analytics.StartSession() API を呼び出すたびに新しいセッションが生成されることに注意してください。 手動セッション トラッカー モードでは、この API が呼び出されない場合、すべての送信ログに null セッション値が設定されます。

注

新しいアプリケーションの起動後にセッション ID が再生成されることに注意してください。

  • SDK を開始する前に、次のメソッドを呼び出します。
Analytics.EnableManualSessionTracker();
  • その後、StartSessionの後に AppCenter.Start API を使用できます。
Analytics.StartSession();

ローカル ストレージ サイズ

既定では、SDK は最大 10 MB までのすべてのイベント ログを格納します。 開発者は API を使用して ストレージ サイズ を増やすことができます。SDK は、ストレージがいっぱいになるまでログを格納し続けます。

インターネットにアクセスできない

ネットワーク接続がない場合、SDK はローカル ストレージに最大 10 MB のログを保存します。 ストレージがいっぱいになると、SDK は古いログの破棄を開始して、新しいログを格納できます。 デバイスがインターネット にアクセスすると、SDK は 50 秒のバッチで、または 6 秒ごとにログを送信します。

イベント ログのバッチ処理

App Center SDK は 50 のバッチでログをアップロードします。SDK に送信するログが 50 個ない場合でも、6 秒後にログが送信されます。 最大 3 つのバッチを並列で送信できます。

再試行とバックオフのロジック

App Center SDK では、回復可能なネットワーク エラーに対するバックオフ再試行がサポートされています。 再試行ロジックを次に示します。

  • 要求ごとに最大 3 回試行します。
  • 各要求ごとに再試行状態マシンがあります。
  • 1 回の要求ですべての再試行が終了すると、すべての送信チャネルが無効になります (次のアプリ プロセスまで)。

バックオフ ロジック

  • ランダム化% 50 回、最初に 5 秒から 10 秒の間で再試行し、2 回目は 2.5 ~ 5 分、最後に 10 ~ 20 分の間で再試行します。
  • ネットワークがオフからオン (または wi-fi からモバイル) に切り替わると、再試行状態がリセットされ、要求が直ちに再試行されます。