Tam ekran reklamlar için etkinlik desteği

SDK Çalışma Zamanı, SDK'ların yeni etkinlikleri nasıl başlatabileceğine dair kısıtlamalar uygular. Bu durum, gelişmiş kontrol ve kullanıcı deneyimi için genellikle ayrı bir etkinlik başlatmaya dayanan tam ekran reklam biçimlerinde zorluk yaratır. SDK Çalışma Zamanı, bu sorunu ele almak üzere korumalı alana alınan etkinlikler için yeni bir mekanizma kullanıma sunmuştur.

SDK Çalışma Zamanı ortamına yüklenen SDK'lar, manifest dosyalarında <activity> etiketlerini doğrudan tanımlayamaz veya kendi etkinliklerini başlatamaz. Bunun yerine, yeni bir amaç işlemi (START_SANDBOXED_ACTIVITY) kullanıma sunuldu.

SDK'ların bu işlemle intent başlatması da kısıtlanır ancak SDK'lar, istemci uygulamasından bu amacı başlatmasını isteyebilir. Daha sonra sistem, platform tanımlı bir etkinlik oluşturur ve bunu SDK'ya iletir. Bu etkinlik, SDK ile aynı süreçte çalışır.

Daha sonra SDK, tam ekran reklam deneyimini uygulamak ve yönetmek için bu etkinliği kullanabilir.

Platform tarafından sağlanan etkinlik, istemci uygulamasının görevinin bir parçası olarak başlatılan standart bir android.app.Activity etkinliğidir.

SDK Çalışma Zamanında etkinlik oluşturma

Etkinlik oluşturmak için iki temel yönteminiz vardır: Geliştirilmiş Jetpack Etkinlik kitaplıklarını kullanmak veya doğrudan Platform API'leriyle etkileşimde bulunmak.

Temel karmaşıklığı soyutlayarak etkinlik oluşturmayı basitleştirdikleri için Etkinlik kitaplıklarını kullanmanızı öneririz.

Etkinlik kitaplıkları

Etkinlik kitaplıkları çeşitli avantajlar sağlar:

  • Etkinlik işleyicileri kaydetme ve tanımlayıcılarını istemci uygulamalarıyla paylaşmayla ilgili dahili ayrıntıları soyutlayın.
  • Uygulama geliştiricilere, karşılanacak koşulları (tahminler) ayarlama olanağı tanıyarak SDK'ların uygulamalarında Etkinlikler oluşturma konusunda daha fazla kontrol sahibi olmalarını sağlar.
  • SDK'ların, etkinlikleri başlatan API'leri tanımlaması için birleşik bir yol oluşturun.

Temel, istemci ve sağlayıcı olmak üzere üç etkinlik kitaplığı vardır.

  • Temel kitaplık, istemci uygulamaları ve sağlayıcı kitaplıkları tarafından kullanılan arayüzleri sağlar.
  • provider kitaplığı, SDK'ların etkinlikleri başlatması için API'ler sağlar.
  • İstemci kitaplığı, istemci uygulamalarının bir etkinlik başlatıcı oluşturması için API'ler sağlar. SDK'lar, uygulamaların etkinlik başlatmasını istemek için kullanabilir.

Bu kitaplıklar aşağıdaki API'leri sunar:

Etkinlik kitaplıklarıyla etkinlik başlatma akışı aşağıdaki gibidir:

  1. SDK, etkinlikleri başlatacak tüm API'lere SdkActivityLauncher türünde bir parametre ekler.
  2. İstemci uygulaması, API çağrılarında SDK'ya iletilebilecek bir başlatıcı oluşturmak için etkinliklerinden birinde createSdkActivityLauncher çağrısı yapıyor.
  3. SDK, SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat) yöntemini çağırır ve tanımlayıcı jetonunu alır.
  4. SDK, etkinliği başlatmak için launchSdkActivity çağrısını yapar.

Aşağıdaki şemada, etkinlik kitaplıklarının kullanılmasındaki akış gösterilmektedir.

Etkinlik kitaplığı sıra şeması
Etkinlik kitaplıklarını kullanarak bir etkinlik başlatma akışını gösteren sıra şeması.

Platform API'leri

Platformda, SDK Çalışma Zamanında korumalı alana alınmış etkinliklerin oluşturulmasını ve yönetilmesini kolaylaştırmak için aşağıdaki API'ler kullanıma sunulmuştur:

Platform API'lerini kullanarak etkinlik başlatmak için SDK'ların şu akışı izlemesi gerekir:

  1. SDK, sağlanan API'leri kullanarak bir etkinlik işleyici kaydeder ve bir tanımlayıcı edinir.
  2. SDK, bu tanımlayıcıyı istemci uygulamasıyla paylaşır.
  3. İstemci uygulaması, startSdkSandboxActivity(Activity, IBinder) platformu API'si ile SDK Çalışma Zamanında bir etkinlik başlatma yöntemini çağırarak bu yeni etkinlik için seçilen başlangıç Etkinliği'ni ve Etkinlik İşleyici'nin tanımlayıcısını parametre olarak iletir.
  4. Platform bir etkinlik başlatır ve Etkinlik İşleyici'de (SdkSandboxActivityHandler.onActivityCreated(Activity)) geri çağırma yaparak SDK'yı bilgilendirir.
  5. SDK, etkinliği bir reklamla doldurmak için kullanır.

Platform API'lerinin kullanılması SDK'yı, SdkSandboxActivityHandler'ın tanımlayıcısını uygun zamanda API'leri aracılığıyla istemci uygulamasıyla paylaşmaktan sorumlu hale getirir ve istemci uygulamalarına bunun nasıl kullanılacağı konusunda rehberlik eder.

Aşağıdaki akış şemasında, örnek SDK'nın geri çağırması beklenen launchActivity(AppCallback) yöntemi bulunmaktadır (SDK'nın API'sinin parçası olarak tanımlanır). Bu geri çağırma, Etkinlik İşleyici'nin (SdkSandboxActivityHandler) tanımlayıcısını istemci uygulamasıyla paylaşmak için SDK tarafından kullanılır.

Platform API&#39;leri adım şeması
Platform API'lerini kullanarak etkinlik başlatma akışını gösteren sıra şeması.

Görüntülenebilirlik

SDK Çalışma Zamanı'nda, istemci uygulamasının görünüm hiyerarşisine entegre edilen reklamlar, SDK işleminden istemci uygulamasının işlemine kadar olan SDK görünümlerini oluşturmak için yan kanalları kullanı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ı dışında kullandıkları View API'lerini kullanamaz (Görüntülenebilirlik).

Buna karşın platform tarafından sağlanan etkinlik, SDK Çalışma Zamanı sürecinde yerel olarak yürütülür. Böylece yan kanallara olan ihtiyacı ortadan kaldırır ve SDK'ların standart Android Activity ve View API'lerini kullanmasına olanak tanır.

Bu farklı uygulamalar nedeniyle, devam eden çalışmaların amacı, reklam yükleme bağlamı ne olursa olsun görüntülenebilirlik sinyallerini almak için arayüzleri birleştirmektir.

Yaşam döngüsü

SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) üzerinden SDK'ya aktarılan ActivityHolder, LifecycleOwner özelliğini uygular ve Lifecycle.Event hakkında bilgi edinmek amacıyla kullanılabilir.

Geri gitme

ActivityHolder.getOnBackPressedDispatcher() yöntemi OnBackPressedDispatcher yöntemini döndürür. Bu yöntem, geri gezinmeyi işlemek amacıyla OnBackPressedCallback örneklerini kaydetmek için kullanılabilir.