SDK Çalışma Zamanı görüntülenebilirliği tasarım teklifi

SDK Çalışma Zamanı'ndaki reklam SDK'ları yayıncının görünüm hiyerarşisine erişemez. Bunun yerine, Çalışma Zamanı'ndaki SDK'ların kendi görünümleri vardır. SDK, reklamın kullanıcı tarafından görünüp görünmeyeceğini belirlemek için SDK çalışma zamanı dışında kullandıkları View API'lerini, uygulamanın penceresine ekli olmadığından kullanamaz. Buna, beklenen değerleri döndürmeyen getLocationOnScreen, getLocationInWindow veya getVisibility gibi Android View API'leri de dahildir.

Reklam görüntülenebilirliği ölçümünün desteklenmesi, temel SDK Çalışma Zamanı gereksinimidir. Bu tasarım teklifi, Open Measurement ve benzer ölçüm hizmetleri için destek sağlamayı amaçlar. Burada açıklanan çözümler Attribution Reporting API'leri için de geçerli olabilir. Bu teklifle ilgili geri bildiriminizi göndermenizi öneririz.

Özellikler

Bu tasarım, aşağıdaki görüntülenebilirlik verilerini hesaplamaları için reklam SDK'larını veya ölçüm iş ortaklarını desteklemeyi amaçlamaktadır (adlar geçicidir ve değişebilir):

SDK Çalışma Zamanı görüntülenebilirliği bileşenlerinin birlikte nasıl çalıştığını gösteren resim
SDK Çalışma Zamanı Görüntülenebilirliğine Genel Bakış.
  • viewport [Rect]: Platformun özelliklerine bağlı olarak cihaz ekranını veya uygulama penceresi geometrisini temsil eder.
  • uiContainerGeometry [Rect]: Oluşturulan SandboxedSdkView geometrisi.
  • alpha [float]: Oluşturulan SandboxedSdkView öğesinin opaklığı.
  • onScreenGeometry [Rect]: viewport dahil olmak üzere, üst görüntülemeler tarafından kırpılmayan uiContainerGeometry alt kümesi).
  • occludedGeometry [Rect]: Uygulama hiyerarşisindeki herhangi bir görünüm tarafından engellenen onScreenGeometry bölümleri. Her kapatma için SandboxedSdkView onScreenGeometry ile kesişen sıfır, bir veya daha fazla uygulama görünümüne karşılık gelen bir Rect içerir

Koşullar

  • uiContainerGeometry, onScreenGeometry ve occludedGeometry değerleri, viewport koordinat alanında ifade edilir.
  • Görünürlük değişikliği raporları, minimum gecikmeyle gerçekleşir.
  • Görünürlük, reklam görüntülemesinin ilk gösteriminden son gösterimine kadar tüm yaşam döngüsü boyunca ölçülebilir.

Tasarım teklifi

Bu teklif, istemci ve sağlayıcı kullanıcı arayüzü kitaplıklarını kullanarak kullanıcı arayüzü sunumunun çalışma şekline dayalıdır. SDK'nın, kullanıcı arayüzü oturumunun bir veya daha fazla gözlemcisini kaydetmesine olanak tanımak için kullanıcı arayüzü kitaplıklarını genişleteceğiz. capabilities bölümündeki veri türlerini değiştiren ilgili etkinlikler tespit edildiğinde, gözlemci görüntülenebilirlik bilgilerini alır. SDK çalışma zamanındaki Ölçüm SDK'ları (OMID ve MRAID uygulamaları), bu gözlemciyi kullanıcı arayüzü oturumuna ekleyebilir. Böylece bu bilgiler onlara doğrudan gönderilebilir. Ölçüm iş ortakları, JavaScript görüntülenebilirlik etkinlikleri oluşturmak için kullanıcı arayüzü kitaplıklarından alınan bilgileri, mevcut içerikle ilgili verilerle (ör. reklam öğesine yerleştirilen ölçüm komut dosyalarını kullanırken) birleştirebilir.

Görüntülenebilirlik için kontrol akışı.
Görüntülenebilirlik için kontrol akışı.

