SDK ランタイムでは、SDK が新しいアクティビティを起動する方法に制限があります。そのため、コントロール性とユーザー エクスペリエンスを高めるために別のアクティビティを開始する必要があるのが一般的であるフルスクリーン広告フォーマットには課題があります。これに対処するために、SDK ランタイムにはサンドボックス化されたアクティビティ用の新しいメカニズムが導入されています。
SDK ランタイム環境内で読み込まれた SDK では、マニフェストで <activity>
タグを直接定義したり、独自のアクティビティを開始したりすることはできません。
代わりに、新しいインテント アクション START_SANDBOXED_ACTIVITY
が導入されています。
このアクションを使用したインテントの起動も SDK が制限されますが、 このインテントを開始するようクライアント アプリにリクエストします。すると、プラットフォーム定義のアクティビティが作成され、SDK に渡されます。このアクティビティの実行時間 SDK と同じプロセスで行います。
SDK はこのアクティビティを使用して、全画面広告を実装、管理できます。 体験できます
プラットフォームが提供するアクティビティは、標準の android.app.Activity
です。
クライアント アプリのタスクの一部として起動されます。
SDK ランタイムでのアクティビティの作成
アクティビティを作成するには主に 2 つの方法があります。合理化された Jetpack アクティビティ ライブラリを使用する方法と、プラットフォーム API を直接操作する方法です。
アクティビティ ライブラリは、根本的な複雑さを取り除いてアクティビティの作成を簡素化するため、Google がおすすめします。
アクティビティ ライブラリ
アクティビティ ライブラリには、 利点:
- アクティビティ ハンドラの登録と、クライアント アプリとの識別子の共有に関する内部の詳細を抽象化します。
- 満たす条件(述語)を設定できるようにすることで、SDK がアプリ内でアクティビティを作成する方法をアプリ デベロッパーがより詳細に制御できるようになります。
- アクティビティを起動する API を SDK で定義するための統一された方法を作成する。
アクティビティ ライブラリには、core、client、provider の 3 つがあります。
- core ライブラリは、クライアント アプリと API で使用されるインターフェースを提供します。 使用します。
- provider ライブラリは、SDK がアクティビティを起動するための API を提供します。
- クライアント ライブラリは、クライアント アプリがアクティビティ ランチャーを作成するための API を提供します。SDK は、このランチャーを使用して、アプリにアクティビティの起動を要求できます。
これらのライブラリでは、次の API が導入されています。
SdkActivityLauncher
: アクティビティ ランチャーを使用すると、SDK でクライアント アプリからのアクティビティの起動を処理できます。クライアント アプリはランチャーを作成し、アクティビティを開始する SDK の API にパラメータとして渡す必要があります。<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean )
: クライアント アプリがアクティビティから呼び出してランチャーを作成できる拡張関数。SdkActivityLauncher.launchSdkActivity(IBinder)
: アプリにアクティビティの起動をリクエストするために SDK によって使用されるメソッド。
アクティビティ ライブラリを使用してアクティビティを起動するフローは次のとおりです。
- SDK によって、次のタイプのパラメータが追加されます。
アクティビティを開始する API に
SdkActivityLauncher
。 - クライアント アプリが以下を呼び出します。
アクティビティの 1 つに
createSdkActivityLauncher
を追加して、API 呼び出しで SDK に渡すことができるランチャーを作成します。 - SDK が呼び出します
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)
識別子トークンを取得します。 - SDK が呼び出します
launchSdkActivity
アクティビティを起動します。
次の図は、アクティビティ ライブラリを使用する場合のフローを示しています。
<ph type="x-smartling-placeholder">プラットフォーム API
プラットフォームには、作成や管理を容易にする次の API が導入されています。 SDK ランタイム内のサンドボックス化されたアクティビティの管理:
SdkSandboxActivityHandler
: アクティビティ ハンドラは、アクティビティが作成されたときに SDK に通知するために使用され、アクティビティは SDK によって登録されます。- アクティビティ ハンドラの登録を支援するために、SDK では
SdkSandboxController
で次のメソッドを使用できます。 <ph type="x-smartling-placeholder">- </ph>
.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: 次のインスタンスを登録します:SdkSandboxActivityHandler
、IBinder
識別子を返します。.unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: 登録済みのインスタンスの登録を解除SdkSandboxActivityHandler
その識別子を使用します。
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder)
: クライアント アプリから呼び出されるメソッドで、SDK のアクティビティの作成をトリガーします。クライアント アプリは、選択した開始アクティビティと SDK のアクティビティ ハンドラ識別子をパラメータとして渡す必要があります。
Platform API を使用してアクティビティを開始するには、SDK を次のフローに沿って操作する必要があります。
- SDK は、提供された API を使用してアクティビティ ハンドラを登録し、識別子を取得します。
- SDK はこの ID をクライアント アプリと共有します。
- クライアント アプリは、プラットフォームの API
startSdkSandboxActivity(Activity, IBinder)
を使用して SDK ランタイムのアクティビティを開始するメソッドを呼び出し、この新しいアクティビティ用に選択された開始アクティビティとアクティビティ ハンドラの識別子をパラメータとして渡します。 - プラットフォームがアクティビティを開始し、アクティビティ ハンドラ(
SdkSandboxActivityHandler.onActivityCreated(Activity)
)内のコールバックを通じて SDK に通知します。 - SDK はアクティビティを使用して広告を表示します。
Platform API を使用すると、SDK は SdkSandboxActivityHandler の API を通じてクライアント アプリとの ID を適切なタイミングで取得し、 クライアント アプリでの使用方法を説明します。
次のフロー図では、サンプル SDK のメソッド launchActivity(AppCallback)
は、
コールバック(SDK の API の一部として定義される)によって識別されます。このコールバックは、
アクティビティ ハンドラ(SdkSandboxActivityHandler
)を共有するための SDK
クライアント アプリに関連付けています。
視認性
SDK ランタイム内では、クライアント アプリのビュー階層に統合された広告には、 面 チャンネル SDK プロセスからクライアント アプリのプロセスに SDK ビューをレンダリングします。
SDK は、SDK ランタイムの外部で使用するのと同じ View API を使用して、次のことを行うことはできません。 広告がユーザーに表示されるかどうかを決定します。広告ビューは ウィンドウにアタッチされる (視認性)。
これに対して、プラットフォームが提供するアクティビティは SDK ランタイム プロセス内でネイティブに実行されるため、サイドチャネルが不要になり、SDK で標準の Android Activity
API と View
API を使用できるようになります。
こうした実装の違いから、継続的な取り組みとして、 インターフェースを使用して、広告の読み込み状況に関係なく視認性のシグナルを取得できます。
Lifecycle
「
ActivityHolder
渡されます。
SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
implements
LifecycleOwner
これを使用して
Lifecycle.Event
。
「戻る」ナビゲーション
メソッド
ActivityHolder.getOnBackPressedDispatcher()
返品
OnBackPressedDispatcher
これを使用して
OnBackPressedCallback
「戻る」ナビゲーションを処理できます。