App Center Analytics (tvOS)

重要

Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。

詳細については、サポートタイムラインと代替手段に関するページを参照してください。

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

注意

携帯電話会社の国と通信事業者の名前は、App Center Analytics for tvOS では使用できませんが、デバイスの場所で通信事業者の国を設定できます。

注意

App Center のバージョンでは、 4.0.0 破壊的変更が導入されました。 App Center SDK 4.0.0 以降への移行に関するセクションに従って、以前のバージョンから App Center を移行します。

アプリケーションで SDK をまだ設定していない場合は、「 はじめ に」セクションに従います。

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

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

注意

Mac Catalyst アプリでは、セッションの量が iOS アプリよりも少なくなる可能性があります。 Mac Catalyst でのセッションの追跡に使用されるライフサイクル イベントの動作は、iOS のセッションとは異なります。

デバイスにモバイル データ モデムと SIM カードがインストールされている場合、SDK はユーザーの国コードを自動的に報告します。 WiFi 専用デバイスでは、既定では国コードは報告されません。 これらのユーザーの国コードを設定するには、ユーザーの場所を自分で取得し、SDK で メソッドを setCountryCode: 使用する必要があります。 私たちのアドバイスは、ユーザーの場所を追跡し、低い場所の解像度を使用することについて注意することです。 下のサンプルでは kCLLocationAccuracyKilometer が使用されています。

  • デバイスで Location Services を有効に していることを確認します。
  • を使用してデバイスの現在の場所を CLLocationManager取得します。
  • を使用して CLGeocoder、場所を ISO 国コードに変換します。
  • SDK の メソッドを使用して、通信事業者の setCountryCode 国コードをオーバーライドします。

次のコードを使用して、デバイスの場所を取得し、アプリの通信事業者の国コードをオーバーライドします。

CLLocationManagerDelegate プロトコルを AppDelegate に追加し、locationManager プロパティを追加します。

@interface AppDelegate () <CLLocationManagerDelegate>
@property(nonatomic) CLLocationManager *locationManager;
@end
class AppDelegate: CLLocationManagerDelegate {
  private var locationManager: CLLocationManager = CLLocationManager()
}

didFinishLaunchingWithOptions: メソッドで、場所マネージャーを設定します。

  self.locationManager = [[CLLocationManager alloc] init];
  self.locationManager.delegate = self;
  self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
  [self.locationManager requestWhenInUseAuthorization];
  self.locationManager.delegate = self
  self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer
  self.locationManager.requestWhenInUseAuthorization()

注意

メソッドは requestWhenInUseAuthorization macOS では使用できません。 macOS 用の開発時に、そのメソッドの呼び出しを削除します。

デリゲート メソッドを追加します。

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
  if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
    [manager requestLocation];
  }
}

- (void)locationManger:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
  CLLocation *location = [locations lastObject];
  CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  [geocoder reverseGeocodeLocation:location
                 completionHandler:^(NSArray *placemarks, NSError *error) {
                   if (placemarks.count == 0 || error)
                     return;
                   CLPlacemark *pm = [placemarks firstObject];
                   [MSACAppCenter setCountryCode:pm.ISOcountryCode];
                 }]
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
  NSLog(@"Failed to find user's location: \(error.localizedDescription)");
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
  if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
    manager.requestLocation()
  }
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
  let userLocation:CLLocation = locations[0] as CLLocation
  CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) in
    if error == nil {
      AppCenter.countryCode = placemarks?.first?.isoCountryCode
    }
  }
}
  
func locationManager(_ Manager: CLLocationManager, didFailWithError error: Error) {
  print("Failed to find user's location: \(error.localizedDescription)")
}

カスタム イベント

最大 20 個のプロパティを使用して独自のカスタム イベントを追跡して、アプリで何が起こっているかを把握し、ユーザーアクションを理解し、App Center ポータルで集計を確認できます。

SDK を開始したら、 メソッドを trackEvent:withProperties 使用して、プロパティを使用してイベントを追跡します。 最大 200 個の個別のイベント名を送信できます。 また、イベント名あたり 256 文字、イベント プロパティ名とイベント プロパティ値ごとに 125 文字の上限があります。

NSDictionary *properties = @{@"Category" : @"Music", @"FileName" : @"favorite.avi"};
[MSACAnalytics trackEvent:@"Video clicked" withProperties: properties];
Analytics.trackEvent("Video clicked", withProperties: ["Category" : "Music", "FileName" : "favorite.avi"])

イベントのプロパティは完全に省略可能です。イベントを追跡するだけの場合は、代わりに次のサンプルを使用します。

