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:
|
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"); |