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ü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):

SDK Runtime görüntülenebilirliğinin bileşenlerinin nasıl birlikte çalıştığını gösteren görsel
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]: 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ç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

Şartlar

  • uiContainerGeometry, onScreenGeometry ve occludedGeometry değerleri viewport'ı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.

Görüntülenebilirlik için akışı kontrol edin.
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 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ığı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ı 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ğunda View 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çin Session.notifyResized() çağrılır ve bu işlem gerçekleştiğinde SessionObserver.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

  1. Bu açıklama metninde bahsedilmeyen hangi görüntülenebilirlik sinyalleriyle ilgileniyorsunuz?
  2. 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?
  3. 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?
  4. 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.