[MSACAnalytics trackEvent:@"Video clicked"];
Analytics.trackEvent("Video clicked")

イベントの優先度と永続化

他のイベントよりも重要度の高いビジネス クリティカルなイベントを追跡できます。

  • 開発者は、イベントの優先度を Normal (FlagsNormal API の場合) または Critical (FlagsCritical API の場合) に設定できます。
  • 優先度が Critical に設定されているイベントは、ストレージから最初に取得され、 通常 のイベントの前に送信されます。
  • ローカル ストレージがいっぱいで、新しいイベントを格納する必要がある場合。 優先度が最も低い最も古いイベントが最初に削除され、新しいイベント用のスペースが作成されます。
  • ストレージに 重大な 優先度のログがいっぱいの場合、SDK ではその場合に空き容量を作ることができないので、 通常 の優先度のイベントの追跡は失敗します。
  • クラッシュ サービスも使用する場合、クラッシュ ログは重大として設定され、イベントと同じストレージを共有します。
  • 送信間隔は 通常 のイベントにのみ適用され、 クリティカル イベントは 3 秒後に送信されます。

次の API を使用して、 イベントを Critical として追跡できます。

NSDictionary *properties = @{@"Category" : @"Music", @"FileName" : @"favorite.avi"};
[MSACAnalytics trackEvent:@"Video clicked" withProperties:properties flags:MSACFlagsCritical];

// If you're using name only, you can pass nil as properties.
let properties = ["Category" : "Music", "FileName" : "favorite.avi"];
Analytics.trackEvent("Video clicked", withProperties: properties, flags: .critical)

// If you're using name only, you can pass nil as properties.

ログの送信を一時停止して再開する

イベント転送の一時停止は、アプリがビジネス クリティカルなニーズに合わせてネットワーク帯域幅を制御する必要があるシナリオで役立ちます。 App Center バックエンドへのログの送信を一時停止できます。 一時停止しても、イベントは追跡および保存できますが、すぐには送信されません。 一時停止中にアプリが追跡するすべてのイベントは、 を呼び出 resumeした後にのみ送信されます。

[MSACAnalytics pause];
[MSACAnalytics resume];
Analytics.pause()
Analytics.resume()

実行時に App Center Analytics を有効または無効にする

実行時に App Center Analytics を有効または無効にすることができます。 無効にした場合、SDK はアプリの分析情報をこれ以上収集しません。

[MSACAnalytics setEnabled:NO];
Analytics.enabled = false

App Center Analytics を再度有効にするには、同じ API を使用しますが、パラメーターとして を渡します YES/true

[MSACAnalytics setEnabled:YES];
Analytics.enabled = true

状態は、アプリケーションの起動間でデバイスのストレージに保持されます。

注意

このメソッドは、開始後 Analytics にのみ使用する必要があります。

App Center Analytics が有効になっているかどうかを確認する

App Center Analytics が有効かどうかをチェックすることもできます。

[MSACAnalytics isEnabled];
Analytics.enabled

注意

このメソッドは、開始後Analyticsにのみ使用する必要があります。このメソッドは、常に または false 開始前に を返NOします。

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

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

注意

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

注意

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

  • SDK を開始する前に、次のメソッドを呼び出します。
[MSACAnalytics enableManualSessionTracker];
Analytics.enableManualSessionTracker()
  • 次に、 の後に startSession API を AppCenter.start使用できます。
[MSACAnalytics startSession];
Analytics.startSession()

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

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

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

ネットワーク接続がない場合、SDK はローカル ストレージに最大 10 MB のログを保存します。 ストレージがいっぱいになると、SDK は古いログの破棄を開始して、新しいログ用のスペースを作ります。 ネットワーク接続が戻ると、SDK は 50 または 6 秒ごとに (既定で) のバッチでログを送信します。

注意

25 日より前のログは破棄されます。

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

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

// Change transmission interval to 10 seconds.
[MSACAnalytics setTransmissionInterval:10000];
// Change transmission interval to 10 seconds.
Analytics.transmissionInterval = 10000

転送間隔の値は、6 秒から 86400 秒 (1 日) の間である必要があります。このメソッドは、サービスを開始する前に呼び出す必要があります。

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

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

  • 要求ごとに最大 3 回の試行。
  • 各要求には、独自の再試行状態マシンがあります。
  • 1 つの要求ですべての再試行が使い果たされた後、すべての送信チャネルが無効になります (次のアプリ プロセスまで)。

バックオフ ロジック

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