본문으로 건너뛰기

다크 테마

NAM SDK 는 NDA 모듈로 처리되는 일부 S2S 광고에 한해서 다크 테마를 지원합니다. 모든 광고 형식에 다크 테마가 적용되는 것은 아니므로, 앱에서 사용하는 광고 형식이 다크 테마를 지원하는지 NAM 관리자를 통해 확인해야 합니다.

이 가이드에서는 NAM SDK 다크 테마를 적용하는 방법을 설명합니다.

다크 테마 적용 방법

NAM SDK 가 지원하는 다크 테마 관련 설정값은 총 3가지로 아래의 값이 있습니다.

설명
ResolvedTheme.SYSTEM기기의 시스템 설정에 적용된 DayNight 테마가 적용됩니다.
ResolvedTheme.LIGHT기기의 시스템 설정을 따르지 않고 항상 밝은 테마가 적용됩니다. (미설정시 기본값)
ResolvedTheme.DARK기기의 시스템 설정을 따르지 않고 항상 어두운 테마가 적용됩니다.

그리고 위의 다크 테마 관련 설정값은 전역적인 설정 방식과 개별 광고 로더별로 설정할 수 있는 개별 설정 방식으로 나누어서 설명할 수 있습니다.

1. 전역 설정 방식

앱 내 모든 광고에 동일한 다크 테마를 적용하려면 전역 설정 방식을 사용할 수 있습니다. SdkProperties 를 통해 각 미디에이션 네트워크 옵션을 설정할 수 있는데, 그 중 NdaProviderOptions 를 설정하고, NdaProviderOptions 내에서 theme 속성을 지정하여 다크 테마를 설정할 수 있습니다.

아래 예시는 전역적으로 어두운 테마를 설정하는 방법을 보여줍니다.

GfpSdk.setSdkProperties(GfpSdk.getSdkProperties().buildUpon()
...
.addProviderOptions(NdaProviderOptions.Builder().setTheme(ResolvedTheme.DARK).build())
.build())

2. 단일 광고 설정 방식

특정 광고에만 다크 테마를 적용하려면, 각 광고 형식별로 제공되는 옵션을 사용하여 다크 테마를 설정할 수 있습니다. 이 설정을 적용하면 전역적으로 설정된 다크 테마 설정은 무시되고, 해당 광고에만 지정된 다크 테마 설정이 우선 적용됩니다.

아래 예시는 GfpAdLoader 로 요청 되는 네이티브 심플 광고를 항상 어두운 테마로 설정하는 예시를 보여줍니다.

val nativeSimpleAdOptions = GfpNativeSimpleAdOptions.Builder()
.setTheme(ResolvedTheme.DARK)
.build()
val adLoader = GfpAdLoader.Builder(activity, adParam)
.withAdListener(object: AdEventListener {
...
})
.withNativeSimpleAd(nativeSimpleAdOptions) { nativeSimpleAd ->
...
}
.build()

LazyTheme

앞서 설명한 다크 테마 설정 방식은 광고가 이미 로드된 상태에서 DayNight 설정이 변경될 경우, 변경된 DayNight 값에 따라 다크 테마 설정이 즉시 반영되지 않을 수 있습니다. 즉, 광고가 처음 로드될 때의 테마 설정이 유지될 수 있습니다.

NAM SDK 6.1.1 버전부터는 위와 같은 상황에서 다크 테마 설정이 즉시 반영될 수 있도록 하는 LazyTheme 를 지원합니다. LazyTheme 는 광고가 로드된 이후에도 DayNight 설정 변경에 따른 광고의 다크 테마를 동적으로 변경할 수 있도록 지원합니다. 즉, 앱이 실행 중인 상태에서 사용자가 시스템 테마를 변경하거나, 앱 내에서 테마를 변경하는 경우에도 광고가 현재 테마에 맞게 표시되도록 할 수 있습니다.

다음 예제는 네이티브 광고에서 LazyTheme 를 사용하여 테마값이 실제로 적용되어야 하는 시점에 필요한 테마 값을 적용하는 방법을 보여줍니다.

val nativeAdOptions = GfpNativeAdOptions.Builder()
...
.setTheme(LazyTheme {
// This method is called when the theme value needs to be actually
// applied and should return the currently required theme value.
// The following example demonstrates how to return the LIGHT theme.
ResolvedTheme.LIGHT
})
.build()
val adLoader = GfpAdLoader.Builder(requireActivity(), adParam)
.withNativeAd(nativeAdOptions) { nativeAd ->
...
}
.build()