Sık Yapılan Uygulama Hatalarından Kaçınma

Aşağıdaki senaryolarda, projenizle ilgili sürerken görülen en yaygın hatalardan hakkında daha fazla bilgi edinin. Bu tür uygulamalar mevcut sürümü için geri döndüğünde, gelecekte de böyle yapmaya devam edeceği garanti edilmez. Bu uygulamalar, en uç durumlarda reklam sunumunun öngörülemez şekillerde kesintiye uğramasına neden olabilir. Bunlar desteklenmeyen uygulamalar olarak kabul edilir.

Her senaryoda, gösterilen sorunun düzeltilmesi için önerilen bir yaklaşım yer alır.

Bu listenin olası sorunların tam kapsamlı bir listesini temsil etmediğini unutmayın. Ancak ekibinizin en sık ihtiyaç duyabileceği sorun türlerini ele alınmalıdır.

Ayrıca, uygulamanıza bağlı olarak, web sitenizdeki bir şeyin değil de sitenizde bu tür değişikliklerin yapılması gerekebilir.

Sık Yapılan Yanlışlar

Senaryo 1: GPT JavaScript kitaplıklarının resmi olmayan kopyalarını kullanma

Genel kullanım alanı açıklaması gpt.js, pubads_impl.js veya kendi sunucularınızdan yükledikleri kitaplıkları barındırma ya da bu dosyaları resmi olmayan bir kaynaktan yüklüyor.
Hatalı kod snippet'i örneği
// Incorrect: Accessing these files from an unofficial source
<script async src="https://www.example.com/tag/js/gpt.js"></script>
Hatayı düzeltmek için önerilen yollar
// Correct: Access these files from a Google domain
<script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" crossorigin="anonymous" async></script>
// Also correct, if using Limited Ads
<script src="https://pagead2.googlesyndication.com/tag/js/gpt.js" async></script>

2. Senaryo: gpt.js komut dosyası etiket işleyicilerinden yararlanma

Genel kullanım alanı açıklaması JavaScript dosyası çalıştırıldığında GPT API'nin çağrılmaya hazır olduğunu varsaymak, gpt.js yüklenmesi yanlış, çünkü API'nin bazı bölümleri pubads_impl.js dosya API'ye herhangi bir şekilde (çerçeveler dahil) güvenme etkinlik işleyicilerin içinden eklenmiş olması gerekir.
Hatalı kod snippet'i örneği
var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.src = (useSSL ? 'https:' : 'http:') +
        '//www.googletagservices.com/tag/js/gpt.js';
// Incorrect: Attaching a callback to the script's onload event.
tag.onload = callback;
var node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(tag, node);
Hatayı düzeltmek için önerilen yollar
// Make sure that googletag.cmd exists.
window.googletag = window.googletag || {};
googletag.cmd = googletag.cmd || [];
// Correct: Queueing the callback on the command queue.
googletag.cmd.push(callback);
Düzeltmenin açıklaması googletag.cmd, GPT'yle hemen çalıştırılacak komutların listesini tutar hazır. Bu, geri çağırmanızın GPT yüklendiğinde çalıştırıldığından emin olmanın doğru yoludur.

3. Senaryo: GPT'nin hazır olup olmadığını öğrenmek için googletag nesnesini kontrol etme

Genel kullanım alanı açıklaması gpt.js JavaScript dosyası yüklenirken GPT API hazır olmayabilir. googletag nesnesi tanımlı olduğunda, bu nesneyi kontrol ederek GPT API'si güvenilir değildir.
Hatalı kod snippet'i örneği
// Incorrect: Relying on the presence of the googletag object
// as a check for the GPT API.
if (typeof googletag != 'undefined') {
 functionProcessingGPT();
}
Hatayı düzeltmek için önerilen yollar
// Correct: Relying on googletag.apiReady as a check for the GPT API.
if (window.googletag && googletag.apiReady) {
 functionProcessingGPT();
}
Düzeltmenin açıklaması GPT, boole işaretini doldurur googletag.apiReady hemen güvenilir iddialarda bulunabilmeniz için API çağrılmaya hazırdır.

Senaryo 4: Karartılmış kod söz diziminden yararlanma

Genel kullanım alanı açıklaması Küçültülmüş GPT kitaplık kodunun hassas söz diziminden yararlanıyorsanız neredeyse kesintiler yaşarsınız. Sürekli olarak değiştirdiğimiz için lütfen kullanımınızı API Başvuru Kılavuzu'nda açıklandığı şekilde API ile sınırlandırın sürekli iyileştirmeler için GPT'nin iç işleyişini ele alacağız.
. Örneğin, PubAdsService'in tam olarak yüklendiği zamanı tespit etmek, refresh() numaralı telefonu aramak için sipariş verin.
Hatalı kod snippet'i örneği
// Incorrect: Relying on an obfuscated property.
if (googletag.pubads().a != null) {
 functionProcessingGPT();
}
Hatayı düzeltmek için önerilen yollar
// Correct: Relying on public GPT API methods
// (i.e. googletag.pubadsReady in this case).
if(window.googletag && googletag.pubadsReady) {
 functionProcessingGPT();
}
Düzeltmenin açıklaması Yalnızca herkese açık API'ye güvenilebilir. PubAdsService'in başarılı olup olmadığının tespit edilmesi bir boole değerimiz var. googletag.pubadsReady.

