Files
hgmj_android/analytics_sdk/lib/entity/ad_sdk_events.dart
T
2026-10-08 11:37:25 +07:00

460 lines
11 KiB
Dart

import 'package:analytics_sdk/const/event_type.dart';
import 'package:analytics_sdk/manager/sdk_context.dart';
abstract class _AdSdkEvent {
final String event;
late final String eventId;
late final Map<String, dynamic> _commonFields;
_AdSdkEvent(this.event, List<String> eventIdFields) {
_commonFields = SdkContext.generateCommonFields(event);
eventId = SdkContext.generateEventIdFromCommonFields(
_commonFields,
eventIdFields,
);
}
Map<String, dynamic> buildPayload();
Map<String, dynamic> toJson() {
return {
..._commonFields,
'event_id': eventId,
'payload': buildPayload(),
};
}
}
/// 广告 SDK 初始化事件。
class AdSdkInitEvent extends _AdSdkEvent {
final int screenWidth;
final int screenHeight;
final int screenDpi;
final String orientation;
final String networkType;
final String carrier;
final String language;
final String timezone;
final String oaid;
final String androidId;
final String idfv;
final String idfa;
final bool lat;
final String adSdkVersion;
final int availableStorage;
final int batteryLevel;
final String cpu;
final int storage;
final String activationTime;
AdSdkInitEvent({
this.screenWidth = 0,
this.screenHeight = 0,
this.screenDpi = 0,
this.orientation = '',
this.networkType = '',
this.carrier = '',
this.language = '',
this.timezone = '',
this.oaid = '',
this.androidId = '',
this.idfv = '',
this.idfa = '',
this.lat = false,
required this.adSdkVersion,
this.availableStorage = 0,
this.batteryLevel = 0,
this.cpu = '',
this.storage = 0,
this.activationTime = '',
}) : super(EventType.adSdkInit.event, [
screenWidth.toString(),
screenHeight.toString(),
screenDpi.toString(),
orientation,
networkType,
carrier,
language,
timezone,
oaid,
androidId,
idfv,
idfa,
lat.toString(),
adSdkVersion,
availableStorage.toString(),
batteryLevel.toString(),
cpu,
storage.toString(),
activationTime,
]);
@override
Map<String, dynamic> buildPayload() => {
'screen_width': screenWidth,
'screen_height': screenHeight,
'screen_dpi': screenDpi,
'orientation': orientation,
'network_type': networkType,
'carrier': carrier,
'language': language,
'timezone': timezone,
'oaid': oaid,
'android_id': androidId,
'idfv': idfv,
'idfa': idfa,
'lat': lat,
'ad_sdk_version': adSdkVersion,
'available_storage': availableStorage,
'battery_level': batteryLevel,
'cpu': cpu,
'storage': storage,
'activation_time': activationTime,
};
}
/// 广告请求事件。
class AdRequestEvent extends _AdSdkEvent {
final String requestId;
final String adSlotKey;
final String adType;
final String? adId;
AdRequestEvent({
required this.requestId,
required this.adSlotKey,
this.adType = '',
this.adId,
}) : super(EventType.adRequest.event, [
requestId,
adSlotKey,
adType,
adId ?? '',
]);
@override
Map<String, dynamic> buildPayload() => {
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_type': adType,
if (adId?.trim().isNotEmpty ?? false) 'ad_id': adId!.trim(),
};
}
/// 广告填充成功事件。
class AdFillEvent extends _AdSdkEvent {
final String traceId;
final String requestId;
final String adSlotKey;
final String adId;
final String adType;
final int fillCount;
AdFillEvent({
this.traceId = '',
required this.requestId,
required this.adSlotKey,
required this.adId,
required this.adType,
required this.fillCount,
}) : super(EventType.adFill.event, [
if (traceId.isNotEmpty) traceId,
requestId,
adSlotKey,
adId,
adType,
fillCount.toString(),
]);
@override
Map<String, dynamic> buildPayload() => {
'trace_id': traceId,
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_id': adId,
'ad_type': adType,
'fill_count': fillCount,
};
}
/// 广告无填充事件。
class AdNoFillEvent extends _AdSdkEvent {
final String requestId;
final String adSlotKey;
final String adType;
final String reason;
AdNoFillEvent({
required this.requestId,
required this.adSlotKey,
required this.adType,
required this.reason,
}) : super(EventType.adNoFill.event, [requestId, adSlotKey, adType, reason]);
@override
Map<String, dynamic> buildPayload() => {
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_type': adType,
'reason': reason,
};
}
/// 广告素材加载成功事件。
class AdLoadSuccessEvent extends _AdSdkEvent {
final String traceId;
final String requestId;
final String adSlotKey;
final String adId;
final String adType;
final int loadDuration;
AdLoadSuccessEvent({
this.traceId = '',
required this.requestId,
required this.adSlotKey,
required this.adId,
required this.adType,
required this.loadDuration,
}) : super(EventType.adLoadSuccess.event, [
if (traceId.isNotEmpty) traceId,
requestId,
adSlotKey,
adId,
adType,
loadDuration.toString(),
]);
@override
Map<String, dynamic> buildPayload() => {
'trace_id': traceId,
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_id': adId,
'ad_type': adType,
'load_duration': loadDuration,
};
}
/// 广告素材加载失败事件。
@Deprecated('ad_load_fail 已并入 ad_error,使用 MATERIAL_LOAD_FAIL 错误码。')
class AdLoadFailEvent extends _AdSdkEvent {
final String traceId;
final String requestId;
final String adSlotKey;
final String adId;
final String adType;
final String errorCode;
AdLoadFailEvent({
this.traceId = '',
required this.requestId,
required this.adSlotKey,
required this.adId,
required this.adType,
required this.errorCode,
}) : super(EventType.adLoadFail.event, [
if (traceId.isNotEmpty) traceId,
requestId,
adSlotKey,
adId,
adType,
errorCode,
]);
@override
Map<String, dynamic> buildPayload() => {
'trace_id': traceId,
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_id': adId,
'ad_type': adType,
'error_code': errorCode,
};
}
/// 广告 SDK 曝光事件。
class AdImpressionSdkEvent extends _AdSdkEvent {
final String traceId;
final String requestId;
final String adSlotKey;
final String adId;
final String adType;
final String materialSize;
AdImpressionSdkEvent({
this.traceId = '',
required this.requestId,
required this.adSlotKey,
required this.adId,
required this.adType,
required this.materialSize,
}) : super(EventType.adImpressionSdk.event, [
traceId,
requestId,
adSlotKey,
adId,
adType,
materialSize,
]);
@override
Map<String, dynamic> buildPayload() => {
'trace_id': traceId,
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_id': adId,
'ad_type': adType,
'material_size': materialSize,
};
}
/// 广告 SDK 点击事件。
class AdClickSdkEvent extends _AdSdkEvent {
final String traceId;
final String requestId;
final String adSlotKey;
final String adId;
final String adType;
AdClickSdkEvent({
this.traceId = '',
required this.requestId,
required this.adSlotKey,
required this.adId,
required this.adType,
}) : super(EventType.adClickSdk.event, [
traceId,
requestId,
adSlotKey,
adId,
adType,
]);
@override
Map<String, dynamic> buildPayload() => {
'trace_id': traceId,
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_id': adId,
'ad_type': adType,
};
}
/// 广告关闭事件。
class AdCloseEvent extends _AdSdkEvent {
final String traceId;
final String requestId;
final String adSlotKey;
final String adId;
final String adType;
final String closeType;
final int shownDuration;
AdCloseEvent({
this.traceId = '',
required this.requestId,
required this.adSlotKey,
required this.adId,
required this.adType,
required this.closeType,
this.shownDuration = 0,
}) : super(EventType.adClose.event, [
if (traceId.isNotEmpty) traceId,
requestId,
adSlotKey,
adId,
adType,
closeType,
shownDuration.toString(),
]);
@override
Map<String, dynamic> buildPayload() => {
'trace_id': traceId,
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_id': adId,
'ad_type': adType,
'close_type': closeType,
'shown_duration': shownDuration,
};
}
/// 广告跳过事件。
class AdSkipEvent extends _AdSdkEvent {
final String traceId;
final String requestId;
final String adSlotKey;
final String adId;
final String adType;
final int shownDuration;
AdSkipEvent({
this.traceId = '',
required this.requestId,
required this.adSlotKey,
required this.adId,
required this.adType,
this.shownDuration = 0,
}) : super(EventType.adSkip.event, [
if (traceId.isNotEmpty) traceId,
requestId,
adSlotKey,
adId,
adType,
shownDuration.toString(),
]);
@override
Map<String, dynamic> buildPayload() => {
'trace_id': traceId,
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_id': adId,
'ad_type': adType,
'shown_duration': shownDuration,
};
}
/// 广告错误事件。
class AdErrorEvent extends _AdSdkEvent {
final String traceId;
final String requestId;
final String adSlotKey;
final String adType;
final String errorCode;
final String errorMsg;
final String errorStage;
AdErrorEvent({
this.traceId = '',
this.requestId = '',
required this.adSlotKey,
required this.adType,
required this.errorCode,
required this.errorMsg,
required this.errorStage,
}) : super(EventType.adError.event, [
if (traceId.isNotEmpty) traceId,
requestId,
adSlotKey,
adType,
errorCode,
errorMsg,
errorStage,
]);
@override
Map<String, dynamic> buildPayload() => {
'trace_id': traceId,
'request_id': requestId,
'ad_slot_key': adSlotKey,
'ad_type': adType,
'error_code': errorCode,
'error_msg': errorMsg,
'error_stage': errorStage,
};
}