SDK Çalışma Zamanı, SDK'ların yeni etkinlikleri başlatma şekliyle ilgili kısıtlamalar uygular. Bu durum, genellikle gelişmiş kontrol ve kullanıcı deneyimi için ayrı bir etkinlik başlatmaya dayanan tam ekran reklam biçimleri açısından zorluk yaratır. Bu sorunu çözmek için SDK Çalışma Zamanı, korumalı alan etkinlikleri için yeni bir mekanizma sunar.
SDK Çalışma Zamanı ortamında yüklenen SDK'lar, manifestlerinde <activity> etiketlerini doğrudan tanımlayamaz veya kendi etkinliklerini başlatamaz.
Bunun yerine yeni bir amaç işlemi olan START_SANDBOXED_ACTIVITY kullanıma sunuluyor.
SDK'ların bu işlemle amaç başlatması da kısıtlanmış olsa da SDK'lar, istemci uygulamasından bu amacı başlatmasını isteyebilir. Sistem daha sonra platform tarafından tanımlanan bir etkinlik oluşturur ve bunu SDK'ya iletir. Bu etkinlik, SDK ile aynı süreçte çalışır.
SDK daha sonra 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'dır.
SDK Çalışma Zamanı'nda etkinlik oluşturma
Etkinlik oluşturmak için iki temel yönteminiz vardır: basitleştirilmiş Jetpack Activity kitaplıklarını kullanmak veya doğrudan Platform API'leri ile etkileşim kurmak.
Temel karmaşıklığı soyutlayarak etkinlik oluşturmayı basitleştirdiği için Etkinlik kitaplıklarını kullanmanızı öneririz.
Etkinlik kitaplıkları
Etkinlik kitaplıkları çeşitli avantajlar sunar:
- Etkinlik işleyicilerini kaydetme ve tanımlayıcılarını istemci uygulamalarıyla paylaşma işlemlerinin dahili ayrıntılarını soyutlayın.
- Uygulama geliştiricilerin, karşılanması gereken koşullar (yüklemler) belirlemelerine olanak tanıyarak SDK'ların uygulamalarında nasıl Etkinlik oluşturduğu üzerinde daha fazla kontrol sahibi olmalarını sağlar.
- SDK'ların etkinlik başlatan API'leri tanımlaması için birleşik bir yöntem oluşturun.
Üç etkinlik kitaplığı vardır: çekirdek, istemci ve sağlayıcı.
- Çekirdek kitaplık, istemci uygulamaları ve sağlayıcı kitaplıkları tarafından kullanılan arayüzleri sağlar.
- Sağlayıcı kitaplığı, SDK'ların etkinlik başlatması için API'ler sağlar.
- İstemci kitaplığı, istemci uygulamalarının etkinlik başlatıcı oluşturması için API'ler sağlar. SDK'lar, uygulamalardan etkinlik başlatmalarını istemek için bu API'leri kullanabilir.
Bu kitaplıklar aşağıdaki API'leri kullanıma sunar:
SdkActivityLauncher: Etkinlik başlatıcı, SDK'ların istemci uygulamasından etkinlik başlatmasını sağlar. İstemci uygulamaları bir başlatıcı oluşturmalı ve bunu etkinlik başlatan SDK API'lerine parametre olarak iletmelidir.<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean ): İstemci uygulamasının, başlatıcı oluşturmak için etkinliklerinden çağırabileceği bir uzantı işlevi.SdkActivityLauncher.launchSdkActivity(IBinder): SDK'nın, uygulamadan etkinlik başlatmasını istemek için kullandığı bir yöntem.
Etkinlik kitaplıklarıyla etkinlik başlatma akışı şu şekildedir:
- SDK, etkinlikleri başlatacak tüm API'lere
SdkActivityLaunchertüründe bir parametre ekler. - İstemci uygulaması, API çağrılarında SDK'ya iletilebilecek bir başlatıcı oluşturmak için etkinliklerinden birinde
createSdkActivityLauncherçağrısı yapar. - SDK,
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)işlevini çağırır ve tanımlayıcı jetonunu alır. - Etkinliği başlatmak için SDK çağrıları
launchSdkActivityyapılır.
Aşağıdaki şemada, etkinlik kitaplıklarının kullanılması durumundaki akış gösterilmektedir.
Platform API'leri
Platform, SDK Çalışma Zamanı'nda korumalı alan etkinliklerinin oluşturulmasını ve yönetilmesini kolaylaştırmak için aşağıdaki API'leri kullanıma sunar:
SdkSandboxActivityHandler: Etkinlik işleyici, bir etkinlik oluşturulduğunda SDK'yı bilgilendirmek için kullanılır ve SDK tarafından kaydedilir.- SDK, Etkinlik İşleyicileri'nin kaydına yardımcı olmak için
SdkSandboxControlleraltında aşağıdaki yöntemleri kullanabilir:.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler):SdkSandboxActivityHandlerörneğini kaydeder. Bu işlem,IBindertanımlayıcısını döndürür..unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler): Tanımlayıcısını kullanarakSdkSandboxActivityHandlerkayıtlı bir örneğin kaydını siler.
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder): İstemci uygulamasından çağrılan bu yöntem, SDK için etkinliklerin oluşturulmasını tetikler. İstemci uygulaması, seçtiği başlangıç etkinliğini ve SDK'nın etkinlik işleyici tanımlayıcısını parametre olarak iletmelidir.
Platform API'lerini kullanarak bir etkinlik başlatmak için SDK'ların şu akışı izlemesi gerekir:
- SDK, sağlanan API'leri kullanarak bir etkinlik işleyici kaydeder ve tanımlayıcı alır.
- SDK, bu tanımlayıcıyı istemci uygulamasıyla paylaşır.
- İstemci uygulaması, platform API'si
startSdkSandboxActivity(Activity, IBinder)ile SDK çalışma zamanında bir etkinlik başlatmak için yöntemi çağırır. Bu yeni etkinlik için seçilen başlangıç etkinliğini ve etkinlik işleyicinin tanımlayıcısını parametre olarak iletir. - Platform bir etkinlik başlatır ve Etkinlik İşleyici'deki (
SdkSandboxActivityHandler.onActivityCreated(Activity)) bir geri çağırma aracılığıyla SDK'yı bilgilendirir. - SDK, etkinliği reklamla doldurmak için kullanır.
Platform API'leri kullanıldığında SDK, SdkSandboxActivityHandler'ın tanımlayıcısını uygun bir zamanda API'leri aracılığıyla istemci uygulamasıyla paylaşmaktan ve istemci uygulamalarına bunu nasıl kullanacakları konusunda rehberlik etmekten sorumlu olur.
Aşağıdaki akış şemasında, örnek SDK'da bir geri çağırma (SDK'nın API'sinin bir parçası olarak tanımlanır) bekleyen launchActivity(AppCallback) yöntemi vardı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.
Görüntülenebilirlik
SDK Çalışma Zamanı'nda, istemci uygulamasının görünüm hiyerarşisine entegre edilen reklamlar, SDK sürecinden istemci uygulamasının sürecine SDK görünümlerini oluşturmak için yan kanalları kullanır.
Reklam görünümü uygulamanın penceresine eklenmediği için SDK, reklamın kullanıcıya görünür olup olmadığını belirlemek üzere SDK çalışma zamanı dışında kullandığı Görünüm API'lerini kullanamaz (Görünürlük).
Buna karşılık, platform tarafından sağlanan etkinlik, SDK Çalışma Zamanı sürecinde yerel olarak çalışır. Bu sayede yan kanallara gerek kalmaz ve SDK'lar standart Android Activity ve View API'lerini kullanabilir.
Bu farklı uygulamalar nedeniyle, devam eden çalışmalar reklam yükleme bağlamından bağımsız olarak görünürlük sinyallerini almak için arayüzleri birleştirmeyi amaçlamaktadır.
Yaşam döngüsü
SDK'ya ActivityHolder aracılığıyla iletilen
SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
LifecycleOwner'ı uygular ve
Lifecycle.Event hakkında bilgi edinmek için kullanılabilir.
Geri gezinme
ActivityHolder.getOnBackPressedDispatcher() yöntemi, geri gezinmeyi işlemek için OnBackPressedCallback örneklerini kaydetmek üzere kullanılabilecek OnBackPressedDispatcher değerini döndürür.