Wallpaper-Genie/lib/ads/interstitial_ad_manage.dart

160 lines
4.6 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Author: fengshengxiong
// Date: 2024/5/20
// Description: 插页广告管理
import 'dart:async';
import 'dart:io';
import 'package:applovin_max/applovin_max.dart';
import 'package:get/get.dart';
import 'package:wallpaperx/common/utils/log_print.dart';
import 'package:wallpaperx/common/utils/num_util.dart';
import 'package:wallpaperx/common/utils/shared_util.dart';
import 'package:wallpaperx/firebase/firebase_analytics_manager.dart';
import 'package:wallpaperx/page/launch/launch_controller.dart';
class InterstitialAdManager {
InterstitialAdManager._();
static final InterstitialAdManager _instance = InterstitialAdManager._();
factory InterstitialAdManager() => _instance;
/// sdkKey
final String applovinKey = 'HXOh4UBLahW9KzBBrxqwniKOvfD_JEDJgE9y2rv8DlmJaJ6xPEXUmmJyeAg0xipqdH_EiHg5NsnvfmIHubSu1k';
/// 开屏广告
final launchAdId = Platform.isAndroid ? '' : 'f4d33bc86b44eb24';
/// 广告单元Id
final adIds = [
Platform.isAndroid ? '' : 'e0ac389b7746be38',
Platform.isAndroid ? '' : 'a8ecc9c457dee7bf',
Platform.isAndroid ? '' : 'f4231f22c0314229',
];
/// 是否已初始化
bool isInitialized = false;
/// 是否显示
bool isShowingAd = false;
/// 重试计数
// final _maxExponentialRetryCount = 6;
// var _interstitialRetryAttempt = 0;
Function()? onTap;
/// 初始化
Future<void> init() async {
try {
MaxConfiguration? configuration = await AppLovinMAX.initialize(applovinKey);
if (configuration != null) {
isInitialized = true;
_attachAdListeners();
}
} catch (e) {
LogPrint.d(e.toString());
}
}
/// 广告监听
void _attachAdListeners() {
AppLovinMAX.setInterstitialListener(InterstitialListener(
onAdLoadedCallback: (ad) async {
LogPrint.d('插页广告加载成功:${ad.adUnitId}');
if (ad.adUnitId == launchAdId) {
if (Get.isRegistered<LaunchController>()) {
LaunchController.to.editChangeValue();
}
}
// _interstitialRetryAttempt = 0;
},
onAdLoadFailedCallback: (adUnitId, error) {
LogPrint.d('插页广告加载失败adUnitId:$adUnitId,code:${error.code},message:${error.message}');
// Applovin建议您以指数级更高的延迟重试最大延迟可达64秒
// _interstitialRetryAttempt = _interstitialRetryAttempt + 1;
// if (_interstitialRetryAttempt > _maxExponentialRetryCount) return;
// int retryDelay = pow(2, min(_maxExponentialRetryCount, _interstitialRetryAttempt)).toInt();
Future.delayed(const Duration(seconds: 10), () {
AppLovinMAX.loadInterstitial(adUnitId);
});
},
onAdDisplayedCallback: (ad) {
LogPrint.d('插页广告显示成功:${ad.adUnitId}');
isShowingAd = true;
FirebaseAnalyticsManager.logAdsShow();
},
onAdDisplayFailedCallback: (ad, error) {
LogPrint.d('插页广告显示失败adUnitId:${ad.adUnitId},code:${error.code},message:${error.message}');
isShowingAd = false;
_handleOnTap();
},
onAdClickedCallback: (ad) {},
onAdHiddenCallback: (ad) {
LogPrint.d('插页广告关闭:${ad.adUnitId}');
isShowingAd = false;
AppLovinMAX.loadInterstitial(ad.adUnitId);
_handleOnTap();
},
));
}
void loadAllAd() {
bool adSwitch = UPCache.getInstance().get<bool>('adSwitch') ?? false;
if (!adSwitch) {
return;
}
if (!isInitialized) {
return;
}
AppLovinMAX.loadInterstitial(launchAdId);
for (var id in adIds) {
AppLovinMAX.loadInterstitial(id);
}
LogPrint.d('插页广告正在加载');
}
/// 显示插页广告,如果准备好
Future<void> showAdIfReady({bool showLaunchAd = false, Function()? onTap}) async {
if (onTap != null) {
this.onTap = onTap;
}
bool adSwitch = UPCache.getInstance().get<bool>('adSwitch') ?? false;
if (!adSwitch) {
_handleOnTap();
return;
}
if (!isInitialized) {
_handleOnTap();
return;
}
var adId = launchAdId;
if (!showLaunchAd) {
int index = NumUtil.getRandomNumber(0, 3);
adId = adIds[index];
}
bool isReady = (await AppLovinMAX.isInterstitialReady(adId))!;
if (isReady) {
if (isShowingAd) {
LogPrint.d('尝试在已显示广告的情况下显示广告');
_handleOnTap();
return;
}
AppLovinMAX.showInterstitial(adId);
} else {
_handleOnTap();
AppLovinMAX.loadInterstitial(adId);
}
}
void _handleOnTap() {
if (onTap != null) {
onTap!();
onTap = null;
}
}
}