Wallpaper-Genie/lib/config/applovin.dart
xuhang-x 3bf5f4fa10 1
2024-07-26 18:41:05 +08:00

139 lines
4.5 KiB
Dart
Raw 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.

import 'dart:async';
import 'dart:math';
import 'package:applovin_max/applovin_max.dart';
import 'package:wallpaperx/common/utils/log_print.dart';
import 'package:wallpaperx/common/utils/shared_util.dart';
import 'package:wallpaperx/firebase/firebase_analytics_manager.dart';
class ApplovinUtil {
ApplovinUtil._();
static final ApplovinUtil _instance = ApplovinUtil._();
factory ApplovinUtil() => _instance;
/// sdkKey
final String applovinKey =
'HXOh4UBLahW9KzBBrxqwniKOvfD_JEDJgE9y2rv8DlmJaJ6xPEXUmmJyeAg0xipqdH_EiHg5NsnvfmIHubSu1k';
/// 广告单元Id
final String adUnitId = 'f4d33bc86b44eb24';
final List<String> adUnitIds = [
'e0ac389b7746be38',
'a8ecc9c457dee7bf',
'f4231f22c0314229',
];
/// 是否已初始化
bool isInitialized = false;
/// 是否是启动屏幕
bool isSplashScreen = true;
/// 重试计数
final _maxExponentialRetryCount = 6;
var _interstitialRetryAttempt = 0;
/// 初始化
Future<void> initApplovin() async {
MaxConfiguration? configuration = await AppLovinMAX.initialize(applovinKey);
if (configuration != null) {
isInitialized = true;
}
}
/// 初始化插页广告
void initializeInterstitialAds({required Function() onGoHomeTap}) {
if (isInitialized) {
AppLovinMAX.setInterstitialListener(InterstitialListener(
onAdLoadedCallback: (ad) async {
LogPrint.d('AdLoadedSuccess:${ad.adUnitId}');
if (ad.adUnitId == adUnitId && isSplashScreen) {
await showAdIfReady(adUnitId: adUnitId);
AppLovinMAX.loadInterstitial(adUnitId);
isSplashScreen = false;
onGoHomeTap();
}
_interstitialRetryAttempt = 0;
},
onAdLoadFailedCallback: (adUnitId, error) {
LogPrint.d(
'AdLoadFailed:$adUnitId,code:${error.code},message:${error.message}',
);
if (adUnitId == this.adUnitId && isSplashScreen) {
isSplashScreen = false;
onGoHomeTap();
}
// Applovin建议您以指数级更高的延迟重试最大延迟可达64秒
_interstitialRetryAttempt = _interstitialRetryAttempt + 1;
if (_interstitialRetryAttempt > _maxExponentialRetryCount) return;
int retryDelay = pow(
2,
min(
_maxExponentialRetryCount,
_interstitialRetryAttempt,
)).toInt();
Future.delayed(Duration(milliseconds: retryDelay * 1000), () {
AppLovinMAX.loadInterstitial(adUnitId);
});
},
onAdDisplayedCallback: (ad) {
LogPrint.d('AdDisplayedSuccess:${ad.adUnitId}');
UPCache.getInstance().setData<int>(
"lastAdTime",
DateTime.now().millisecondsSinceEpoch,
);
// 打点
FirebaseAnalyticsManager.logAdImpression(
ad.adUnitId, ad.networkName, 1, 1, 0);
},
onAdDisplayFailedCallback: (ad, error) {
LogPrint.d(
'AdDisplayFailed:${ad.adUnitId},code:${error.code},message:${error.message}',
);
// 打点
FirebaseAnalyticsManager.logAdImpression(
ad.adUnitId, ad.networkName, 1, 0, 1);
},
onAdClickedCallback: (ad) {},
onAdHiddenCallback: (ad) {
LogPrint.d('AdHidden:${ad.adUnitId}');
UPCache.getInstance().setData<int>(
"lastAdTime",
DateTime.now().millisecondsSinceEpoch,
);
AppLovinMAX.loadInterstitial(ad.adUnitId);
},
));
AppLovinMAX.loadInterstitial(adUnitId);
for (var e in adUnitIds) {
AppLovinMAX.loadInterstitial(e);
}
}
}
/// 显示插页广告,如果准备好
Future showAdIfReady({String? adUnitId}) async {
int lastAdTime = UPCache.getInstance().get<int>("lastAdTime") ?? 0;
int now = DateTime.now().millisecondsSinceEpoch;
DateTime timestamp1 = DateTime.fromMillisecondsSinceEpoch(lastAdTime);
DateTime timestamp2 = DateTime.fromMillisecondsSinceEpoch(now);
Duration difference = timestamp2.difference(timestamp1);
LogPrint.d("广告间隔:${difference.inSeconds}");
if (difference.inSeconds <= 5) return;
if (!isInitialized) return;
adUnitId ??= (adUnitIds..shuffle()).toList()[0];
bool isReady = (await AppLovinMAX.isInterstitialReady(adUnitId))!;
LogPrint.d("adUnitId:$adUnitId | isReady:$isReady");
if (isReady) {
AppLovinMAX.showInterstitial(adUnitId);
} else {
AppLovinMAX.loadInterstitial(adUnitId);
}
}
}