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

SDK 執行階段會限制 SDK 啟動新活動的方式。這對全螢幕廣告格式來說是一大挑戰,因為這類格式通常需要啟動個別活動,才能提供更完善的控管功能和使用者體驗。為解決這個問題,SDK 執行階段為沙箱活動引進了全新機制。

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

雖然 SDK 也無法透過此動作啟動意圖,但 SDK 可以要求用戶端應用程式啟動此意圖。系統會建立平台定義的活動,並將其傳遞至 SDK。這個活動會在與 SDK 相同的程序中執行。

接著,SDK 就能使用這個活動來實作及管理全螢幕廣告體驗。

平台提供的活動是標準 android.app.Activity,會做為用戶端應用程式工作的一部分啟動。

在 SDK 執行階段上建立活動

您可以透過兩種主要方法建立活動:使用精簡的 Jetpack Activity 程式庫,或直接與平台 API 互動。

建議您使用活動程式庫,因為這些程式庫可抽象化底層的複雜性,簡化活動建立作業。

活動程式庫

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

  • 抽象化註冊活動處理常式及與用戶端應用程式共用其 ID 的內部細節。
  • 讓應用程式開發人員設定要滿足的條件 (謂詞),進一步掌控 SDK 在應用程式中建立活動的方式。
  • 為 SDK 建立統一方式,定義啟動活動的 API。

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

  • 核心程式庫會提供介面,供用戶端應用程式和提供者程式庫使用。
  • 提供者程式庫會提供 API,讓 SDK 啟動活動。
  • 用戶端程式庫提供 API,讓用戶端應用程式建立活動啟動器,SDK 可使用這項功能要求應用程式啟動活動。

這些程式庫會引入下列 API:

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

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

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

活動程式庫流程圖
呈現使用活動程式庫啟動活動的流程圖。

平台 API

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

如要使用平台 API 啟動活動,SDK 必須遵循以下流程:

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

使用平台 API 後,SDK 會負責在適當時間透過其 API 與用戶端應用程式共用 SdkSandboxActivityHandler 的 ID,並引導用戶端應用程式如何使用該 ID。

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

平台 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 例項,以便處理返回導覽。