全螢幕廣告的活動支援功能

SDK 執行階段對 SDK 啟動新活動的方式施加限制。這對全螢幕廣告格式來說是一大挑戰,一般必須分別啟動一個活動,才能進一步控管及改善使用者體驗。為解決這個問題,SDK 執行階段為沙箱活動推出了全新機制,

在 SDK 執行階段環境中載入的 SDK 無法直接在資訊清單中定義 <activity> 標記或啟動自己的活動。而是改為導入新的意圖動作 START_SANDBOXED_ACTIVITY

雖然 SDK 也不能使用此動作啟動意圖,但 SDK 可以要求用戶端應用程式啟動此意圖。接著,系統會建立平台定義的活動,並傳遞至 SDK。這個活動會在 SDK 相同的程序中執行。

這樣 SDK 就能利用這個活動,導入及管理全螢幕廣告體驗。

平台提供的活動是標準 android.app.Activity,會在用戶端應用程式的任務中啟動。

在 SDK 執行階段上建立活動

建立活動的主要方法有兩種:使用簡化的 Jetpack Activity Library,或直接與 Platform API 互動。

建議您使用 Activity 程式庫,因為將基本概念抽象化,簡化活動建立程序。

活動程式庫

活動程式庫提供多項優點:

  • 抽象化註冊活動處理常式的內部詳細資料,並與用戶端應用程式分享其 ID。
  • 可讓應用程式開發人員設定符合的條件 (述詞),讓 SDK 能夠進一步控管 SDK 在應用程式內建立活動的方式。
  • 為 SDK 定義用於定義啟動活動的 API。

活動程式庫有三種:核心、用戶端和提供者。

  • core 程式庫會提供用戶端應用程式和提供者程式庫使用的介面。
  • provider 程式庫提供可讓 SDK 啟動活動的 API。
  • client 程式庫提供 API,讓用戶端應用程式建立活動啟動器,SDK 可用於要求應用程式啟動活動。

這些程式庫引入下列 API:

使用活動程式庫啟動活動的流程如下:

  1. SDK 會將 SdkActivityLauncher 類型的參數新增至任何會啟動活動的 API。
  2. 用戶端應用程式對其中一個活動呼叫 createSdkActivityLauncher,建立啟動器,以便在 API 呼叫上傳遞至 SDK。
  3. SDK 會呼叫 SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat) 並擷取 ID 權杖。
  4. SDK 會呼叫 launchSdkActivity 來啟動活動。

下圖顯示使用活動程式庫時的流程。

活動程式庫序列圖表
顯示使用活動程式庫啟動活動的流程圖。

平台 API

平台推出了下列 API,方便您在 SDK 執行階段中建立及管理沙箱活動:

如要使用 Platform API 啟動活動,SDK 必須按照下列流程操作:

  1. SDK 使用提供的 API 註冊活動處理常式,並取得 ID。
  2. SDK 會與用戶端應用程式共用這個 ID。
  3. 用戶端應用程式會呼叫這個方法,使用平台 API startSdkSandboxActivity(Activity, IBinder) 在 SDK 執行階段中啟動活動,並以參數為這個新活動選擇的啟動活動,以及活動處理常式的 ID。
  4. 平台會啟動 Activity,並透過 Activity Handler (SdkSandboxActivityHandler.onActivityCreated(Activity)) 中的回呼通知 SDK。
  5. SDK 會使用活動填入廣告。

使用 Platform API 可讓 SDK 在適當時機透過其 API,將 SdkSandboxActivityHandler 的 ID 分享給用戶端應用程式,並引導用戶端應用程式使用 ID。

在以下流程圖中,範例 SDK 中的 launchActivity(AppCallback) 方法會預期回呼 (定義為 SDK API 的一部分)。SDK 會使用這個回呼,將活動處理常式 (SdkSandboxActivityHandler) 的 ID 分享給用戶端應用程式。

平台 API 序列圖表
顯示使用平台 API 啟動活動的流程圖。

可視度

在 SDK 執行階段中,整合至用戶端應用程式檢視區塊階層的廣告會使用側邊管道,將來自 SDK 程序的 SDK 檢視畫面算繪到用戶端應用程式的處理程序。

由於廣告檢視畫面並未附加至應用程式視窗,因此 SDK 無法在 SDK 執行階段外使用相同的 View API,判斷是否要向使用者顯示廣告 (可視度)。

相反地,平台提供的活動會在 SDK 執行階段程序中原生執行,無需使用側邊管道,並允許 SDK 使用標準 Android ActivityView API。

由於導入方式各不相同,因此無論廣告載入環境如何,持續致力統合介面,擷取可視度信號。

生命週期

透過 SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) 傳遞至 SDK 的 ActivityHolder 會導入 LifecycleOwner,並可用來瞭解 Lifecycle.Event

返回瀏覽

ActivityHolder.getOnBackPressedDispatcher() 方法會傳回 OnBackPressedDispatcher,可用於註冊 OnBackPressedCallback 執行個體來處理返回瀏覽。