SwiftUI’da Google AdMob Kullanımı: Örnek Uygulama ile Reklam Entegrasyonunun Püf Noktaları

Onurcan Köroğlu
Appcent
Published in
5 min readMar 12, 2024

--

Giriş

Mobil uygulama geliştiricileri için gelir elde etmenin en etkili yollarından biri reklam entegrasyonudur. Bu makalede, SwiftUI kullanarak Admob reklamlarını nasıl entegre edebileceğinizi gösteren örnek bir uygulama üzerinden adım adım ilerleyeceğiz.

Google Admob ile gelir elde etme

Başlayalım!

İlk olarak bu adresten Google Mobile Ads SDK’yı indirerek başlıyoruz. İndirilen zip dosyasını açıp içindeki GoogleMobileAds.xcframework klasörünü uygulamamızın içine sürüklüyoruz. Swift Package Manager veya CocoaPods gibi bağımlılık araçlarını kullanmadan SDK’mızı basitçe uygulamamıza eklemiş oluyoruz. Burada dikkat edilmesi gereken birkaç madde var:

1) Uygulamamızın Firebase’e bağlı olması gerekiyor. Admob ile Firebase’in bağlanması verilerimizi analiz etmemiz için birçok avantaj sağlayacaktır. Bağlamak istemezseniz Admob’un SDK dokümanında Firebase kullanmadan bağlayanlar için bilgiler mevcut, inceleyip gerekli düzenlemeleri yapabilirsiniz.

2) Uygulamamızın Info.Plist kısmına bu alttaki görseldeki değerleri ekliyoruz.

Info.Plist

3) Targets’ta uygulamaya tıklayınca çıkan menüden Build Settings’e tıklayıp Linking — General içerisindeki alana aşağıda görülen değerleri ekliyoruz.

Build Settings

Bu değerleri eklerken linklerini verdiğim StackOverflow başlıklarından ve Google Admob SDK dokümanından (SKAdNetworkItems/ GADApplicationIdentifier / Other Linker Flags) faydalanabilirsiniz.

Reklam sunumuna artık başlayabiliriz!

İlk olarak Banner reklamı ile başlıyoruz.

1- SwiftUI’da Banner Reklam Gösterimi

Google Mobile Ads SDK’yı başarıyla kurduktan ve projenize dahil ettikten sonra, artık SwiftUI uygulamanızda Banner reklamlarını gösterebilirsiniz. Bu bölümde, SwiftUI’da bir Banner reklamı nasıl oluşturulacağını ve gösterileceğini adım adım inceleyeceğiz.

1.A) Banner Reklamı İçin Görünüm Oluşturma

SwiftUI’da bir Banner reklamı oluşturmak için, öncelikle reklamı tutacak bir görünüm oluşturmanız gerekmektedir. Bu görünüm, UIViewRepresentable protokolünü uygulayarak UIKit tabanlı bir GADBannerView’i SwiftUI içerisinde kullanmanızı sağlar.

import SwiftUI
import GoogleMobileAds

struct BannerVC: UIViewControllerRepresentable {

func makeUIViewController(context: Context) -> UIViewController {

let view = GADBannerView(adSize: GADAdSizeBanner)
let viewController = UIViewController()

view.adUnitID = bannerID
view.rootViewController = viewController
viewController.view.addSubview(view)
viewController.view.frame = CGRect(origin: .zero, size: GADAdSizeBanner.size)
view.load(GADRequest())

return viewController
}

func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
}

struct BannerView: View {
var body: some View {
VStack (spacing: 0) {
Rectangle()
.fill(Color.gray.opacity(0.25))
.frame(height: 1)
.padding(.bottom, 14)
HStack {
Spacer()
BannerVC().frame(width: 320, height: 50, alignment: .center)
Spacer()
}
}
}
}

Bu kod parçasında, BannerVC adında bir SwiftUI görünümü oluşturuyoruz. Bu görünüm, GADBannerView’i içerir ve reklamın boyutu, reklam birimi kimliği ve root view controller gibi özelliklerini ayarlar. Reklamı yüklemek için banner.load(GADRequest()) ifadesini kullanıyoruz. Banner’ın üstüne bir ayırıcı çizgi ekliyoruz. Böyle bir zorunluluk yok fakat ileride yaşanacak politika ihlallerine karşın bir önlem olarak eklemek faydalı olacaktır. En son kullanacağımız BannerView görüntüsünü elde ediyoruz. Bu view’ı bir sonraki maddede arayüze ekleyeceğiz.

1.B) Banner Reklamını Arayüze Ekleme

Artık en son oluşan bu BannerView görünümünüzü SwiftUI arayüzünüze ekleyebiliriz.

import SwiftUI
import Firebase
import GoogleMobileAds

@main
struct AdmobSwiftUIDemoApp: App {

@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate

var body: some Scene {
WindowGroup {
VStack (spacing: 0) {
NavigationView {
HomepageView()
}
BannerView()
}
}
}

}

Böylece, uygulamanızın her sayfasında en altta bir Banner reklamı gösterilir.

2- SwiftUI’da Geçiş Reklamı Gösterimi

Geçiş reklamları, tam ekran reklamlardır ve genellikle ekran geçişleri sırasında kullanılırlar. Google Mobile Ads SDK’yı projenize entegre ettikten sonra, SwiftUI uygulamanızda geçiş reklamlarını gösterebilirsiniz.

2.A) Geçiş Reklamını Yükleme

Geçiş reklamını oluşturmak için, öncelikle bir GADInterstitialAd nesnesi oluşturmamız gerekiyor.

@State var interstitialAd: GADInterstitialAd?

