다크 테마
NAM SDK 는 NDA 모듈로 처리되는 일부 S2S 광고에 한해서 다크 테마를 지원합니다. 모든 광고 형식에 다크 테마가 적용되는 것은 아니므로, 앱에서 사용하는 광고 형식이 다크 테마를 지원하는지 NAM 관리자를 통해 확인해야 합니다.
이 가이드에서는 NAM SDK 다크 테마를 적용하는 방법을 설명합니다.
다크 테마 적용 방법
NAM SDK 가 지원하는 다크 테마 관련 설정값은 총 3가지로 아래의 값이 있습니다.
값 | 설명 |
---|---|
ResolvedTheme.SYSTEM | 기기의 시스템 설정에 적용된 DayNight 테마가 적용됩니다. |
ResolvedTheme.LIGHT | 기기의 시스템 설정을 따르지 않고 항상 밝은 테마가 적용됩니다. (미설정시 기본값) |
ResolvedTheme.DARK | 기기의 시스템 설정을 따르지 않고 항상 어두운 테마가 적용됩니다. |
그리고 위의 다크 테마 관련 설정값은 전역적인 설정 방식과 개별 광고 로더별로 설정할 수 있는 개별 설정 방식으로 나누어서 설명할 수 있습니다.
1. 전역 설정 방식
앱 내 모든 광고에 동일한 다크 테마를 적용하려면 전역 설정 방식을 사용할 수 있습니다. SdkProperties 를 통해 각 미디에이션 네트워크 옵션을 설정할 수 있는데, 그 중 NdaProviderOptions 를 설정하고, NdaProviderOptions 내에서 theme 속성을 지정하여 다크 테마를 설정할 수 있습니다.
아래 예시는 전역적으로 어두운 테마를 설정하는 방법을 보여줍니다.
- Kotlin
- Java
GfpSdk.setSdkProperties(GfpSdk.getSdkProperties().buildUpon()
...
.addProviderOptions(NdaProviderOptions.Builder().setTheme(ResolvedTheme.DARK).build())
.build())
GfpSdk.setSdkProperties(GfpSdk.getSdkProperties().buildUpon()
...
.addProviderOptions(new NdaProviderOptions.Builder().setTheme(ResolvedTheme.DARK).build())
.build());
2. 단일 광고 설정 방식
특정 광고에만 다크 테마를 적용하려면, 각 광고 형식별로 제공되는 옵션을 사용하여 다크 테마를 설정할 수 있습니다. 이 설정을 적용하면 전역적으로 설정된 다크 테마 설정은 무시되고, 해당 광고에만 지정된 다크 테마 설정이 우선 적용됩니다.
아래 예시는 GfpAdLoader 로 요청 되는 네이티브 심플 광고를 항상 어두운 테마로 설정하는 예시를 보여줍니다.
- Kotlin
- Java
val nativeSimpleAdOptions = GfpNativeSimpleAdOptions.Builder()
.setTheme(ResolvedTheme.DARK)
.build()
val adLoader = GfpAdLoader.Builder(activity, adParam)
.withAdListener(object: AdEventListener {
...
})
.withNativeSimpleAd(nativeSimpleAdOptions) { nativeSimpleAd ->
...
}
.build()
GfpNativeSimpleAdOptions nativeSimpleAdOptions = new GfpNativeSimpleAdOptions.Builder()
.setTheme(ResolvedTheme.DARK)
.build();
GfpAdLoader adLoader = new GfpAdLoader.Builder(activity, adParam)
.withAdListener(new AdEventListener() {
...
})
.withNativeSimpleAd(nativeSimpleAdOptions, nativeSimpleAd -> {
...
})
.build();
LazyTheme
앞서 설명한 다크 테마 설정 방식은 광고가 이미 로드된 상태에서 DayNight 설정이 변경될 경우, 변경된 DayNight 값에 따라 다크 테마 설정이 즉시 반영되지 않을 수 있습니다. 즉, 광고가 처음 로드될 때의 테마 설정이 유지될 수 있습니다.
NAM SDK 6.1.1 버전부터는 위와 같은 상황에서 다크 테마 설정이 즉시 반영될 수 있도록 하는 LazyTheme 를 지원합니다. LazyTheme 는 광고가 로드된 이후에도 DayNight 설정 변경에 따른 광고의 다크 테마를 동적으로 변경할 수 있도록 지원합니다. 즉, 앱이 실행 중인 상태에서 사용자가 시스템 테마를 변경하거나, 앱 내에서 테마를 변경하는 경우에도 광고가 현재 테마에 맞게 표시되도록 할 수 있습니다.
다음 예제는 네이티브 광고에서 LazyTheme 를 사용하여 테마값이 실제로 적용되어야 하는 시점에 필요한 테마 값을 적용하는 방법을 보여줍니다.
- Kotlin
- Java
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()
GfpNativeAdOptions nativeAdOptions = new GfpNativeAdOptions.Builder()
...
.setTheme(new 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.
return ResolvedTheme.LIGHT
}))
.build();
GfpAdLoader adLoader = new GfpAdLoader.Builder(requireActivity(), adParam)
.withNativeAd(nativeAdOptions, nativeAd -> {
...
})
.build()