• 27-06-2024, 15:32:55
    #1
    Selamun aleykum,
    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();
      }
    }
  • 27-06-2024, 15:48:40
    #2
    Merhaba, daha önce bunun entegrasyonunu yapmadım ama yazarak düşünüyorum;

    İlk widget initstate periodic timer ile reklam yüklemeye çalış
    Reklam yüklenmezse her 20 saniyede bir denemeye devam et
    Reklam yüklenirse reklamı async yükleyip reklam bittiken sonra then ile tekrar timer başlat
  • 27-06-2024, 16:07:36
    #3
    aliumac adlı üyeden alıntı: mesajı görüntüle
    Merhaba, daha önce bunun entegrasyonunu yapmadım ama yazarak düşünüyorum;

    İlk widget initstate periodic timer ile reklam yüklemeye çalış
    Reklam yüklenmezse her 20 saniyede bir denemeye devam et
    Reklam yüklenirse reklamı async yükleyip reklam bittiken sonra then ile tekrar timer başlat
    Hocam dediğin methodun daha uzun haliyle yazmıştım zaten. Şimdi kodu ekledim. Yorum satırıyla geçersiz kılınan kod satırları da mevcut karışıklık olmasın. Burada isteği artırıp gösterimi düşük tutacak hatayı bulamadım.

    Kodu basitleştirecek tavsiyelere de açığım. Periodic ve then metodları da adapte edilebilir galiba dediğiniz gibi.
  • 27-06-2024, 16:39:36
    #4
    Kusura bakmayın reklamdan pek anlamıyorum kod için sadece yardımcı olmak istemiştim bilen arkadaşlar daha iyi yardımcı olur
  • 28-06-2024, 13:27:08
    #5
    aliumac adlı üyeden alıntı: mesajı görüntüle
    Kusura bakmayın reklamdan pek anlamıyorum kod için sadece yardımcı olmak istemiştim bilen arkadaşlar daha iyi yardımcı olur
    Estağfirullah hocam. Cevap veren olmadı daha. Genelde standart kodlar paylaşılıyor hep. Bu şekilde tekrar denemeli koda denk gelmedim. Büyük ihtimal istek gösterim farkı oradan geliyor ama sorunu tespit edemedim bir türlü