196 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Dart
		
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Dart
		
	
	
| part of '../guru_analytics.dart';
 | |
| 
 | |
| /// Created by Haoyi on 2022/3/12
 | |
| typedef AdjustEventConverter = AdjustEvent Function(Map<String, dynamic>);
 | |
| 
 | |
| class AdjustProfile {
 | |
|   final String appToken;
 | |
|   final Map<String, AdjustEventConverter> eventNameMapping;
 | |
| 
 | |
|   final bool isEnabled;
 | |
| 
 | |
|   AdjustProfile({required this.appToken, required this.eventNameMapping})
 | |
|       : isEnabled = appToken.isNotEmpty;
 | |
| 
 | |
|   static AdjustEvent createAdjustEvent(String eventToken, Map<String, dynamic> params) {
 | |
|     final adjustParams = Map.of(params);
 | |
|     final revenue = adjustParams.remove("revenue");
 | |
|     final currency = adjustParams.remove("currency");
 | |
|     final event = AdjustEvent(eventToken);
 | |
|     if (revenue is num && currency is String) {
 | |
|       event.setRevenue(revenue, currency);
 | |
|     }
 | |
|     for (var entry in adjustParams.entries) {
 | |
|       event.addCallbackParameter(entry.key, entry.value.toString());
 | |
|     }
 | |
|     return event;
 | |
|   }
 | |
| }
 | |
| 
 | |
