98 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Swift
		
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Swift
		
	
	
| //
 | |
| //  MabAnalyticsEvents.swift
 | |
| //  Pods
 | |
| //
 | |
| //  Created by 250102 on 2025/5/10.
 | |
| //
 | |
| 
 | |
| // 单例实现
 | |
| internal class MabAnalyticEvents {
 | |
|     // 单例访问点
 | |
|     static let shared = MabAnalyticEvents()
 | |
|     
 | |
|     // 私有初始化方法确保单例模式
 | |
|     private init() {}
 | |
|     
 | |
|     static func faLoad(
 | |
|         faUnitId: String,
 | |
|         adType: AdType,
 | |
|         aggregatorId: String,
 | |
|         adUnitId: String,
 | |
|         requestReason: RequestReason?
 | |
|     ) {
 | |
|         var params: [String: Any] = [:]
 | |
|         params["fa_unitid"] = faUnitId
 | |
|         params["aggregator_id"] = aggregatorId
 | |
|         if let requestReason = requestReason {
 | |
|             params["req_type"] = requestReason.statsName
 | |
|         }
 | |
|         params["ad_format"] = adType.label
 | |
|         params["ad_unit_name"] = shrink(adUnitId)
 | |
|         
 | |
|         AnalyticsEvents.shared.onEvent(name: "fa_load", param: params)
 | |
|     }
 | |
|     
 | |
|     static func faLoaded(
 | |
|         faUnitId: String,
 | |
|         adType: AdType,
 | |
|         adSource: String?,
 | |
|         aggregatorId: String,
 | |
|         adUnitId: String,
 | |
|         durationInMillis: Int64?
 | |
|     ) {
 | |
|         guard let durationInMillis = durationInMillis else {
 | |
|             return
 | |
|         }
 | |
|         
 | |
|         AnalyticsEvents.shared.onEvent(
 | |
|             name: "fa_loaded",
 | |
|             pairs:
 | |
|                 ("fa_unitid", faUnitId),
 | |
|                 ("aggregator_id", aggregatorId),
 | |
|                 ("ad_format", adType.label),
 | |
|                 ("duration", durationInMillis),
 | |
|                 ("ad_unit_name", shrink(adUnitId)),
 | |
|                 ("ad_source", (adSource ?? "unknown"))
 | |
|         )
 | |
|     }
 | |
|     
 | |
|     static func faFailed(
 | |
|         faUnitId: String,
 | |
|         adType: AdType,
 | |
|         aggregatorId: String,
 | |
|         adUnitId: String,
 | |
|         durationInMillis: Int64?,
 | |
|         errorCode: Int
 | |
|     ) {
 | |
|         guard let durationInMillis = durationInMillis else {
 | |
|             return
 | |
|         }
 | |
|         
 | |
|         AnalyticsEvents.shared.onEvent(
 | |
|             name: "fa_failed",
 | |
|             pairs:
 | |
|                 ("fa_unitid", faUnitId),
 | |
|                 ("aggregator_id", aggregatorId),
 | |
|                 ("ad_format", adType.label),
 | |
|                 ("duration", durationInMillis),
 | |
|                 ("ad_unit_name", shrink(adUnitId)),
 | |
|                 ("error_code", errorCode)
 | |
|         )
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * 精简adUnitId以便于不过多占用打点数据包
 | |
|      */
 | |
|     private static func shrink(_ adUnitId: String) -> String {
 | |
|         // shrink a adUnitId from AdMob to a shorter form,
 | |
|         // for example, ca-app-pub-2436733915645843/9966308712
 | |
|         // shrink("ca-app-pub-2436733915645843/9966308712") == "9966308712"
 | |
|         if adUnitId.hasPrefix("ca-app-pub-") && adUnitId.count == 38 && adUnitId[adUnitId.index(adUnitId.startIndex, offsetBy: 27)] == "/" {
 | |
|             return String(adUnitId.suffix(10))
 | |
|         }
 | |
|         
 | |
|         // no need to shrink
 | |
|         return adUnitId
 | |
|     }
 | |
| }
 |