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);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |