|
|
@@ -69,6 +69,18 @@ class ApplovinAdsController {
|
|
|
rewardCallback = null;
|
|
|
}
|
|
|
|
|
|
+ void showAppLovinDebugger() async {
|
|
|
+ // 检查 SDK 是否已初始化(可选,但推荐)
|
|
|
+ bool? isInitialized = await AppLovinMAX.isInitialized();
|
|
|
+
|
|
|
+ if (isInitialized == true) {
|
|
|
+ // 弹出 AppLovin 中介调试界面
|
|
|
+ AppLovinMAX.showMediationDebugger();
|
|
|
+ } else {
|
|
|
+ _log.warning("AppLovin SDK 尚未完成初始化,无法打开调试器。");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// Initializes the injected [MobileAds.instance].
|
|
|
Future<void> initialize() async {
|
|
|
if (_hasInit) return;
|
|
|
@@ -105,6 +117,9 @@ class ApplovinAdsController {
|
|
|
AppLovinMAX.setPrivacyPolicyUrl("https://longreachai.net/game/privacy_policy.html");
|
|
|
AppLovinMAX.setTermsOfServiceUrl("https://longreachai.net/game/terms_of_service.html");
|
|
|
|
|
|
+ // 用不着reward广告, 只初始化banner和interstitial
|
|
|
+ AppLovinMAX.setInitializationAdUnitIds([AdHelper.getApplovinBannerUnitId(_shouldSkipAds()), AdHelper.getApplovinInterstitialUnitId(_shouldSkipAds())]);
|
|
|
+
|
|
|
// 4. 然后再初始化 SDK
|
|
|
MaxConfiguration? sdkConfiguration = await AppLovinMAX.initialize(AdHelper.applovinSdkKey);
|
|
|
|
|
|
@@ -133,7 +148,7 @@ class ApplovinAdsController {
|
|
|
|
|
|
void initializeBannerAds() {
|
|
|
// 强制关闭低端机的自适应 Banner,因为其渲染开销极大
|
|
|
- AppLovinMAX.setBannerExtraParameter(AdHelper.applovinBannerAdUnitId, "adaptive_banner", _isLowRamDevice ? "false" : "true");
|
|
|
+ AppLovinMAX.setBannerExtraParameter(AdHelper.getApplovinBannerUnitId(_shouldSkipAds()), "adaptive_banner", _isLowRamDevice ? "false" : "true");
|
|
|
}
|
|
|
|
|
|
/// 强制销毁 Banner(解决 JNI CheckException 的大杀器)
|
|
|
@@ -142,7 +157,7 @@ class ApplovinAdsController {
|
|
|
_log.info("🔥 Explicitly destroying banner to release GPU buffers");
|
|
|
try {
|
|
|
// 强制通知原生层销毁 Banner 视图
|
|
|
- AppLovinMAX.destroyBanner(AdHelper.applovinBannerAdUnitId);
|
|
|
+ AppLovinMAX.destroyBanner(AdHelper.getApplovinBannerUnitId(_shouldSkipAds()));
|
|
|
} catch (e) {
|
|
|
_log.warning("Destroy banner error: $e");
|
|
|
}
|
|
|
@@ -156,7 +171,7 @@ class ApplovinAdsController {
|
|
|
|
|
|
return MaxAdView(
|
|
|
key: ValueKey(positionKey), // 只要 positionKey 不变,页面内刷新就不会重建
|
|
|
- adUnitId: AdHelper.applovinBannerAdUnitId,
|
|
|
+ adUnitId: AdHelper.getApplovinBannerUnitId(_shouldSkipAds()),
|
|
|
adFormat: AdFormat.banner,
|
|
|
placement: 'banner',
|
|
|
extraParameters: {'adaptive_banner': _isLowRamDevice ? 'false' : 'true'},
|
|
|
@@ -266,7 +281,7 @@ class ApplovinAdsController {
|
|
|
}
|
|
|
|
|
|
Future.delayed(Duration(milliseconds: retryDelay * 1000), () {
|
|
|
- AppLovinMAX.loadInterstitial(AdHelper.applovinInterstitialAdUnitId);
|
|
|
+ AppLovinMAX.loadInterstitial(AdHelper.getApplovinInterstitialUnitId(_shouldSkipAds()));
|
|
|
});
|
|
|
},
|
|
|
onAdDisplayedCallback: (ad) {
|
|
|
@@ -281,7 +296,7 @@ class ApplovinAdsController {
|
|
|
onAdHiddenCallback: (ad) {
|
|
|
_log.info('interstitialAd hidden');
|
|
|
interstitialAdState.value = AdState.dismissed; // 广告关闭
|
|
|
- AppLovinMAX.loadInterstitial(AdHelper.applovinInterstitialAdUnitId);
|
|
|
+ AppLovinMAX.loadInterstitial(AdHelper.getApplovinInterstitialUnitId(_shouldSkipAds()));
|
|
|
},
|
|
|
onAdRevenuePaidCallback: (ad) {
|
|
|
_log.info('woooooooooo, applovin interstitial paid event: revenue: ${ad.revenue}, precision: ${ad.revenuePrecision}');
|
|
|
@@ -306,13 +321,13 @@ class ApplovinAdsController {
|
|
|
return;
|
|
|
}
|
|
|
// 🔥 修复:安全解包
|
|
|
- bool? isReady = await AppLovinMAX.isInterstitialReady(AdHelper.applovinInterstitialAdUnitId);
|
|
|
+ bool? isReady = await AppLovinMAX.isInterstitialReady(AdHelper.getApplovinInterstitialUnitId(_shouldSkipAds()));
|
|
|
if (isReady == true) {
|
|
|
_log.info("applovin interstitial ad already ready, no need to load!");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- AppLovinMAX.loadInterstitial(AdHelper.applovinInterstitialAdUnitId);
|
|
|
+ AppLovinMAX.loadInterstitial(AdHelper.getApplovinInterstitialUnitId(_shouldSkipAds()));
|
|
|
}
|
|
|
|
|
|
Future<bool> isInterstitialAdReady() async {
|
|
|
@@ -324,7 +339,7 @@ class ApplovinAdsController {
|
|
|
return false;
|
|
|
}
|
|
|
// 🔥 修复:安全解包,防止崩溃
|
|
|
- bool? isReady = await AppLovinMAX.isInterstitialReady(AdHelper.applovinInterstitialAdUnitId);
|
|
|
+ bool? isReady = await AppLovinMAX.isInterstitialReady(AdHelper.getApplovinInterstitialUnitId(_shouldSkipAds()));
|
|
|
return isReady ?? false;
|
|
|
} catch (e) {
|
|
|
_log.warning('isInterstitialReady error: $e');
|
|
|
@@ -350,11 +365,11 @@ class ApplovinAdsController {
|
|
|
return;
|
|
|
}
|
|
|
// 🔥 修复:安全解包
|
|
|
- bool? isReady = await AppLovinMAX.isInterstitialReady(AdHelper.applovinInterstitialAdUnitId);
|
|
|
+ bool? isReady = await AppLovinMAX.isInterstitialReady(AdHelper.getApplovinInterstitialUnitId(_shouldSkipAds()));
|
|
|
if (isReady == true) {
|
|
|
- AppLovinMAX.showInterstitial(AdHelper.applovinInterstitialAdUnitId, placement: 'inters');
|
|
|
+ AppLovinMAX.showInterstitial(AdHelper.getApplovinInterstitialUnitId(_shouldSkipAds()), placement: 'inters');
|
|
|
} else {
|
|
|
- AppLovinMAX.loadInterstitial(AdHelper.applovinInterstitialAdUnitId);
|
|
|
+ AppLovinMAX.loadInterstitial(AdHelper.getApplovinInterstitialUnitId(_shouldSkipAds()));
|
|
|
}
|
|
|
} on PlatformException catch (e) {
|
|
|
_log.warning('PlatformException: $e');
|
|
|
@@ -368,6 +383,7 @@ class ApplovinAdsController {
|
|
|
var _rewardedAdRetryAttempt = 0;
|
|
|
|
|
|
void initializeRewardedAd() {
|
|
|
+ return;
|
|
|
AppLovinMAX.setRewardedAdListener(
|
|
|
RewardedAdListener(
|
|
|
onAdLoadedCallback: (ad) {
|
|
|
@@ -426,6 +442,7 @@ class ApplovinAdsController {
|
|
|
}
|
|
|
|
|
|
void loadRewardedAd() async {
|
|
|
+ return;
|
|
|
if (!_hasInit) return;
|
|
|
|
|
|
bool? isInit = await AppLovinMAX.isInitialized();
|