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

SDK 執行階段會限制 SDK 啟動新活動的方式。這對全螢幕廣告格式來說是一大挑戰,因為這類廣告通常會啟動個別活動,以提升控制能力和使用者體驗。為解決這個問題,SDK 執行階段導入了新的沙箱活動機制。

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

SDK 也無法使用這項動作啟動意圖,但可以要求用戶端應用程式啟動這項意圖。系統隨後會建立平台定義的活動,並傳遞至 SDK。這項活動會在與 SDK 相同的程序中執行。

SDK 隨後可使用這項活動,實作及管理全螢幕廣告體驗。

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

在 SDK 執行階段建立活動

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

建議使用 Activity 程式庫,因為這類程式庫會將底層的複雜性抽象化,簡化活動建立程序。

活動庫

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

  • 將註冊活動處理常式及與用戶端應用程式共用其 ID 的內部詳細資料抽象化。
  • 應用程式開發人員可以設定條件 (述詞),進一步控管 SDK 在應用程式中建立活動的方式。
  • 為 SDK 建立統一方式,定義啟動活動的 API。

活動程式庫有三種,分別為「核心」、「用戶端」和「提供者」。

  • 核心程式庫會提供介面,供用戶端應用程式和提供者程式庫使用。
  • 提供者程式庫提供 API,供 SDK 啟動活動。
  • 用戶端程式庫提供 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. 平台會啟動活動,並透過活動處理常式 (SdkSandboxActivityHandler.onActivityCreated(Activity)) 中的回呼通知 SDK。
  5. SDK 會使用活動填入廣告。

使用 Platform API 時,SDK 會負責在適當時間透過 API 與用戶端應用程式分享 SdkSandboxActivityHandler 的 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 執行個體來處理返回導覽。