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가 도입되었습니다.
SdkActivityLauncher
: 활동 런처를 사용하면 SDK가 클라이언트 앱에서 실행되는 활동을 처리할 수 있습니다. 클라이언트 앱은 런처를 만들어 활동을 시작하는 SDK의 API에 매개변수로 전달해야 합니다.<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean )
: 클라이언트 앱이 활동에서 호출하여 런처를 만들 수 있는 확장 함수입니다.SdkActivityLauncher.launchSdkActivity(IBinder)
: 앱에 활동을 실행하도록 요청하기 위해 SDK에서 사용하는 메서드입니다.
활동 라이브러리로 활동을 실행하는 흐름은 다음과 같습니다.
- SDK는
SdkActivityLauncher
를 활동을 시작하는 모든 API에 연결합니다. - 클라이언트 앱은
활동 중 하나에서
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의 액티비티 핸들러 식별자를 매개변수로 전달해야 합니다.
플랫폼 API를 사용하여 활동을 시작하려면 SDK가 다음 흐름을 따라야 합니다.
- SDK는 제공된 API를 사용하여 활동 핸들러를 등록하고 식별자를 가져옵니다.
- SDK는 이 식별자를 클라이언트 앱과 공유합니다.
- 클라이언트 앱은 이 메서드를 호출하여 플랫폼 API
startSdkSandboxActivity(Activity, IBinder)
로 SDK 런타임에서 활동을 시작하고 이 새 활동에 대해 선택한 시작 활동과 활동 핸들러의 식별자를 매개변수로 전달합니다. - 플랫폼은 활동을 시작하고 활동 핸들러 (
SdkSandboxActivityHandler.onActivityCreated(Activity)
)의 콜백을 통해 SDK에 알립니다. - SDK는 활동을 사용하여 광고를 채웁니다.
플랫폼 API를 사용하면 SDK가 SdkSandboxActivityHandler의 적절한 시점에 클라이언트 앱과 식별자를 제공해야 합니다. 클라이언트 앱에 사용 방법을 안내합니다.
다음 흐름 다이어그램에서 예시 SDK에는launchActivity(AppCallback)
콜백을 사용합니다 (SDK API의 일부로 정의됨). 이 콜백은
활동 핸들러 (SdkSandboxActivityHandler
)의
클라이언트 앱과 <ph type="x-smartling-void-element"><br /></ph> 식별자
조회가능성
SDK 런타임 내에서 클라이언트 앱의 뷰 계층 구조에 통합된 광고는 측면 채널 SDK 프로세스에서 클라이언트 앱의 프로세스로 SDK 뷰를 렌더링합니다.
SDK는 SDK 런타임 외부에서 사용하는 것과 동일한 View API를 사용하여 사용자가 광고를 볼 수 있는지 여부를 결정합니다. 애플리케이션 창에 (조회가능성)
반대로 플랫폼에서 제공하는 활동은 기본적으로 SDK 런타임 프로세스 내에서 실행되므로 부채널이 필요하지 않으며 SDK가 표준 Android Activity
및 View
API를 사용할 수 있습니다.
이처럼 다양한 구현 방식으로 인해 Google에서는 인터페이스를 사용하여 광고 로드 컨텍스트와 관계없이 조회가능성 신호를 가져옵니다.
Lifecycle
이
ActivityHolder
드림
SDK에 전달됩니다.
SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
implements
LifecycleOwner
이 측정항목을 통해
Lifecycle.Event
.
뒤로 탐색
메서드
ActivityHolder.getOnBackPressedDispatcher()
드림
반품
OnBackPressedDispatcher
이 세그먼트를 통해
OnBackPressedCallback
인스턴스를 사용하여 뒤로 탐색을 처리합니다.