🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / FLUTTER / Google Reklamları Banner Geçiş Reklamı vs AdMob Eklemek

1-) FLUTTER - Google Reklamları Banner Geçiş Reklamı vs AdMob Eklemek

 

flutter pub add google_mobile_ads

 

yenisinde bu paketi kullan ama bu makalede yok

 

 

kaynak : https://pub.dev/packages/admob_flutter/example

 

implementation 'com.google.android.gms:play-services-ads:19.4.0'

veya

implementation 'com.google.android.gms:play-services-ads:22.0.0'

 

EKRAN GÖRÜNTÜSÜ

 

 

*** İlk olarak uygulamanızı yayınlayın. sonra buradan uygulamanızı ekleyin link : https://apps.admob.com/  ***

 

 

*** ardından reklam birimi oluşturun . Örnek olarak Banner ile başlayalım... Size 2 tane id vericek...***

test manifest id : ca-app-pub-3940256099942544~3347511713

test banner id   : ca-app-pub-3940256099942544/6300978111

 

 

0-) Terminale

 

flutter pub add admob_flutter yaz ve entere bas ardından flutter pub get yaz

 

1-) AndroidManifest.xml

 

<uses-permission  android:name="android.permission.INTERNET" android:required="false" />

 


    
<meta-data
    
android:name="com.google.android.gms.ads.APPLICATION_ID"
    
android:value="ca-app-pub-3940256099942544~3347511713"/>

</application>

 

2-) main.dart

 

void main() {
  
WidgetsFlutterBinding.ensureInitialized();
  
// Initialize without device test ids
  
Admob.initialize();
  runApp(
MyApp());
}

 

3-) digerwidget.dart

 

GlobalKey<ScaffoldState> scaffoldState = GlobalKey();
late AdmobBannerSize bannerSize;
late AdmobInterstitial interstitialAd;
late AdmobReward rewardAd;

 

@override
void initState() {
  
super.initState();

  reklamBaslat();

}

 

void reklamBaslat() {
  
bannerSize = AdmobBannerSize.BANNER;

 
interstitialAd = AdmobInterstitial(
  adUnitId: getInterstitialAdUnitId()!,
  listener: (
AdmobAdEvent event, Map<String, dynamic>? args) {
    
if (event == AdmobAdEvent.closed) interstitialAd.load();
    handleEvent(event, args!,
'Interstitial');
  },
);

rewardAd = AdmobReward(
  adUnitId: getRewardBasedVideoAdUnitId()!,
  listener: (
AdmobAdEvent event, Map<String, dynamic>? args) {
    
if (event == AdmobAdEvent.closed) rewardAd.load();
    handleEvent(event, args!,
'Reward');
  },
);



  
interstitialAd.load();
  
rewardAd.load();

 

// başlatmak için show kullan

final isLoaded = await interstitialAd.isLoaded;
if (isLoaded ?? false) {
  
interstitialAd.show();
}


}

 

String getBannerAdUnitId() {
  
if (Platform.isIOS) {
    
return 'ca-app-pub-3940256099942544/2934735716';
  }
else if (Platform.isAndroid) {
    
return 'ca-app-pub-3940256099942544/6300978111'; // sadece bunu yaptım
  
}
return "";
}

String getInterstitialAdUnitId() { // geçiş tabanlı reklam
  
if (Platform.isIOS) {
    
return 'ca-app-pub-3940256099942544/4411468910';
  }
else if (Platform.isAndroid) {
    
return 'ca-app-pub-3940256099942544/1033173712';
  }
return "";
}

String getRewardBasedVideoAdUnitId() { // ödül tabanlı reklam
  
if (Platform.isIOS) {
    
return 'ca-app-pub-3940256099942544/1712485313';
  }
else if (Platform.isAndroid) {
    
return 'ca-app-pub-3940256099942544/5224354917';
  }
  
return null;
}

 

void showSnackBar(String content) {
  
ScaffoldMessenger.of(context).showSnackBar(
    
SnackBar(
      content:
Text(content),
      duration:
Duration(milliseconds: 1500),
    ),
  );
}

void handleEvent(
    
AdmobAdEvent event, Map<String, dynamic> args, String adType) {
  
switch (event) {
    
case AdmobAdEvent.loaded:
      showSnackBar(
'New Admob $adType Ad loaded!');
      
break;
    
case AdmobAdEvent.opened:
      showSnackBar(
'Admob $adType Ad opened!');
      
break;
    
case AdmobAdEvent.closed:
      showSnackBar(
'Admob $adType Ad closed!');
      
break;
    
case AdmobAdEvent.failedToLoad:
      showSnackBar(
'Admob $adType failed to load. :(');
      
break;
    
case AdmobAdEvent.rewarded:
      showDialog(
        context:
context,
        builder: (
BuildContext context) {
          
return WillPopScope(
            onWillPop: ()
async {
              
ScaffoldMessenger.of(context).hideCurrentSnackBar();
              
return true;
            },
            child:
AlertDialog(
              content:
Column(
                mainAxisSize:
MainAxisSize.min,
                children: <
Widget>[
                  
Text('Reward callback fired. Thanks Andrew!'),
                  
Text('Type: ${args['type']}'),
                  
Text('Amount: ${args['amount']}'),
                ],
              ),
            ),
          );
        },
      );
      
break;
    
default:
  }
}

 

4-) BANNER(SABİT ALTTA KUTUCUK ŞEKLİNDE) KULLANIMI

 

