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. Reklam görünümü uygulamanın penceresine eklenmediğinden SDK, reklamın kullanıcıya görünür olup olmadığını belirlemek için SDK çalışma zamanı dışında kullandığı View API'lerini kullanamaz. Bu, beklenen değerleri döndürmeyen getLocationOnScreen, getLocationInWindow veya getVisibility gibi Android View API'lerini içerir.

Reklam görüntülenebilirliği ölçümünü desteklemek, temel bir SDK Runtime şartıdır. Bu tasarım önerisi, Open Measurement ve benzer ölçüm hizmetlerinin desteklenmesini amaçlamaktadır. Burada ele alınan çözümler Attribution Reporting API'leri için de geçerli olabilir.

Özellikler

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

SDK Çalışma Zamanı görünürlük 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 penceresinin geometrisini temsil eder.
  • uiContainerGeometry [Rect]: Oluşturulan SandboxedSdkView öğesinin geometrisi.
  • alpha [float]: Oluşturulan SandboxedSdkView öğesinin opaklığı.
  • onScreenGeometry [Rect]: uiContainerGeometry öğesinin, üst görünümler tarafından kırpılmayan alt kümesi (viewport dahil).
  • occludedGeometry [Rect]: onScreenGeometry'ün, uygulama hiyerarşisindeki görünümler tarafından engellenen kısımları. Rect içerir. 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 gelir.

Şartlar

  • uiContainerGeometry, onScreenGeometry ve occludedGeometry değerleri, viewport 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ünümünün ilk görünümünden son görünümüne 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 nasıl çalıştığına dayanmaktadı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. Gözlemci, capabilities bölümündeki veri türlerini değiştiren alakalı etkinlikler her algılandığında görünürlük bilgileri 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 doğrudan onlara gönderilebilir. Ölçüm iş ortakları, JavaScript görünürlük etkinlikleri oluşturmak için kullanıcı arayüzü kitaplıklarından elde edilen bilgileri, halihazırda mevcut olan içeriklerle ilgili verilerle (ör. reklam öğesine yerleştirilen ölçüm komut dosyaları kullanılı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 dinler. 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) daha büyükse yeni bir AdContainerInfo nesnesi oluşturulur ve gözlemciye bir bildirim gönderilir. Bu etkinliğe dayalı model, günümüzde Android'deki çoğu OMID uygulamasında yapılan yoklamaya kıyasla sistem sağlığı için daha iyidir.

API

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

  • SessionObserver: Genellikle ölçüm SDK'sı tarafından uygulanır ve privacysandbox.ui aracılığıyla SDK tarafından 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ını sağlar. Bu, genel olarak sistem sağlığı açısından 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 kayıt yaptırıldıysa oturum açıldığında AdContainerInfo gönderilir.
  • AdContainerInfo: Gözlemcinin yukarıdaki capabilites bölümünde listelenen veri türleri için salt okunur reklam kapsayıcısı bilgilerini almasını sağlayan alıcılar içeren bir sınıf. Bu alıcıların döndürdüğü değerler, mümkün olduğunda View ve alt sınıflarındaki mevcut alıcıların döndürdüğü paketlenebilir değerlere karşılık gelir. Reklam kapsayıcısı Jetpack Compose kullanılarak oluşturulduysa kapsayıcının anlamsal özellikleri gösterilir. Bu sınıf, görünürlükle 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 geçirir. 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, oturumdaki yöntemlere ek olarak çağrılabilir. Örneğin, SDK'dan reklamın yeniden boyutlandırılması istendiğinde Session.notifyResized() çağrılır ve bu işlem gerçekleştiğinde SessionObserver.notifyAdContainerChanged() de çağrılır.
  • SessionObserverotifySessionClosed(): Gözlemciye oturumun kapatıldığını bildirir.

Gelecekteki geliştirmeler

Uygulama sürecinde çalışan tüm kodlar (privacysandbox.ui.client kitaplığındaki kod dahil) uygulamanın güvenliği ihlal edilirse değiştirilebilir. Bu nedenle, uygulama sürecinde çalışan tüm sinyal toplama mantıkları, uygulama kodu tarafından kurcalanmaya yatkındır. Bu durum, Özel Korumalı Alan kullanıma sunulmadan ö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, setTrustedPresentationCallback adlı bir platform API'si kullanabilir. Bu API, reklam kullanıcı arayüzü sunumuyla ilgili olarak çerçeveden daha güçlü garantiler verebilir. setTrustedPresentationCallback Yüzey düzeyinde çalışır ve sunum için minimum eşikler (ör. görünür piksel yüzdesi, ekranda kalma süresi veya ölçek) belirterek reklam kullanıcı arayüzünü içeren yüzeyle ilgili onaylar vermeye 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, verileri çerçeveden gelen verilerle uyuşmayan kullanıcı arayüzü kitaplığındaki tüm etkinlikler silinebilir. Örneğin, dinleyiciye setTrustedPresentationCallback sağlandığında reklam kullanıcı arayüzünün hiçbir pikselinin ekranda gösterilmediğini belirten bir bildirimle çağrılıyorsa ve istemci kullanıcı arayüzü kitaplığı ekranda sıfır olmayan sayıda piksel gösteriyorsa ikincisinden gelen veriler atılabilir.

Açık sorular

  1. Bu açıklayıcıda bahsedilmeyen hangi görünürlük sinyalleriyle ilgileniyorsunuz?
  2. Mevcut öneri, kullanıcı arayüzünde ilgili bir değişiklik olması koşuluyla görüntülenebilirliğin en az 200 milisaniyede bir güncellenmesidir. Bu sıklık sizin için uygun mu? Değilse hangi sıklıkta olmasını tercih edersiniz?
  3. setTrustedPresentationCallback verileriyle eşleşmediğinde bilgileri 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?setTrustedPresentationCallback
  4. Görüntülenebilirlik sinyallerini nasıl kullanıyorsunuz? Bu soruları yanıtlayan bir geri bildirim göndererek kullanım alanlarınızı anlamamıza yardımcı olun.