Sonrasında oluşturduğumuz bu nesneye loadInterstitialAd() fonksiyonu ile reklam yüklemesi yapmamız gerekmektedir.

    private func loadInterstitialAd() {
let request = GADRequest()
GADInterstitialAd.load(
withAdUnitID: interstitialID,
request: request,
completionHandler: {
[self] ad, error in if let error = error
{
print("Geçiş reklamı yüklenmedi, hata kodu: \(error.localizedDescription)")
return
}
self.interstitialAd = ad
}
)
}

2.B) Geçiş Reklamını Gösterme

Yüklenen reklamımızı artık görüntüleyebiliriz. Bunun için showInterstitialAd() fonksiyonumuzu reklamın gösterilmesi için kullanacağız.

    private func showInterstitialAd() {
let root = UIApplication.shared.windows.first?.rootViewController
if interstitialAd != nil {
self.interstitialAd?.present(fromRootViewController: root!)
interstitialAd = nil
} else {
print("Reklam yüklenmemiş.")
}
}

2.C) Geçiş Reklamını Gösterim Mantığı

Oluşturduğumuz bu fonksiyonların kullanımını kabaca şöyle anlatabilirim: Load fonksiyonunu reklamı göstermeden belli bir süre önce çalıştırıyoruz, sonrasında reklamı göstermek istediğimiz yerde Show fonksiyonunu kullanarak reklamı ekrana yansıtıyoruz. Örnek uygulamadan bir kod paylaşarak bu konuyu pekiştirelim:

    private func nextButtonHandler() {
if (currentQuestionIndex != colorBlindnessTestData.count) {
currentQuestionIndex += 1
}
showAndLoadAdProcess()
}

private func showAndLoadAdProcess() {
// Reklamı 3. soruda yüklüyoruz
if(currentQuestionIndex == 2) {
loadInterstitialAd()
}

// 6. soruda gösteriyoruz
if (currentQuestionIndex % 10 == 5) {
showInterstitialAd()
}
}

Bu kodda showAndLoadAdProcess() fonksiyonunu “ileri” tuşuna her basışta tetikliyoruz. Bu sayede sorunun index numarasına göre dilediğimiz sıklıkta reklamı yükleyip gösterebiliyoruz. Geçiş reklamını da böylece halletmiş oluyoruz.

3- SwiftUI’da Ödüllü Geçiş Reklamı Gösterimi

Ödüllü geçiş reklamlarının mantığı geçiş reklamları ile benzerdir. İsminden anlaşılacağı üzere bu reklam türünde reklam görüntülemesi sonrasında kullanıcı bir ödül kazanır. Reklam süresi geçiş reklamlarının ortalama 5 katı uzunluğundadır.

3.A) Ödüllü Geçiş Reklamını Yükleme

Öüdllü geçiş reklamını oluşturmak için, öncelikle bir GADRewardedInterstitialAd nesnesi oluşturmamız gerekiyor.

@State var rewardedInterstitialAd: GADRewardedInterstitialAd?

Sonrasında oluşturduğumuz bu nesneye loadRewardAd() fonksiyonu ile reklam yüklemesi yapmamız gerekmektedir.

    private func loadRewardAd() {
let request = GADRequest()
GADRewardedInterstitialAd.load(
withAdUnitID: rewardTestID,
request: request, completionHandler: { (ad, error) in
if let error = error {
print("Ödüllü reklam yüklenirken bir hata oluştu: \(error.localizedDescription) ")
return
}
self.rewardedInterstitialAd = ad
}
)
}

3.B) Ödüllü Geçiş Reklamını Gösterme

Yüklenen reklamımızı artık görüntüleyebiliriz. Bunun için showRewardAd() fonksiyonumuzu reklamın gösterilmesi için kullanacağız.

    private func showRewardAd() {
guard let rewardedInterstitialAd = rewardedInterstitialAd else {
return print("Reklam hazır değil.")
}
let root = UIApplication.shared.windows.first?.rootViewController
rewardedInterstitialAd.present(fromRootViewController: root!) {
// Burada ödülü belirliyoruz
// Bu uygulamadaki ödül +1 test hakkı
chanceCount += 1
}
}

3.C) Geçiş Reklamını Gösterim Mantığı

Oluşturduğumuz bu fonksiyonların kullanımını kabaca şöyle anlatabilirim: Aynı geçiş reklamında olduğu gibi Load fonksiyonunu reklamı göstermeden belli bir süre önce çalıştırıyoruz, sonrasında reklamı göstermek istediğimiz yerde Show fonksiyonunu kullanarak reklamı ekrana yansıtıyoruz. Reklamın tamamını izledikten sonra aşağıda görülen kod bloğu içerisine ödül tanımlaması yapabiliriz. Bu yazmakta olduğumuz mobil uygulamaya göre değişkenlik gösterebilir. Örnek uygulamamızdaki ödül ise renk körlüğü testi için kalan hak sayısını bir arttırmak.

rewardedInterstitialAd.present(fromRootViewController: root!) {
// Burada ödülü belirliyoruz
// Bu uygulamadaki ödül +1 test hakkı
chanceCount += 1
}

Son

Son olarak, bu makaleyi okuduğunuz ve SwiftUI ile Google Mobile Ads SDK kullanarak uygulamanıza nasıl reklam entegre edebileceğinizi öğrenmeye benim makalem aracılığıyla vakit ayırdığınız için teşekkür ederim. Umarım bu rehber, uygulamanızı geliştirirken size yardımcı olur.

Uygulama geliştirme yolculuğunuzda başarılar dilerim! Sorularınız veya geri bildirimleriniz varsa, lütfen benimle paylaşın.

Mail adresim : apponurcontact@gmail.com

--

--