Geçiş reklamları, kullanıcı tarafından kapatılana kadar bir uygulamanın arayüzünü kaplayan tam ekran reklamlardır. Bunlar genellikle uygulamaların akışındaki doğal geçiş noktalarında görüntülenir (ör. işlemler arasında veya oyun seviyeleri arasındaki duraklatmalar sırasında). Bir uygulama geçiş reklamı gösterdiğinde kullanıcı, reklama dokunup hedefe devam edebilir veya reklamı kapatıp uygulamaya geri dönebilir. Kasus çalışması.
Bu kılavuzda, geçiş reklamlarının iOS uygulamasına nasıl entegre edileceği gösterilmektedir.
Ön koşullar
- Google Mobile Ads SDK'sı 8.0.0 veya daha yeni bir sürüm.
- Başlangıç kılavuzunu tamamlayın.
Her zaman test reklamlarıyla test yapın
Uygulamalarınızı oluşturup test ederken canlı üretim reklamları yerine test reklamları kullandığınızdan emin olun. Bunu yapmazsanız hesabınız askıya alınabilir.
Test reklamları yüklemenin en kolay yolu, iOS geçiş reklamları için özel test reklam birimi kimliğimizi kullanmaktır:
/21775744923/example/interstitial
Her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır. Kodlama, test etme ve hata ayıklama sırasında kendi uygulamalarınızda kullanabilirsiniz. Uygulamanızı yayınlamadan önce bu kimliği kendi reklam birimi kimliğinizle değiştirmeniz yeterlidir.
Mobile Ads SDK'sının test reklamlarının işleyiş şekli hakkında daha fazla bilgi için Test Reklamları başlıklı makaleyi inceleyin.
Uygulama
Geçiş reklamlarını entegre etmenin ana adımları şunlardır:
- Reklam yükleyin.
- Geri arama için kaydolun.
- Reklamı gösterin.
Reklam yükleme
Reklam yükleme işlemi, GAMInterstitialAd
sınıfındaki load(adUnitID:request)
yöntemi kullanılarak gerçekleştirilir.
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var interstitial: GAMInterstitialAd?
override func viewDidLoad() {
super.viewDidLoad()
Task {
do {
interstitial = try await GAMInterstitialAd.load(
withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
}
}
SwiftUI
import GoogleMobileAds
class InterstitialViewModel: NSObject, GADFullScreenContentDelegate {
private var interstitialAd: GADInterstitialAd?
func loadAd() async {
do {
interstitialAd = try await GADInterstitialAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
interstitialAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
Objective-C
@import GoogleMobileAds;
@import UIKit;
@interface ViewController ()
@property(nonatomic, strong) GAMInterstitialAd *interstitial;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
GAMRequest *request = [GAMRequest request];
[GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
request:request
completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
if (error) {
NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
return;
}
self.interstitial = ad;
}];
}
Geri arama için kaydolun
Sunum etkinlikleriyle ilgili bildirim almak için GADFullScreenContentDelegate
protokolünü uygulamanız ve döndürülen reklamın fullScreenContentDelegate
mülküne atamanız gerekir. GADFullScreenContentDelegate
protokolü, reklamın başarıyla veya başarısız bir şekilde gösterilmesi ve kapatılmasıyla ilgili geri çağırma işlemlerini yönetir. Aşağıdaki kodda, protokolün nasıl uygulanacağı ve reklama nasıl atanacağı gösterilmektedir:
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var interstitial: GAMInterstitialAd?
override func viewDidLoad() {
super.viewDidLoad()
Task {
do {
interstitial = try await GAMInterstitialAd.load(
withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
interstitial?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
}
/// Tells the delegate that the ad failed to present full screen content.
func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
print("Ad did fail to present full screen content.")
}
/// Tells the delegate that the ad will present full screen content.
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("Ad will present full screen content.")
}
/// Tells the delegate that the ad dismissed full screen content.
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("Ad did dismiss full screen content.")
}
}
SwiftUI
fullScreenContentDelegate
mülkünü döndürülen reklama atayın:
interstitialAd?.fullScreenContentDelegate = self
Protokolü uygulayın:
func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: GADFullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
// Clear the interstitial ad.
interstitialAd = nil
}
Objective-C
@import GoogleMobileAds;
@import UIKit;
@interface ViewController () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GAMInterstitialAd *interstitial;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
GAMRequest *request = [GAMRequest request];
[GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
request:request
completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
if (error) {
NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
return;
}
self.interstitial = ad;
self.interstitial.fullScreenContentDelegate = self;
}];
}
/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
NSLog(@"Ad did fail to present full screen content.");
}
/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"Ad will present full screen content.");
}
/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"Ad did dismiss full screen content.");
}
GAMInterstitialAd
, tek kullanımlık bir nesnedir. Bu, geçiş reklamının bir kez gösterildikten sonra tekrar gösterilemeyeceği anlamına gelir. En iyi uygulama, önceki geçiş reklamı kapatılır kapatılmaz sonraki geçiş reklamının yüklenmeye başlaması için GADFullScreenContentDelegate
'daki adDidDismissFullScreenContent:
yönteminde başka bir geçiş reklamı yüklemektir.
Reklamı gösterme
Geçiş reklamları, uygulamanın akışındaki doğal duraklamalar sırasında gösterilmelidir. Örneğin, bir oyunun seviyeleri arasında veya kullanıcı bir görevi tamamladıktan sonra gösterilebilir.
Swift
guard let interstitial = interstitial else {
return print("Ad wasn't ready.")
}
// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)
SwiftUI
Reklamın ne zaman gösterileceğini belirlemek için görünümdeki kullanıcı arayüzü etkinliklerini dinleyin.
var body: some View {
// ...
}
.onChange(of: countdownTimer.isComplete) { newValue in
showGameOverAlert = newValue
}
.alert(isPresented: $showGameOverAlert) {
Alert(
title: Text("Game Over"),
message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
dismissButton: .cancel(
Text("OK"),
action: {
viewModel.showAd()
}))
Geçiş reklamını görünüm modelinden sunun:
func showAd() {
guard let interstitialAd = interstitialAd else {
return print("Ad wasn't ready.")
}
interstitialAd.present(fromRootViewController: nil)
}
Objective-C
if (self.interstitial) {
// The UIViewController parameter is nullable.
[self.interstitial presentFromRootViewController:nil];
} else {
NSLog(@"Ad wasn't ready");
}
En iyi uygulamalar
- Geçiş reklamlarının uygulamanız için doğru reklam türü olup olmadığını düşünün.
- Geçiş reklamları, doğal geçiş noktalarının olduğu uygulamalarda en iyi sonucu verir. Uygulama içinde resim paylaşma veya oyun seviyesini bitirme gibi bir görevin tamamlanması, geçiş noktası olarak değerlendirilebilir. Kullanıcı, oyunda ara verme bekler. Bu nedenle, deneyimini kesintiye uğratmadan geçiş reklamı göstermek kolaydır. Geçiş reklamlarını uygulamanızın iş akışında hangi noktalarda göstereceğinizi ve kullanıcının nasıl yanıt verebileceğini göz önünde bulundurun.
- Geçiş reklamı gösterirken işlemi duraklatmayı unutmayın.
- Metin, resim, video ve daha fazlası gibi birkaç farklı türde geçiş reklamı kullanabilirsiniz. Uygulamanız bir geçiş reklamı gösterdiğinde, reklamın bu kaynaklardan yararlanabilmesi için bazı kaynakların kullanımını da askıya aldığından emin olmanız önemlidir. Örneğin, geçiş reklamı gösterme çağrısı yaptığınızda uygulamanız tarafından üretilen tüm ses çıkışlarını duraklattığınızdan emin olun. Kullanıcı reklamla etkileşimi bitirdiğinde çağrılacak
adDidDismissFullScreenContent:
etkinlik işleyicisinde sesleri oynatmaya devam edebilirsiniz. Ayrıca, reklam gösterilirken yoğun hesaplama görevlerini (ör. oyun döngüsü) geçici olarak duraklatmayı da düşünebilirsiniz. Bu sayede kullanıcı, yavaş veya yanıt vermeyen grafikler ya da takılan videolar yaşamaz. - Yeterli yükleme süresi tanıyın.
- Geçiş reklamlarını uygun bir zamanda göstermenizin önemli olduğu kadar, kullanıcının reklamların yüklenmesini beklemek zorunda kalmaması da önemlidir. Reklamı göstermeden önce önceden yüklemek, uygulamanızda reklamı gösterme zamanı geldiğinde tamamen yüklenmiş bir geçiş reklamının hazır olmasını sağlayabilir.
- Kullanıcıyı reklamlarla boğmayın.
- Uygulamanızda geçiş reklamlarının sıklığını artırmak, geliri artırmanın mükemmel bir yolu gibi görünse de kullanıcı deneyimini olumsuz etkileyebilir ve tıklama oranlarını düşürebilir. Kullanıcıların uygulamanızı kullanmayı artık zevk alamayacak kadar sık kesintiye uğramamasını sağlayın.
- Geçiş reklamını göstermek için yükleme tamamlanma geri çağırma işlevini kullanmayın.
- Bu durum, kullanıcı deneyiminin kötüleşmesine neden olabilir. Bunun yerine, reklamı göstermeniz gerekmeden önce önceden yükleyin. Ardından, gösterilmeye hazır olup olmadığını öğrenmek için
GAMInterstitialAd
'dakicanPresentFromRootViewController:error:
yöntemini kontrol edin.
GitHub'daki örnekler
Geçiş reklamı örneklerini tercih ettiğiniz dilde görüntüleyin:
Sonraki adımlar
- Reklam hedefleme ve geçiş reklamı kuralları hakkında daha fazla bilgi edinin.
- Kullanıcı gizliliği hakkında daha fazla bilgi edinin.