SDK Çalışma Zamanı'ndaki reklam SDK'ları, yayıncının görüntüleme hiyerarşisine erişemez.
Bunun yerine, çalışma zamanındaki SDK'ların kendi görünümleri vardır. Reklam görünümü uygulamanın penceresine bağlı olmadığından SDK, reklamın kullanıcıya görünür olup olmadığını belirlemek için SDK çalışma zamanından farklı görüntüleme API'lerini kullanamaz. Beklenen değerleri döndürmeyen getLocationOnScreen
, getLocationInWindow
veya getVisibility
gibi Android Görüntüleme API'leri de buna dahildir.
Reklam görüntülenebilirliği ölçümünü desteklemek, temel bir SDK Çalışma Zamanı şartıdır. Bu tasarım önerisi, Open Measurement ve benzer ölçüm hizmetleri için destek sağlamayı amaçlamaktadır. Burada açıklanan çözümler Attribution Reporting API'leri için de geçerli olabilir.
İşlemler
Bu tasarım, reklam SDK'larının veya ölçüm iş ortaklarının aşağıdaki görüntülenebilirlik verilerini hesaplamasını desteklemeyi amaçlar (adlar geçicidir ve değişiklik gösterebilir):
viewport [Rect]
: Platformun özelliklerine bağlı olarak cihaz ekranını veya uygulama penceresi geometrisini temsil eder.uiContainerGeometry [Rect]
: OluşturulanSandboxedSdkView
geometrisi.alpha [float]
: OluşturulanSandboxedSdkView
öğesinin opaklığı.onScreenGeometry [Rect]
:uiContainerGeometry
'ın,viewport
'e kadar üst öğe görüntülemeler tarafından kırpılmayan alt kümesi.occludedGeometry [Rect]
:onScreenGeometry
'ın, uygulamanın hiyerarşisindeki görünümler tarafından engellenen bölümleri. Her bir örtme içinSandboxedSdkView onScreenGeometry
ile kesişen sıfır, bir veya daha fazla uygulama görünümüne karşılık gelen birRect
içerir
Şartlar
uiContainerGeometry
,onScreenGeometry
veoccludedGeometry
değerleriviewport
'ın koordinat alanında ifade edilir.- Görünürlük değişikliği raporlaması minimum gecikmeyle gerçekleşir.
- Görünürlük, reklam görüntülemesinin ilk görünüşünden son görünüşüne kadar tüm yaşam döngüsü için ölçülebilir.
Tasarım teklifi
Bu öneri, istemci ve sağlayıcı kullanıcı arayüzü kitaplıklarını kullanarak kullanıcı arayüzü sunumunun işleyiş şeklini temel alır. SDK'nın kullanıcı arayüzü oturumuna bir veya daha fazla gözlemci kaydettirmesine izin vermek için kullanıcı arayüzü kitaplıklarını genişleteceğiz. Gözlemci, capabilities bölümündeki veri türlerini değiştiren alakalı etkinlikler algılandığında görüntülenebilirlik bilgilerini alır. SDK çalışma zamanındaki ölçüm SDK'ları (OMID ve MRAID uygulamaları), bu bilgilerin doğrudan kendilerine gönderilebilmesi için bu gözlemciyi kullanıcı arayüzü oturumuna ekleyebilir. Ölçüm iş ortakları, JavaScript görüntülenebilirlik etkinlikleri oluşturmak için kullanıcı arayüzü kitaplıklarından elde edilen bilgileri, mevcut içerikle ilgili verilerle (ör. reklam öğesine yerleştirilen ölçüm komut dosyalarını kullanırken) birleştirebilir.
İstemci kitaplığı, ViewTreeObserver
gibi etkinlik işleyiciler aracılığıyla reklam kullanıcı arayüzündeki değişiklikleri dinler. Müşteri kitaplığı, reklam kullanıcı arayüzünün görüntülenebilirlik ölçümünü etkileyebilecek şekilde değiştiğini belirlediğinde 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) daha uzunsa yeni bir AdContainerInfo
nesnesi oluşturulur ve gözlemciye bir bildirim gönderilir. Bu olaya dayalı model, günümüzde Android'deki çoğu OMID uygulaması tarafından yapılan anketlere kıyasla sistem sağlığı için daha iyidir.
API
privacysandbox.ui.core kitaplığına aşağıdakiler eklenir:
SessionObserver
: Genellikle ölçüm SDK'sı tarafından uygulanır ve SDK tarafından privacysandbox.ui aracılığıyla döndürülen oturuma eklenir. Bu arayüz, ölçüm SDK'sının belirli görüntülenebilirlik sinyali kategorilerini etkinleştirmesine de olanak tanır. Bu da kullanıcı arayüzü istemci kitaplığının yalnızca gözlemcinin ilgilendiği sinyalleri toplamasına olanak tanır. Bu da genel sistem sağlığı için daha iyidir.registerObserver()
:Session
sınıfına eklenen bu yöntem, oturuma erişimi olan herkesin 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 kaydedilenler, oturum açıldığındaAdContainerInfo
gönderilir.AdContainerInfo
: Gözlemcinin, yukarıdaki özellikler bölümünde listelenen veri türleri için salt okunur reklam kapsayıcı bilgileri almasını sağlayan alıcılara sahip bir sınıf. Bu alıcılardan döndürülen değerler, mümkün olduğundaView
ve alt sınıflarındaki mevcut alıcılardan döndürülen paketlenebilir dönüş değerlerine karşılık gelir. Reklam kapsayıcısı Jetpack Compose kullanılarak oluşturulduysa bu, kapsayıcının anlamsal özelliklerini gösterir. Bu sınıf, görüntülenebilirlikle ilgili MRAID ve OMID etkinliklerini hesaplamak için kullanılabilir.SessionObserverotifyAdContainerChanged()
: Görüntülenebilirlik her değiştiğinde gözlemciyi bilgilendirmek için kullanılır.AdContainerInfo
nesnesi iletilir. Bu işlev, Özellikler bölümünde listelenen veri türlerini etkileyen etkinlikler algılandığında çağrılır. Not: Bu yöntem, Oturum'daki yöntemlere ek olarak çağrılabilir. Örneğin, SDK'dan reklamı yeniden boyutlandırmasını istemek içinSession.notifyResized()
çağrılır ve bu işlem gerçekleştiğindeSessionObserver.notifyAdContainerChanged()
da çağrılır.SessionObserverotifySessionClosed()
: Gözlemciye oturumun kapatıldığını bildirir.
Gelecekteki geliştirmeler
Uygulamanın güvenliği ihlal edilirse privacysandbox.ui.client kitaplığındaki kod da dahil olmak üzere uygulama sürecinde çalışan tüm kodlar değiştirilebilir. Bu nedenle, uygulama sürecinde çalışan tüm sinyal toplama mantığı, uygulama kodu tarafından bozulmaya açıktır. Bu, Özel Korumalı Alan'ın kullanıma sunulmasından önce dağıtılan ve uygulama sürecinde çalışan SDK kodu için de geçerlidir. Sonuç olarak, kullanıcı arayüzü kitaplığı tarafından sinyal toplanması güvenlik durumunu kötüleştirmez.
Ayrıca, SDK çalışma zamanındaki kod, reklam kullanıcı arayüzü sunumu hakkında çerçeveden daha güçlü garantiler verebilecek setTrustedPresentationCallback
adlı bir platform API'si kullanabilir. setTrustedPresentationCallback
Surface düzeyinde çalışır ve görünen piksel yüzdesi, ekranda kalma süresi veya ölçek gibi minimum sunum eşikleri belirleyerek reklam kullanıcı arayüzünü içeren Surface hakkında iddialarda bulunmaya yardımcı olabilir. Bu veriler, yukarıda açıklanan kullanıcı arayüzü istemci kitaplığı tarafından sağlanan görüntülenebilirlik verileriyle karşılaştırılabilir. Çerçeve tarafından sağlanan veriler daha güvenilir olduğundan, kullanıcı arayüzü kitaplığındaki verileri çerçevedeki verilerle eşleşmeyen etkinlikler atılabilir. Örneğin, setTrustedPresentationCallback
için sağlanan dinleyici, ekranda reklam kullanıcı arayüzünün hiçbir pikseli gösterilmediğine dair bir bildirimle çağrılır ve istemci kullanıcı arayüzü kitaplığı ekranda sıfır olmayan sayıda piksel gösterirse ikincisinden gelen veriler atılabilir.
Açık uçlu sorular
- Bu açıklama metninde bahsedilmeyen hangi görüntülenebilirlik sinyalleriyle ilgileniyorsunuz?
- Mevcut öneri, kullanıcı arayüzünde alakalı 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? Aksi takdirde ne sıklıkta görüşmek istersiniz?
setTrustedPresentationCallback
bilgilerini kendiniz mi analiz etmek istersiniz yoksa sağlayıcı kullanıcı arayüzü kitaplığının,setTrustedPresentationCallback
verileriyle eşleşmeyen verileri istemci kullanıcı arayüzü kitaplığından atmasını mı tercih edersiniz?- Görüntülenebilirlik sinyallerini nasıl tüketirsiniz? Bu soruları yanıtlayan geri bildirimler göndererek kullanım alanlarınızı anlamamıza yardımcı olun.