Admob geçiş reklamları ile ilgili bir sıkıntım var yardımcı olur musunuz?
(Son 30 gün)
interstitial ad:
istek sayısı - 8.923
gösterim sayısı - 11
Eşleşme oranı - %1.26
(Son 7 gün)
istek- 961
gösterim - 5
eşleşme oranı- %6.24
Banner ve ödüllü reklamlarda sorun yok onların eşleşme oranı %98-%100 arasında.
Geçiş reklamında şöyle bir mantık kurdum.
Uygulama başında loadAd çağırılır.
Bir sayaç var, ayarlar sekmesine her tıklandığında 1 artırıyorum. 10 ve katı olunca da reklamı gösteriyorum.
Reklam yüklenmezse her 20 saniyede bir tekrar loadAd ile reklam yüklemeye çalışıyorum.
Bu timer kullanma fikri internette yazıyor fakat örnek koda hiç denk gelmedim. Nerede hata yaptığımı bulamadım.
Öncelikle reklam yüklenemediğinde preiyodik olarak reklam araması yapan örnek bir kod var mı? Bir süredir arıyorum bulamadım. Profesyonel yazılımcılar mantığı nasıl kuruyor onu öğrenmek için soruyorum.
Edit: Kodum böyle, başta üstünkörü yazmıştım sonra kafam karışınca böyle kaldı.
import 'dart:io' show Platform;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:zikirmatik/admob/ads_ids.dart';
import 'package:zikirmatik/main.dart';
import '../ad_manager.dart';
class AdInterstitial {
InterstitialAd? _interstitialAd;
AdState _adState = AdState.NULL;
void setAdState(AdState adState) {
if (_adState == adState) return;
_adState = adState;
}
final adUnitId = !kDebugMode ? Gecis_Ad_Id : TEST_INTERSTITIAL_AD_ID;
static int _gecisReklamSayac = 0;
static const _SHOW_AD_COUNT_LIMIT = 10;
Future<void> showAdWithCounter() async {
if (isPremium) return;
//print('<< $_adState');
if (_gecisReklamSayac % _SHOW_AD_COUNT_LIMIT == 0) {
_gecisReklamSayac = 0;
await _showAd();
}
// else if (_adState == AdState.NULL) {
// loadAd();
// }
_gecisReklamSayac++;
}
Future<void> _showAd() async {
if (isPremium) {
if (_interstitialAd != null) {
await disposeAd();
}
return;
}
await _interstitialAd?.show();
}
Future<void> disposeAd() async {
if (_interstitialAd == null) return;
await _interstitialAd?.dispose();
_interstitialAd = null;
}
/// Loads an interstitial ad.
Future<void> loadAd() async {
if (isPremium ||
_adState == AdState.loading ||
_adState == AdState.waiting) {
return;
}
setAdState(AdState.loading);
InterstitialAd.load(
adUnitId: adUnitId,
request: const AdRequest(),
adLoadCallback: InterstitialAdLoadCallback(
// Called when an ad is successfully received.
onAdLoaded: (ad) {
ad.fullScreenContentCallback = FullScreenContentCallback(
// Called when the ad showed the full screen content.
onAdShowedFullScreenContent: (ad) {
// debugPrint('<< onAdShowedFullScreenContent: ');
},
// Called when an impression occurs on the ad.
onAdImpression: (ad) {},
// Called when the ad failed to show full screen content.
onAdFailedToShowFullScreenContent: (ad, err) async {
// Dispose the ad here to free resources.
// await ad.dispose();
// _interstitialAd = null;
////????????
// await disposeAd();
// loadAd();
},
// Called when the ad dismissed full screen content.
onAdDismissedFullScreenContent: (ad) async {
// Dispose the ad here to free resources.
//debugPrint('<< onAdDismissedFullScreenContent: ');
await disposeAd();
await loadAd();
// await _searchAdAsync();
},
// Called when a click is recorded for an ad.
onAdClicked: (ad) {},
);
debugPrint('$ad loaded.');
// Keep a reference to the ad so you can show it later.
_interstitialAd = ad;
setAdState(AdState.complete);
},
// Called when an ad request failed.
onAdFailedToLoad: (LoadAdError error) async {
debugPrint('<< InterstitialAd failed to load: $error');
setAdState(AdState.fail);
await disposeAd();
await _searchAdAsync();
},
));
}
static const Duration _adLoadWait = Duration(seconds: 20);
Future<void> _searchAdAsync() async {
if (_adState == AdState.waiting || _adState == AdState.loading) return;
setAdState(AdState.waiting);
await Future.delayed(_adLoadWait);
setAdState(AdState.NULL);
await loadAd();
}
}
bilen arkadaşlar daha iyi yardımcı olur