전체 화면 광고에 대한 활동 지원

SDK 런타임은 SDK가 새 활동을 시작할 수 있는 방식에 제한을 가합니다. 이 경우 향상된 제어 및 사용자 환경을 위해 별도의 활동을 시작하는 것이 일반적인 전체 화면 광고 형식에서 문제가 됩니다. 이를 해결하기 위해 SDK 런타임에는 샌드박스 활동을 위한 새로운 메커니즘이 도입되었습니다.

SDK 런타임 환경 내에서 로드된 SDK는 매니페스트에서 <activity> 태그를 직접 정의하거나 자체 활동을 시작할 수 없습니다. 대신 새로운 인텐트 작업 START_SANDBOXED_ACTIVITY가 도입되었습니다.

SDK도 이 작업으로 인텐트를 시작할 수 없지만 클라이언트 앱에 이 인텐트를 시작하도록 요청할 수 있습니다. 그러면 시스템이 플랫폼에서 정의한 활동을 생성하여 SDK에 전달합니다. 이 활동은 SDK와 동일한 프로세스에서 실행됩니다.

그러면 SDK는 이 활동을 사용하여 전체 화면 광고 환경을 구현하고 관리할 수 있습니다.

플랫폼에서 제공하는 활동은 클라이언트 앱 작업의 일부로 실행되는 표준 android.app.Activity입니다.

SDK 런타임에서 활동 생성

활동을 만드는 데는 간소화된 Jetpack 활동 라이브러리를 사용하거나 플랫폼 API와 직접 상호작용하는 두 가지 기본 방법이 있습니다.

활동 라이브러리는 기본적인 복잡성을 추상화하여 활동 생성을 간소화하므로 활동 라이브러리를 사용하는 것이 좋습니다.

활동 라이브러리

활동 라이브러리에는 다음과 같은 여러 이점이 있습니다.

  • 활동 핸들러를 등록하고 클라이언트 앱과 식별자를 공유하는 방법에 관한 내부 세부정보를 추상화합니다.
  • 충족시킬 조건 (조건자)을 설정함으로써 앱 개발자가 앱 내에서 SDK가 활동을 생성하는 방식을 더 세밀하게 제어할 수 있습니다.
  • SDK가 활동을 실행하는 API를 정의하는 통합된 방법을 만듭니다.

활동 라이브러리는 코어, 클라이언트, 제공자라는 세 가지입니다.

  • core 라이브러리는 클라이언트 앱과 제공자 라이브러리에서 사용되는 인터페이스를 제공합니다.
  • provider 라이브러리는 SDK가 활동을 실행하는 API를 제공합니다.
  • 클라이언트 라이브러리는 클라이언트 앱이 활동 런처를 만들 수 있는 API를 제공합니다. SDK는 이 API를 사용하여 앱이 활동을 실행하도록 요청할 수 있습니다.

이러한 라이브러리에는 다음과 같은 API가 도입되었습니다.

활동 라이브러리로 활동을 실행하는 흐름은 다음과 같습니다.

  1. SDK는 SdkActivityLauncher 유형의 매개변수를 활동을 시작할 모든 API에 추가합니다.
  2. 클라이언트 앱은 활동 중 하나에서 createSdkActivityLauncher를 호출하여 API 호출 시 SDK에 전달할 수 있는 런처를 만듭니다.
  3. SDK는 SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)를 호출하고 식별자 토큰을 검색합니다.
  4. SDK는 launchSdkActivity를 호출하여 활동을 실행합니다.

다음 다이어그램은 활동 라이브러리를 사용하는 경우의 흐름을 보여줍니다.

활동 라이브러리 시퀀스 다이어그램
활동 라이브러리를 사용한 활동 시작 흐름을 보여주는 시퀀스 다이어그램

플랫폼 API

SDK 런타임 내에서 샌드박스 활동을 쉽게 만들고 관리할 수 있도록 플랫폼에 다음 API가 도입되었습니다.

플랫폼 API를 사용하여 활동을 시작하려면 SDK가 다음 흐름을 따라야 합니다.

  1. SDK는 제공된 API를 사용하여 활동 핸들러를 등록하고 식별자를 가져옵니다.
  2. SDK는 이 식별자를 클라이언트 앱과 공유합니다.
  3. 클라이언트 앱은 이 메서드를 호출하여 플랫폼 API startSdkSandboxActivity(Activity, IBinder)로 SDK 런타임에서 활동을 시작하고 이 새 활동에 대해 선택한 시작 활동과 활동 핸들러의 식별자를 매개변수로 전달합니다.
  4. 플랫폼은 활동을 시작하고 활동 핸들러 (SdkSandboxActivityHandler.onActivityCreated(Activity))의 콜백을 통해 SDK에 알립니다.
  5. SDK는 활동을 사용하여 광고를 채웁니다.

플랫폼 API를 사용하면 SDK가 적절한 시점에 API를 통해 SdkSandboxActivityHandler의 식별자를 클라이언트 앱과 공유하고 클라이언트 앱에 사용 방법을 안내할 책임이 있습니다.

다음 흐름 다이어그램에서 예시 SDK에는 (SDK API의 일부로 정의된) 콜백을 예상하는 launchActivity(AppCallback) 메서드가 있습니다. 이 콜백은 SDK에서 활동 핸들러 (SdkSandboxActivityHandler)의 식별자를 클라이언트 앱과 공유하는 데 사용합니다.

플랫폼 API 시퀀스 다이어그램
플랫폼 API를 사용한 활동 시작 흐름을 보여주는 시퀀스 다이어그램

조회 가능성

SDK 런타임 내에서 클라이언트 앱의 뷰 계층 구조에 통합된 광고는 부채널을 사용하여 SDK 프로세스에서 클라이언트 앱의 프로세스로 SDK 뷰를 렌더링합니다.

SDK는 광고가 사용자에게 표시되는지 확인하기 위해 SDK 런타임 외부에서 사용하는 것과 동일한 View API를 사용할 수 없습니다. 광고 뷰가 애플리케이션의 창(조회 가능성)에 연결되어 있지 않기 때문입니다.

반대로 플랫폼에서 제공하는 활동은 기본적으로 SDK 런타임 프로세스 내에서 실행되므로 부채널이 필요하지 않으며 SDK가 표준 Android ActivityView API를 사용할 수 있습니다.

이러한 다양한 구현으로 인해 지속적으로 인터페이스를 통합하여 광고 로드 컨텍스트와 관계없이 조회가능성 신호를 가져오고 있습니다.

Lifecycle

SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)를 통해 SDK에 전달된 ActivityHolderLifecycleOwner를 구현하며 이를 통해 Lifecycle.Event에 관해 알 수 있습니다.

뒤로 탐색

ActivityHolder.getOnBackPressedDispatcher() 메서드는 뒤로 탐색을 처리하기 위해 OnBackPressedCallback 인스턴스를 등록하는 데 사용할 수 있는 OnBackPressedDispatcher를 반환합니다.