| mixin AdjustAware on Analytics {
 | |
|   static final List<AdjustEvent> pendingAdjustEvents = [];
 | |
| 
 | |
|   //
 | |
|   static bool initializedAdjust = false;
 | |
| 
 | |
|   bool get enabledAdjust => GuruApp.instance.adjustProfile.isEnabled;
 | |
| 
 | |
|   static AdjustConfig _defaultAdjustConfigComposition(AdjustConfig adjustConfig) {
 | |
|     return adjustConfig;
 | |
|   }
 | |
| 
 | |
|   static AdjustConfig Function(AdjustConfig) adjustConfigComposition =
 | |
|       _defaultAdjustConfigComposition;
 | |
| 
 | |
|   static AdjustConfig buildAdjustConfig() {
 | |
|     final AdjustConfig config = AdjustConfig(GuruApp.instance.adjustProfile.appToken,
 | |
|         kReleaseMode ? AdjustEnvironment.production : AdjustEnvironment.sandbox);
 | |
|     config.fbAppId = GuruApp.instance.details.facebookAppId;
 | |
|     return adjustConfigComposition(config);
 | |
|   }
 | |
| 
 | |
|   Future initAdjust() async {
 | |
|     if (enabledAdjust) {
 | |
|       await _setupAdjustSessionCall();
 | |
|       final adjustConfig = buildAdjustConfig();
 | |
|       Adjust.start(adjustConfig);
 | |
|       initializedAdjust = true;
 | |
|       _trackAllPendingAdjustEvent();
 | |
| 
 | |
|       final adId = await Adjust.getAdid();
 | |
|       if (adId != null) {
 | |
|         GuruAnalytics.instance.setAdjustId(adId);
 | |
|         Log.d("initAdjust adId:$adId");
 | |
|       } else {
 | |
|         // https://github.com/adjust/react_native_sdk/issues/90
 | |
|         Log.d("adjustId is null! waiting 3s..and retry");
 | |
|         Future.delayed(const Duration(seconds: 3), () async {
 | |
|           final adId = await Adjust.getAdid();
 | |
|           if (adId != null) {
 | |
|             GuruAnalytics.instance.setAdjustId(adId);
 | |
|             Log.d("initAdjust adId:$adId");
 | |
|           } else {
 | |
|             Log.d("initAdjust adId is null");
 | |
|           }
 | |
|         });
 | |
|       }
 | |
| 
 | |
|       final googleAdId = await Adjust.getGoogleAdId();
 | |
|       if (googleAdId != null) {
 | |
|         GuruAnalytics.instance.setAdId(googleAdId);
 | |
|         Log.d("initAdjust googleAdId:$googleAdId");
 | |
|       }
 | |
| 
 | |
|       final idfa = Platform.isIOS ? await Adjust.getIdfa() : null;
 | |
|       if (idfa != null) {
 | |
|         GuruAnalytics.instance.setIdfa(idfa);
 | |
|         Log.d("initAdjust idfa:$idfa");
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   // 接入Adjust后trackAdRevenueNew要放开
 | |
|   void loadAdjustAdRevenue(ImpressionData impressionData) {
 | |
|     if (enabledAdjust) {
 | |
|       AdjustAdRevenue adRevenue = AdjustAdRevenue(AdjustConfig.AdRevenueSourceAppLovinMAX);
 | |
|       adRevenue.setRevenue(impressionData.publisherRevenue, "USD");
 | |
|       adRevenue.adRevenueNetwork = impressionData.networkName;
 | |
|       adRevenue.adRevenueUnit = impressionData.unitId;
 | |
|       adRevenue.adRevenuePlacement = impressionData.networkPlacementId;
 | |
|       Adjust.trackAdRevenueNew(adRevenue);
 | |
|       recordEvents("[Adjust]trackAdRevenue", adRevenue.toMap);
 | |
|     }
 | |
|   }
 | |
| 
 | |
| //
 | |
|   Future _setupAdjustSessionCall() async {
 | |
|     try {
 | |
|       final deviceId = await AppProperty.getInstance().getDeviceId();
 | |
|       Adjust.addSessionCallbackParameter("device_id", deviceId);
 | |
|     } catch (error, stacktrace) {
 | |
|       Log.e("setupAdjustSessionCall error $error, $stacktrace");
 | |
|     }
 | |
| 
 | |
|     final appInstanceId = await getAppInstanceId();
 | |
|     Log.d("setupAdjustSessionCall $appInstanceId");
 | |
|     Adjust.addSessionCallbackParameter("user_pseudo_id", appInstanceId);
 | |
|   }
 | |
| 
 | |
|   void logAdjust(String eventName,
 | |
|       {String? itemCategory,
 | |
|       String? itemName,
 | |
|       double? value,
 | |
|       Map<String, dynamic> parameters = const {}}) {
 | |
|     if (enabledAdjust) {
 | |
|       Map<String, dynamic> map = Map<String, dynamic>.from(parameters);
 | |
|       if (itemCategory != null) {
 | |
|         map["item_category"] = itemCategory;
 | |
|       }
 | |
|       if (itemName != null) {
 | |
|         map["item_name"] = itemName;
 | |
|       }
 | |
|       if (value != null) {
 | |
|         map["value"] = value;
 | |
|       }
 | |
|       _logAdjustEvent(eventName, map);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   void _trackAdjustEvent(AdjustEvent adjustEvent) {
 | |
|     if (!enabledAdjust) {
 | |
|       return;
 | |
|     }
 | |
|     if (!initializedAdjust) {
 | |
|       pendingAdjustEvents.add(adjustEvent);
 | |
|       Log.d("adjust not initialized!");
 | |
|       return;
 | |
|     }
 | |
|     if (EventLogger.dumpLog || kDebugMode) {
 | |
|       Log.d("[adjust] ${adjustEvent.toMap}");
 | |
|     }
 | |
|     if (pendingAdjustEvents.isNotEmpty) {
 | |
|       final events = List.of(pendingAdjustEvents);
 | |
|       pendingAdjustEvents.clear();
 | |
|       for (var event in events) {
 | |
|         Adjust.trackEvent(event);
 | |
|         if (EventLogger.dumpLog || kDebugMode) {
 | |
|           Log.d("[adjust] ${event.toMap}");
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     Adjust.trackEvent(adjustEvent);
 | |
|   }
 | |
| 
 | |
|   void _trackAllPendingAdjustEvent() {
 | |
|     if (!enabledAdjust) {
 | |
|       return;
 | |
|     }
 | |
|     final events = List.of(pendingAdjustEvents);
 | |
|     pendingAdjustEvents.clear();
 | |
|     for (var event in events) {
 | |
|       Adjust.trackEvent(event);
 | |
|       if (EventLogger.dumpLog || kDebugMode) {
 | |
|         Log.d("[adjust] ${event.toMap}");
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   AdjustEventConverter? getAdjustEventConverter(String eventName) {
 | |
|     return GuruAnalyticsStrategy.instance.getAdjustEventConverter(eventName) ??
 | |
|         GuruApp.instance.adjustProfile.eventNameMapping[eventName];
 | |
|   }
 | |
| 
 | |
| //
 | |
|   void _logAdjustEvent(String eventName, Map<String, dynamic> parameters) {
 | |
|     if (!enabledAdjust) {
 | |
|       return;
 | |
|     }
 | |
|     final AdjustEventConverter? adjustEventConverter = getAdjustEventConverter(eventName);
 | |
|     if (adjustEventConverter != null) {
 | |
|       AdjustEvent adjustEvent = adjustEventConverter(parameters);
 | |
|       Log.d("adjustEvent:${adjustEvent.toMap}");
 | |
|       _trackAdjustEvent(adjustEvent);
 | |
|     }
 | |
|   }
 | |
| }
 |