İstemci kitaplığı, ViewTreeObserver gibi etkinlik işleyiciler aracılığıyla reklam kullanıcı arayüzündeki değişiklikleri işler. Reklam kullanıcı arayüzünün, görüntülenebilirlik ölçümünü etkileyebilecek şekilde değiştiğini belirlediğinde istemci kitaplığı, gözlemciye son bildirimin ne zaman gönderildiğini kontrol eder. Son güncelleme, izin verilen gecikmeden (SDK tarafından yapılandırılabilir, mobil cihazlarda en az 200 ms'ye kadar) büyükse yeni bir AdContainerInfo nesnesi oluşturulur ve gözlemciye bildirim gönderilir. Etkinliğe dayalı bu model, sistem sağlığı açısından günümüzde Android'deki çoğu OMID uygulaması tarafından yapılan yoklamalardan daha iyidir.

API

Aşağıdakiler privacysandbox.ui.core kitaplığına eklenir:

  • SessionObserver: Tipik olarak ölçüm SDK'sı tarafından uygulanır ve SDK tarafından privacysandbox.ui üzerinden döndürülen oturuma eklenir. Bu arayüz, ölçüm SDK'sının belirli görüntülenebilirlik sinyali kategorilerini etkinleştirmesini de sağlar. Bu da kullanıcı arayüzü istemci kitaplığının yalnızca gözlemcinin ilgilendiği sinyalleri toplamasını sağlar. Bu da genel olarak sistem sağlığı için daha iyidir.
  • registerObserver(): Session sınıfına eklenen bu yöntem, Oturum'a erişimi olan herkesin bir gözlemci kaydetmesine olanak tanır. Gözlemci, kullanıcı arayüzü oturumu açıldıktan sonra kaydedilirse önbelleğe alınmış AdContainerInfo hemen gönderilir. Oturum açılmadan önce kaydedilirse oturum açıldığında AdContainerInfo gönderilir.
  • AdContainerInfo: Gözlemcinin yukarıdaki özellikler bölümünde listelenen veri türleri için salt okunur reklam kapsayıcısı bilgilerini elde etmesini sağlayan alıcılar içeren bir sınıf. Bu alıcılardan elde edilen dönüş değerleri, mümkün olduğunda View ve alt sınıflarındaki mevcut alıcıların ayrıştırılabilir dönüş değerlerine karşılık gelir. Reklam kapsayıcısı Jetpack Compose kullanılarak oluşturulmuşsa kapsayıcının anlamsal özellikleri ortaya çıkar. Bu sınıf, görüntülenebilirlikle ilgili MRAID ve OMID etkinliklerini hesaplamak için kullanılabilir.
  • SessionObserverotifyAdContainerChanged(): Görüntülenebilirlik değiştiğinde gözlemleyiciyi bilgilendirmek için kullanılır. Bir AdContainerInfo nesne iletir. Özellikler bölümünde listelenen veri türlerini etkileyen etkinliklerin algılanması halinde bu işleve çağrı yapılır. Not: Bu yöntem, Oturum'daki yöntemlere ek olarak çağrılabilir. Örneğin, Session.notifyResized(), SDK'dan reklamı yeniden boyutlandırmasını istemek için çağrılır. Bu durumda SessionObserver.notifyAdContainerChanged() de çağrılır.
  • SessionObserverotifySessionClosed(): Gözlemciye oturumun kapatıldığını bildirir.

Gelecekteki geliştirmeler

Uygulamanın güvenliği ihlal edilirse {0}privacysandbox.ui.client kitaplığındaki kod da dahil olmak üzere uygulama işleminde çalışan tüm kodlar değiştirilebilir. Bu nedenle, uygulama işleminde çalışan herhangi bir sinyal toplama mantığı, uygulama kodu tarafından değiştirilmeye açıktır. Bu durum, uygulama işleminde çalışan Özel Korumalı Alan'ın kullanıma sunulmasından önce dağıtılan SDK kodu için de geçerlidir. Sonuç olarak, kullanıcı arayüzü kitaplığı tarafından sinyal toplama, güvenlik durumunu daha da kötüleştirmez.

Ayrıca, SDK çalışma zamanındaki kod, reklam kullanıcı arayüzü sunumu hakkındaki çerçeveden ona daha güçlü garantiler verebilecek setTrustedPresentationCallback adlı bir platform API'si kullanabilir. setTrustedPresentationCallback, Yüzey düzeyinde çalışır ve sunum için minimum eşikler (ör. görünür piksel yüzdesi, ekranda görünme süresi veya ölçek) belirterek reklam kullanıcı arayüzünü içeren Yüzey hakkında iddialarda bulunulmasına yardımcı olabilir. Bu veriler, yukarıda açıklanan kullanıcı arayüzü istemci kitaplığı tarafından sağlanan görüntülenebilirlik verileriyle kontrol edilebilir. Çerçeve tarafından sağlanan veriler daha güvenilir olduğundan verileri çerçevedeki verilerle uyumlu olmayan kullanıcı arayüzü kitaplığındaki tüm etkinlikler silinebilir. Örneğin, setTrustedPresentationCallback için sağlanan dinleyici ekranda reklam kullanıcı arayüzüne ait hiçbir pikselin gösterilmediğine dair bir bildirimle çağrılırsa ve istemci kullanıcı arayüzü kitaplığı ekranda sıfır olmayan bir piksel sayısı gösteriyorsa ikincisinden alınan veriler silinebilir.

Açık sorular

Aşağıdaki konularda geri bildirimlerinizi bekliyoruz:

  1. İlgilendiğiniz ve bu açıklamada bahsedilmeyen görüntülenebilirlik sinyalleri nelerdir?
  2. Mevcut teklif, kullanıcı arayüzünde ilgili bir değişiklik olması koşuluyla görüntülenebilirliği en az 200 milisaniyede bir güncellemektir. Bu sıklık sizin için kabul edilebilir mi? Yoksa hangi sıklığı tercih ederdiniz?
  3. setTrustedPresentationCallback verileriyle eşleşmediğinde setTrustedPresentationCallback bilgilerini kendiniz mi analiz etmeyi yoksa sağlayıcı kullanıcı arayüzü kitaplığının, istemci kullanıcı arayüzü kitaplığından veri bırakmasını mı tercih edersiniz?
  4. Görüntülenebilirlik sinyalleri nasıl kullanılır? Bu soruları yanıtlayan geri bildirimler göndererek kullanım alanlarınızı anlamamıza yardımcı olun.