|
|
@@ -10,9 +10,8 @@ import 'package:flutter/foundation.dart';
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:flutter/services.dart';
|
|
|
import 'package:logging/logging.dart';
|
|
|
-import 'package:provider/provider.dart';
|
|
|
import 'package:puzzleweave/ads/ad_helper.dart';
|
|
|
-import 'package:puzzleweave/config/device.dart';
|
|
|
+import 'package:puzzleweave/firebase/adjust_helper.dart';
|
|
|
import 'package:puzzleweave/firebase/firebase_helper.dart';
|
|
|
|
|
|
import '../persistence/persistence.dart';
|
|
|
@@ -85,6 +84,7 @@ class ApplovinAdsController {
|
|
|
Widget get bannerAdWidget => MaxAdView(
|
|
|
adUnitId: AdHelper.applovinBannerAdUnitId,
|
|
|
adFormat: AdFormat.banner,
|
|
|
+ placement: 'banner',
|
|
|
extraParameters: const {'adaptive_banner': 'true'},
|
|
|
listener: AdViewAdListener(
|
|
|
onAdLoadedCallback: (ad) {
|
|
|
@@ -112,56 +112,56 @@ class ApplovinAdsController {
|
|
|
onAdRevenuePaidCallback: (ad) {
|
|
|
_log.info('woooooooooo, applovin banner paid event: revenue: ${ad.revenue} precision: ${ad.revenuePrecision}');
|
|
|
if (ad.revenue > 0) {
|
|
|
- onBannerAdPaid(ad.revenue * 1000000, 'USD', ad); // revenue 单位转化为 valueMicro,以便和admod一致
|
|
|
+ onAdRevenuePaid(ad); // revenue 单位转化为 valueMicro,以便和admod一致
|
|
|
}
|
|
|
},
|
|
|
),
|
|
|
);
|
|
|
|
|
|
- // banner广告收益回调的处理
|
|
|
- onBannerAdPaid(double valueMicros, String currencyCode, MaxAd ad) async {
|
|
|
- // 原来的逻辑
|
|
|
- bannerPaidValueMicros += valueMicros;
|
|
|
- int nowTimestamp = DateTime.now().millisecondsSinceEpoch;
|
|
|
- if ((nowTimestamp - lastBannerPaidReportTimestamp) >= bannerReportDuration) {
|
|
|
- _log.info('report banner ad paid: ${bannerPaidValueMicros / 1000000}$currencyCode');
|
|
|
- FirebaseHelper.logEvent("ad_impression", {
|
|
|
- "ad_count": 1,
|
|
|
- "ad_platform": 'appLovin',
|
|
|
- "ad_source": ad.networkName,
|
|
|
- "ad_format": 'banner',
|
|
|
- "ad_unit_name": ad.adUnitId,
|
|
|
- "value": bannerPaidValueMicros / 1000000,
|
|
|
- "currency": "USD",
|
|
|
- });
|
|
|
- Statistics.postEvent({
|
|
|
- "project_id": Persistence().projectId,
|
|
|
- "user_id": Persistence().uuid,
|
|
|
- "library_name": Persistence().libraryName,
|
|
|
- "library_version": Persistence().packageVersion,
|
|
|
- "name": "revenue",
|
|
|
- "sku_id": '',
|
|
|
- "tab_source": 'play',
|
|
|
- "ad_src": 'play',
|
|
|
- "ad_count": bannerPaidValueMicros ~/ valueMicros,
|
|
|
- "ad_type": 'banner',
|
|
|
- "ad_rev": bannerPaidValueMicros / 1000000,
|
|
|
- });
|
|
|
- bannerPaidValueMicros = 0; // 累计清零
|
|
|
- lastBannerPaidReportTimestamp = nowTimestamp;
|
|
|
- Persistence().lastBannerPaidReportTimestamp = lastBannerPaidReportTimestamp;
|
|
|
- }
|
|
|
- Persistence().bannerPaidValueMicros = bannerPaidValueMicros;
|
|
|
-
|
|
|
- // 新的逻辑, 累计收益超过规定阈值,上报firebase和appsflyer
|
|
|
- allPaidValueMicros += valueMicros;
|
|
|
- if ((allPaidValueMicros / 1000000) >= revenueThreshold) {
|
|
|
- _log.info('report all ad paid: ${allPaidValueMicros / 1000000}$currencyCode');
|
|
|
- FirebaseHelper.logEvent("ad_paid", {"currency": currencyCode, "value": allPaidValueMicros / 1000000});
|
|
|
- // AppsflyerHelper.logEvent("ad_paid", {"af_currency": currencyCode, "af_revenue": allPaidValueMicros / 1000000});
|
|
|
- allPaidValueMicros = 0; // 累计清零
|
|
|
+ // revenue 回调处理,所有广告类型统一在此处理
|
|
|
+ onAdRevenuePaid(MaxAd ad) async {
|
|
|
+ _log.info('report ad revenue paid: ${ad.revenue}');
|
|
|
+
|
|
|
+ Map<String, Object> params = {
|
|
|
+ "ad_platform": 'appLovin',
|
|
|
+ "ad_source": ad.networkName,
|
|
|
+ "ad_format": ad.placement,
|
|
|
+ "ad_unit_name": ad.adUnitId,
|
|
|
+ "value": ad.revenue,
|
|
|
+ "currency": "USD",
|
|
|
+ };
|
|
|
+
|
|
|
+ // for ARO : ad_impression 上报给firebase
|
|
|
+ FirebaseHelper.logEvent("ad_impression", params);
|
|
|
+ // for Taichi
|
|
|
+ FirebaseHelper.logEvent('"Ad_Impression_Revenue', params);
|
|
|
+
|
|
|
+ // 累计超过0.01 USD 上报 Total_Ads_Revenue_001
|
|
|
+ double previousTroasCache = Persistence().tRoasCache;
|
|
|
+ double currentTroasCache = previousTroasCache + ad.revenue;
|
|
|
+ if (currentTroasCache >= revenueThreshold) {
|
|
|
+ FirebaseHelper.logEvent('"Total_Ads_Revenue_001', {"value": currentTroasCache, "currency": "USD"});
|
|
|
+ Persistence().tRoasCache = 0; // 缓存清零
|
|
|
+ } else {
|
|
|
+ Persistence().tRoasCache = currentTroasCache;
|
|
|
}
|
|
|
- Persistence().allPaidValueMicros = allPaidValueMicros;
|
|
|
+
|
|
|
+ // adRevenue 事件上报给adjust
|
|
|
+ AdjustHelper.trackAdRevenue(ad.placement, 1, ad.revenue, 'USD');
|
|
|
+
|
|
|
+ // revenue 埋点时间上报给自主BI平台
|
|
|
+ Statistics.postEvent({
|
|
|
+ "project_id": Persistence().projectId,
|
|
|
+ "user_id": Persistence().uuid,
|
|
|
+ "library_name": Persistence().libraryName,
|
|
|
+ "library_version": Persistence().packageVersion,
|
|
|
+ "name": 'revenue',
|
|
|
+ "tab_source": adSrc,
|
|
|
+ "sku_id": skuId,
|
|
|
+ "ad_src": adSrc,
|
|
|
+ "ad_type": ad.placement,
|
|
|
+ "ad_rev": ad.revenue,
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
//////////////////////////// interstitialAd /////////////////////////////
|
|
|
@@ -211,7 +211,7 @@ class ApplovinAdsController {
|
|
|
onAdRevenuePaidCallback: (ad) {
|
|
|
_log.info('woooooooooo, applovin interstitial paid event: revenue: ${ad.revenue}, precision: ${ad.revenuePrecision}');
|
|
|
if (ad.revenue > 0) {
|
|
|
- onInterstitialAdPaid(ad.revenue * 1000000, 'USD', ad); // revenue 单位转化为 valueMicro,以便和admod一致
|
|
|
+ onAdRevenuePaid(ad); // revenue 单位转化为 valueMicro,以便和admod一致
|
|
|
}
|
|
|
},
|
|
|
),
|
|
|
@@ -267,7 +267,7 @@ class ApplovinAdsController {
|
|
|
}
|
|
|
bool isReady = (await AppLovinMAX.isInterstitialReady(AdHelper.applovinInterstitialAdUnitId))!;
|
|
|
if (isReady) {
|
|
|
- AppLovinMAX.showInterstitial(AdHelper.applovinInterstitialAdUnitId);
|
|
|
+ AppLovinMAX.showInterstitial(AdHelper.applovinInterstitialAdUnitId, placement: 'inters');
|
|
|
} else {
|
|
|
AppLovinMAX.loadInterstitial(AdHelper.applovinInterstitialAdUnitId);
|
|
|
}
|
|
|
@@ -278,43 +278,6 @@ class ApplovinAdsController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- onInterstitialAdPaid(double valueMicros, String currencyCode, MaxAd ad) async {
|
|
|
- // 老的逻辑,每次收益都上报
|
|
|
- _log.info('report interstitial ad paid: ${valueMicros / 1000000}$currencyCode');
|
|
|
- FirebaseHelper.logEvent("ad_impression", {
|
|
|
- "ad_count": 1,
|
|
|
- "ad_platform": 'appLovin',
|
|
|
- "ad_source": ad.networkName,
|
|
|
- "ad_format": 'inters',
|
|
|
- "ad_unit_name": ad.adUnitId,
|
|
|
- "value": valueMicros / 1000000,
|
|
|
- "currency": "USD",
|
|
|
- });
|
|
|
- Statistics.postEvent({
|
|
|
- "project_id": Persistence().projectId,
|
|
|
- "user_id": Persistence().uuid,
|
|
|
- "library_name": Persistence().libraryName,
|
|
|
- "library_version": Persistence().packageVersion,
|
|
|
- "name": 'revenue',
|
|
|
- "tab_source": adSrc,
|
|
|
- "sku_id": skuId,
|
|
|
- "ad_src": adSrc,
|
|
|
- "ad_count": 1,
|
|
|
- "ad_type": "inters",
|
|
|
- "ad_rev": valueMicros / 1000000,
|
|
|
- });
|
|
|
-
|
|
|
- // 新的逻辑, 累计收益超过规定阈值,上报firebase和appsflyer
|
|
|
- allPaidValueMicros += valueMicros;
|
|
|
- if ((allPaidValueMicros / 1000000) >= revenueThreshold) {
|
|
|
- _log.info('report all ad paid: ${allPaidValueMicros / 1000000}$currencyCode');
|
|
|
- FirebaseHelper.logEvent("ad_paid", {"currency": currencyCode, "value": allPaidValueMicros / 1000000});
|
|
|
- // AppsflyerHelper.logEvent("ad_paid", {"af_currency": currencyCode, "af_revenue": allPaidValueMicros / 1000000});
|
|
|
- allPaidValueMicros = 0; // 累计清零
|
|
|
- }
|
|
|
- Persistence().allPaidValueMicros = allPaidValueMicros;
|
|
|
- }
|
|
|
-
|
|
|
//////////////////////////// rewardedAd /////////////////////////////
|
|
|
ValueNotifier<AdState> rewardedAdState = ValueNotifier(AdState.initial);
|
|
|
var _rewardedAdRetryAttempt = 0;
|
|
|
@@ -364,7 +327,7 @@ class ApplovinAdsController {
|
|
|
onAdRevenuePaidCallback: (ad) {
|
|
|
_log.info('woooooooooo, applovin rewarded paid event: revenue: ${ad.revenue} precision: ${ad.revenuePrecision}');
|
|
|
if (ad.revenue > 0) {
|
|
|
- onRewardedAdPaid(ad.revenue * 1000000, 'USD', ad); // revenue 单位转化为 valueMicro,以便和admod一致
|
|
|
+ onAdRevenuePaid(ad); // revenue 单位转化为 valueMicro,以便和admod一致
|
|
|
}
|
|
|
},
|
|
|
),
|
|
|
@@ -423,7 +386,7 @@ class ApplovinAdsController {
|
|
|
}
|
|
|
bool isReady = (await AppLovinMAX.isRewardedAdReady(AdHelper.applovinRewardedAdUnitId))!;
|
|
|
if (isReady) {
|
|
|
- AppLovinMAX.showRewardedAd(AdHelper.applovinRewardedAdUnitId);
|
|
|
+ AppLovinMAX.showRewardedAd(AdHelper.applovinRewardedAdUnitId, placement: 'reward');
|
|
|
rewardCallback = onUserEarnedReward;
|
|
|
return true;
|
|
|
} else {
|
|
|
@@ -438,41 +401,4 @@ class ApplovinAdsController {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- onRewardedAdPaid(double valueMicros, String currencyCode, MaxAd ad) async {
|
|
|
- // 老的逻辑,每次收益都上报
|
|
|
- _log.info('report rewarded ad paid: ${valueMicros / 1000000}$currencyCode');
|
|
|
- FirebaseHelper.logEvent("ad_impression", {
|
|
|
- "ad_count": 1,
|
|
|
- "ad_platform": 'appLovin',
|
|
|
- "ad_source": ad.networkName,
|
|
|
- "ad_format": 'reward',
|
|
|
- "ad_unit_name": ad.adUnitId,
|
|
|
- "value": valueMicros / 1000000,
|
|
|
- "currency": "USD",
|
|
|
- });
|
|
|
- Statistics.postEvent({
|
|
|
- "project_id": Persistence().projectId,
|
|
|
- "user_id": Persistence().uuid,
|
|
|
- "library_name": Persistence().libraryName,
|
|
|
- "library_version": Persistence().packageVersion,
|
|
|
- "name": 'revenue',
|
|
|
- "tab_source": adSrc,
|
|
|
- "sku_id": skuId,
|
|
|
- "ad_src": adSrc,
|
|
|
- "ad_count": 1,
|
|
|
- "ad_type": "reward",
|
|
|
- "ad_rev": valueMicros / 1000000,
|
|
|
- });
|
|
|
-
|
|
|
- // 新的逻辑, 累计收益超过规定阈值,上报firebase和appsflyer
|
|
|
- allPaidValueMicros += valueMicros;
|
|
|
- if ((allPaidValueMicros / 1000000) >= revenueThreshold) {
|
|
|
- _log.info('report all ad paid: ${allPaidValueMicros / 1000000}$currencyCode');
|
|
|
- FirebaseHelper.logEvent("ad_paid", {"currency": currencyCode, "value": allPaidValueMicros / 1000000});
|
|
|
- // AppsflyerHelper.logEvent("ad_paid", {"af_currency": currencyCode, "af_revenue": allPaidValueMicros / 1000000});
|
|
|
- allPaidValueMicros = 0; // 累计清零
|
|
|
- }
|
|
|
- Persistence().allPaidValueMicros = allPaidValueMicros;
|
|
|
- }
|
|
|
}
|