Container(
  child:
AdmobBanner(
    adUnitId: getBannerAdUnitId(),
    adSize:
bannerSize,
    listener: (
AdmobAdEvent event, Map<String, dynamic> args) {
      handleEvent(event, args,
'Banner');
    },
    onBannerCreated: (
AdmobBannerController controller) {
      
// Dispose is called automatically for you when Flutter removes the banner from the widget tree.
      // Normally you don't need to worry about disposing this yourself, it's handled.
      // If you need direct access to dispose, this is your guy!
      // controller.dispose();
    
},
  ),
),

 

4.1-) BANNER(SABİT ALTTA KUTUCUK ŞEKLİNDE) KULLANIMI(BU EN İYİSİ)

 

return SafeArea(
    child:
Column(
  children: [
    
Expanded(
      child:
Scaffold(

 

 ),
),
SizedBox(height: 60, child: AdContainer())

],
));

 

// yukarıdaki gici column içine alınır scoffold. aşağıdaki çağrılır

 

Widget AdContainer() {
  
return Container(
    child:
AdmobBanner(
      adUnitId: getBannerAdUnitId(),
      adSize:
AdmobBannerSize.ADAPTIVE_BANNER(
        width:
MediaQuery.of(context)
            .
size
            
.width
            
.toInt() , // considering EdgeInsets.all(20.0)
      
),
      onBannerCreated: (
AdmobBannerController controller) {
      },
    ),
  );
}

 

 

5-) interstitialAd GEÇİŞ REKLAM KULLANIMI

 

child: TextButton(
  onPressed: ()
async {
    
final isLoaded = await interstitialAd.isLoaded;
    
if (isLoaded ?? false) {
      interstitialAd.show();
    }
else {
      showSnackBar(
          
'Interstitial ad is still loading...');
    }
  },
  child: Text(
    
'Show Interstitial',
    style: TextStyle(color: Colors.white),
  ),
),

 

6-) rewardAd REKLAM KULLANIMI

 

child: TextButton(
  onPressed: ()
async {
    
if (await rewardAd.isLoaded) {
      rewardAd.show();
    }
else {
      showSnackBar(
'Reward ad is still loading...');
    }
  },
  child: Text(
    
'Show Reward',
    style: TextStyle(color: Colors.white),
  ),
),

 

 

*************DİĞER BİLGİLER*************

 

GERÇEK REKLAM BİLGİLERİ

 

AndroidManifest.xml

 

<meta-data
    
android:name="com.google.android.gms.ads.APPLICATION_ID"
    
android:value="ca-app-pub-4274612173345332~6322206475"/>

 

GERÇEK banner id :

 

ca-app-pub-4274612173345332/7659300882

 

TEST REKLAM BİLGİLERİ

 

<meta-data
    
android:name="com.google.android.gms.ads.APPLICATION_ID"
    
android:value="ca-app-pub-3940256099942544~3347511713"/>

 

ca-app-pub-3940256099942544/6300978111

 

 

 

 

 

*************İOS İÇİN BUNLARI EKLE *************

info.plist

 

<key>GADApplicationIdentifier</key>

<string>ca-app-pub-4274612173345332~1212687274</string>

<key>io.flutter.embedded_views_preview</key>

<true/>

<key>NSUserTrackingUsageDescription</key>

<string>This identifier will be used to deliver personalized ads to you.</string>

 

Future<void> main() async {

  WidgetsFlutterBinding.ensureInitialized();

  Admob.initialize();

  await Admob.requestTrackingAuthorization();

 

İZİN İSTEMEK İÇİN : https://pub.dev/packages/app_tracking_transparency YANİ EKLE flutter pub add app_tracking_transparency

 

 

if(Platform.isIOS){
  initPlugin();
}

 

String _authStatus = 'Unknown';

// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlugin() async {
  
final TrackingStatus status =
  
await AppTrackingTransparency.trackingAuthorizationStatus;
  setState(() =>
_authStatus = '$status');
  
// If the system can show an authorization request dialog
  
if (status == TrackingStatus.notDetermined) {
    
// Show a custom explainer dialog before the system dialog
    
await showCustomTrackingDialog(context);
    
// Wait for dialog popping animation
    
await Future.delayed(const Duration(milliseconds: 200));
    
// Request system's tracking authorization dialog
    
final TrackingStatus status =
    
await AppTrackingTransparency.requestTrackingAuthorization();
    setState(() =>
_authStatus = '$status');
  }

  
final uuid = await AppTrackingTransparency.getAdvertisingIdentifier();
  print(
"UUID: $uuid");
}

Future<void> showCustomTrackingDialog(BuildContext context) async =>
    
await showDialog<void>(
      context: context,
      builder: (context) =>
AlertDialog(
        title:
const Text('Dear User'),
        content:
const Text(
          
'We care about your privacy and data security. We keep this app free by showing ads. '
              'Can we continue to use your data to tailor ads for you?
\n\nYou can change your choice anytime in the app settings. '
              'Our partners will collect data and use a unique identifier on your device to show you ads.'
,
        ),
        actions: [
          
TextButton(
            onPressed: () =>
Navigator.pop(context),
            child:
const Text('Continue'),
          ),
        ],
      ),
    );

 

 

2-) APP STOREDA BUNLARI AÇMAN LAZIM

 

https://www.youtube.com/watch?v=ExwHuTt2vWQ&ab_channel=TihomirRAdeff

 

 2023 Ekim 24 Salı
 1,029