App Center Analytics (Windows)
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
- 请确保为应用 启用" 位置功能"。
- 获取必应地图密钥。
- 在调用 之前,请在任何位置使用以下代码
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 平台没有地理位置 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禁用分析
可以在运行时启用和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();
本地存储大小
默认情况下,SDK 存储最多 10 MB 的所有事件日志。 开发人员可以使用 API 来增加 存储大小 ,SDK 将一直存储日志,直到存储已满。
无法访问 Internet
没有任何网络连接时,SDK 在本地存储中最多保存 10MB 的日志。 存储已满后,SDK 将开始丢弃旧日志,为新日志提供空间。 设备重新访问 Internet 后,SDK 将每隔 50 秒或每 6 秒发送一次日志。
批处理事件日志
App Center SDK 批量上传日志,如果 SDK 没有要发送的 50 个日志,它仍将在 6 秒后发送日志。 最多可以并行发送 3 个批处理。
重试和退市逻辑
App Center SDK 支持在可恢复网络错误时进行退步重试。 下面是重试逻辑:
- 每个请求最多尝试 3 次。
- 每个请求都有自己的重试状态机。
- 所有传输通道都将被禁用 (,直到下一个应用进程) 1 个请求耗尽其所有重试。
退市逻辑
- 50% 随机化,第一次重试 5 到 10 秒,第二次重试 2.5 到 5 分钟,最后尝试 10 到 20 分钟。
- 如果网络从关闭切换到 (从 wi-fi 切换到移动) ,将重置重试状态,并立即重试请求。