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:
SdkActivityLauncher
:活動啟動器可讓 SDK 處理從用戶端應用程式的啟動活動。用戶端應用程式應建立啟動器,並以參數形式傳遞至 SDK 的 API 來啟動活動。<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean )
: 這個擴充功能函式可供用戶端應用程式從活動呼叫,以建立啟動器。SdkActivityLauncher.launchSdkActivity(IBinder)
:SDK 用於要求應用程式啟動活動的方法。
使用活動程式庫啟動活動的流程如下:
- SDK 會新增
將
SdkActivityLauncher
新增至任何要啟動活動的 API。 - 用戶端應用程式呼叫
對其中一個活動使用
createSdkActivityLauncher
建立啟動器,可在 API 呼叫上傳遞至 SDK。 - SDK 呼叫
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)
敬上 並擷取 ID 符記 - SDK 呼叫
launchSdkActivity
敬上 來啟動活動。
下圖顯示使用活動程式庫時的流程。
平台 API
平台推出下列 API 來協助建立 在 SDK 執行階段中管理沙箱活動:
SdkSandboxActivityHandler
: 活動處理常式會用來在建立活動時通知 SDK,並由 SDK 註冊。- 為了協助註冊活動處理常式,SDK 可以在
SdkSandboxController
下使用以下方法:.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: 註冊SdkSandboxActivityHandler
、 會傳回IBinder
ID.unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: 取消註冊已註冊的例項SdkSandboxActivityHandler
使用這個符記
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder)
: 此方法從用戶端應用程式叫用後,會觸發建立 SDK 的活動。用戶端應用程式必須將所選啟動 Activity 和 SDK 的 Activity Handler ID 傳遞為參數。
如要使用 Platform API 啟動活動,SDK 必須按照下列流程操作:
- SDK 使用提供的 API 註冊活動處理常式,並取得 ID。
- SDK 會與用戶端應用程式共用這個 ID。
- 用戶端應用程式會呼叫這個方法,使用平台 API
startSdkSandboxActivity(Activity, IBinder)
在 SDK 執行階段中啟動活動,並以參數為這個新活動選擇的啟動活動,以及活動處理常式的 ID。 - 平台會啟動 Activity,並透過 Activity Handler (
SdkSandboxActivityHandler.onActivityCreated(Activity)
) 中的回呼通知 SDK。 - SDK 會使用活動填入廣告。
使用 Platform API 可讓 SDK 負責 SdkSandboxActivityHandler 的 用戶端應用程式在適當時機透過 API 傳回用戶端應用程式 ID,以及 引導客戶應用程式使用
在以下流程圖中,範例 SDK 中的 launchActivity(AppCallback)
方法會預期
回呼 (在 SDK 的 API 中定義)。這個回呼是由
用來共用活動處理常式 (SdkSandboxActivityHandler
) 的 SDK
ID 轉傳給用戶端應用程式。
可視度
在 SDK 執行階段中,整合到用戶端應用程式檢視區塊階層的廣告會使用 側邊 管道 ,將 SDK 程序從 SDK 程序轉譯至用戶端應用程式的處理程序。
SDK 無法在 SDK 執行階段外使用相同的 View API, 判斷使用者是否看到廣告,因為使用者不會看到廣告 附加至應用程式視窗 (可視度)。
相反地,平台提供的活動會在 SDK 執行階段程序中原生執行,無需使用側邊管道,並允許 SDK 使用標準 Android Activity
和 View
API。
由於導入方式不同,持續致力統合 介面,可擷取可視度信號,而不受廣告載入環境的影響。
生命週期
ActivityHolder
敬上
經由
SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
implements
LifecycleOwner
可用來瞭解
Lifecycle.Event
。
返回瀏覽
方法
ActivityHolder.getOnBackPressedDispatcher()
敬上
return
OnBackPressedDispatcher
可以用來
OnBackPressedCallback
執行個體來處理返回導覽。