5. Senaryo: GPT'deki herhangi bir işlevin veya değişkeninin üzerine yazma

Genel kullanım alanı açıklaması GPT tarafından kullanılan herhangi bir işlevin veya değişkenin üzerine yazmaya dayalı kullanım alanları her an bozulabilir desteklenmediğinden emin olun. GPT dahili öğelerindeki zamanlama değişiklikleri nedeniyle kesintilere göre yanlış davranışlar yaşarsınız.
Hatalı kod snippet'i örneği
// Incorrect: Haphazardly overwriting a googletag.* property.
googletag.cmd = [];
Hatayı düzeltmek için önerilen yollar
// Correct: Never overwrite googletag.* properties if they already exist.
// Always check before assigning to them.
googletag.cmd = googletag.cmd || [];

6. Senaryo: GPT'ye yapılan çağrıları yanlış sıralama

Genel kullanım alanı açıklaması GPT'nin dahili bileşenleri geliştikçe yarış koşulları kesintilere neden olabilir. Yanlış bir şekilde yürütmedeki belirli zamanlamalar nedeniyle işlevsel olan sıralı ifadeler çalışmaya devam etmeyebilir.
Hatalı kod snippet'i örneği
// Incorrect: Setting page-level key-value targeting after calling
// googletag.enableServices().
googletag.enableServices();
googletag.defineSlot(...);
googletag.pubads().setTargeting(e, a);
Hatayı düzeltmek için önerilen yollar
// Correct: Setting page-level key-value targeting before calling
// googletag.enableServices().
googletag.pubads().setTargeting(e, a);
googletag.defineSlot(...);
googletag.enableServices();
Düzeltmenin açıklaması GPT'nin normal zamanlamasına uyum sağlayarak yarış şartlarından kaçının. Örnek geçerli kısmi sıralamalar şunları içerir:
  • Ekranı-Tanımlama-Etkinleştir
    1. Sayfa düzeyindeki ayarları tanımlama
    2. Slot tanımlama
    3. enableServices()
    4. Ekran yuvaları
  • Ekranı-Tanımlama-Etkinleştir
    1. Sayfa düzeyindeki ayarları tanımlama
    2. enableServices()
    3. Slot tanımlama
    4. Ekran yuvaları

7. Senaryo: Kapanışlar ve JavaScript değişken kapsamı belirlemeyi hatalı kullanma

Genel kullanım alanı açıklaması JavaScript değişken kapsamı ve değişkenlerin değeri hakkında yanlış varsayımlar googletag.cmd.push parametresine iletilen işlevde yakalandı.
Hatalı kod snippet'i örneği
// Incorrect: Variable x is declared outside the anonymous function
// but referenced within it.
for (var x = 0; x < slotCount; x++) {
 window.googletag.cmd.push(
  function(){
    // If GPT is not yet loaded, this code will be executed subsequently when
    // the command queue is processed. Every queued function will use the last value
    // assigned to x (most likely slotCount).
    // This is because the function closure captures the reference to x,
    // not the current value of x.
    window.googletag.display(slot[x]);
  })
 }
}
Hatayı düzeltmek için önerilen yollar
window.googletag.cmd.push(
 function(){
  // Correct: We both declare and reference x inside the context of the function.
  for (var x = 0; x < slotCount; x++){
   window.googletag.display(slot[x]);
  }
 }
)
Düzeltmenin açıklaması

JavaScript'te, kapanışlar değişkenleri değere göre değil referansa göre yakalar. Bunun anlamı şudur: bir değişken yeniden atanırsa, bu durumda fonksiyon yakalanan kapatma işlemi daha sonra yürütülür. Dolayısıyla, kapanıştaki kodun davranışı geri çağırmanın hemen mi yoksa gecikmeli mi yürütülmesine bağlı olarak değişebilir.

Eşzamansız olarak yüklenen GPT durumunda, GPT'nin komut kuyruğundaki geri çağırmalar hemen yürütülebilir veya yürütülmeyebilir. Önceki bu durum, sıraya alınan komutların davranışını değiştirir.

Herhangi bir sorun yaşamamak için kodun, komut kuyruğuna yerleştirilen komutlar hemen yürütülür ve JavaScript'in kapsam kurallarını anlatacağım.

8. Senaryo: Display çağrısı yaptıktan sonra DOM içindeki alan kapsayıcılarını taşıma

Genel kullanım alanı açıklaması Ekran çağrısından sonra alan kapsayıcılarını DOM'ye taşımak veya yerleştirmek şuna neden olabilir: istenmeyen yeniden düzenleme ve öngörülemeyen davranışlara neden olur.
Hatalı kod snippet'i örneği
// Incorrect: Moving slot containers after calling display
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");
...
// Inserting another element before the slot container, pushing the slot container down the page.
document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
Hatayı düzeltmek için önerilen yollar
// Correct: Make any DOM order changes before calling display

document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
...
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");