initialize static method
Future<AdsService>
initialize({
- required AdsKeyProvider keyProvider,
- ProChecker? isProUser,
- AdsConsentChecker? consentChecker,
- AdsSdkInitializer? sdkInitializer,
Implementation
static Future<AdsService> initialize({
required AdsKeyProvider keyProvider,
ProChecker? isProUser,
AdsConsentChecker? consentChecker,
AdsSdkInitializer? sdkInitializer,
}) async {
// ✅ If already initialized, return.
if (_instance != null && _instance!._initialized) return _instance!;
// ✅ Reuse existing instance (even if created via instance getter)
final service = _instance ?? AdsService._();
_instance = service;
if (isProUser != null) service._isProUser = isProUser;
service._keyProvider = keyProvider;
service._consentChecker = consentChecker;
service._sdkInitializer = sdkInitializer ?? () async {
await MobileAds.instance.initialize();
};
// Fetch config
final fetchedConfig = await keyProvider.getConfig();
service._consentAllowed = await service._readConsent();
service._config = service._configWithConsent(fetchedConfig);
service._retryManager = AdsRetryManager(service._config);
// Configure connectivity
AdsConnectivity.configure(
recheckInterval: service._config.connectivityRecheckInterval,
);
if (!service._config.adsEnabled || !service._consentAllowed) {
// Mark initialized even if ads are disabled — so app won't try re-init
// loops and, importantly, do not initialize Mobile Ads in no-ad mode.
service._initialized = true;
dPrint(
'🚫 AdsService: ads are currently unavailable (initialized in no-ads mode)',
);
return service;
}
// Init Mobile Ads only after config and consent have allowed ad access.
if (!await service._initializeSdkIfNeeded()) {
service._retryManager = AdsRetryManager(service._config);
service._initialized = true;
return service;
}
// Mark initialized only after the SDK has initialized successfully.
service._initialized = true;
// Create handlers for available types
service._createHandlers();
// App-state listening only matters if app-open ads are enabled.
service._startAppOpenLifecycle();
// Preload
if (service._config.preloadEnabled && !service._isProUser()) {
service._preloadAll();
}
dPrint('✅ AdsService initialized: ${service._config.availableAdTypes}');
return service;
}