flutter_daro_sdk 0.9.3
flutter_daro_sdk: ^0.9.3 copied to clipboard
DARO SDK Flutter plugin for Android and iOS. Supports Non-reward apps.
flutter_daro_sdk #
DARO SDK Flutter plugin for Android and iOS.
⚠️ DARO 에서 제공하는 패키지가 아닙니다.
구현 사항
- ✅ Non-Reward
- ✅ 배너 & MREC 광고
- ❌ 네이티브 광고
- ✅ 인터스티셜 광고
- ✅ 리워드 비디오 광고
- ✅ 앱 오프닝 광고
- ✅ 라이트 팝업 광고
- ❌ Reward
1. 프로젝트 설정 #
a. Flutter #
요구사항
- 안드로이드 minSdkVersion : 26
- iOS 13.0 이상
app-ads.txt 파일 설정(링크)이 잘 되었는지 다시 한 번 확인해주세요.
pubspec.yaml 추가
flutter_daro_sdk: {version}
b. Android #
1. AppKey 설정
1) android-daro-key.txt 추가
제공받은 android-daro-key.txt 파일을 추가합니다.
⚠️ SDK를 초기화하기 위해서는 android-daro-key.txt 파일이 프로젝트에 반드시 포함되어야 합니다.
app/
└── android-daro-key.txt
// flavor/buildType 별 분기가 필요한 경우
app/
└── src/
├── EnvA/
│ └── android-daro-key.txt
└── EnvB/
└── android-daro-key.txt
2) daroAppKey 설정
아래 중 한 곳에 daroAppKey를 설정합니다.
gradle.properties 에 설정
android.useAndroidX=true
android.enableJetifier=true
daroAppKey={APP_KEY}
// flavor/buildType 별 분기가 필요한 경우
daroAppKey.EnvA={APP_KEY}
daroAppKey.EnvB={APP_KEY}
app 모듈의 gradle에 설정
buildscript{
extra["daroAppKey"] = "APP_KEY"
// flavor/buildType 별 분기가 필요한 경우
extra["daroAppKey.EnvA"] = "APP_KEY"
extra["daroAppKey.EnvB"] = "APP_KEY"
}
2. build.gradle 설정
1) project 단위 gradle 설정 내 플러그인 추가합니다:
buildscript {
dependencies {
classpath("so.daro:daro-plugin:1.0.12") // Non-Reward 앱용 플러그인
}
}
또는
plugins {
...
id("so.daro.a") version "1.0.12" apply false // Non-Reward 앱용 플러그인
}
2) project 단위 gradle 설정 내 dependency 설정을 추가합니다:
...
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
repositories {
...
// DARO SDK Maven 저장소 (Non-Reward 앱용)
maven { url = uri("https://artifact.bytedance.com/repository/pangle") }
maven { url = uri("https://verve.jfrog.io/artifactory/verve-gradle-release") }
maven { url = uri("https://cboost.jfrog.io/artifactory/chartboost-ads/") }
maven { url = uri("https://repo.premiumads.net/artifactory/mobile-ads-sdk/") }
maven { url = uri("https://repo.pubmatic.com/artifactory/public-repos") }
maven { url = uri("https://s3.amazonaws.com/smaato-sdk-releases/") }
maven { url = uri("https://android-sdk.is.com/") }
maven { url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") }
}
}
3) app 단위 gradle 설정 내 플러그인 정보를 추가합니다:
plugins {
...
id("so.daro.a") // Non-Reward 앱용 플러그인
}
4) 최소 SDK 버전을 26 이상으로 설정합니다:
android {
defaultConfig {
minSdk = 26
}
}
3. proguard-rules 설정
proguard-rules 파일을 추가합니다
-keep class com.bytedance.sdk.** { *; }
-keepattributes Signature
-keep class net.pubnative.** { *; }
-keep class com.iab.omid.library.pubnativenet.** { *; }
-keep class com.amazon.** { *; }
-keep public class com.google.android.gms.ads.** {
public *;
}
-keep class com.iabtcf.** {*;}
-keep public class com.smaato.sdk.** { *; }
-keep public interface com.smaato.sdk.** { *; }
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keep class com.ironsource.adapters.** { *; }
-dontwarn com.ironsource.**
-dontwarn com.ironsource.adapters.**
-keepclassmembers class com.ironsource.** { public *; }
-keep public class com.ironsource.**
-keep class com.ironsource.adapters.** { *;
}
-keepclassmembers class com.applovin.sdk.AppLovinSdk {
static *;
}
-keep public interface com.applovin.sdk** {*; }
-keep public interface com.applovin.adview** {*; }
-keep public interface com.applovin.mediation** {*; }
-keep public interface com.applovin.communicator** {*; }
-keep class androidx.localbroadcastmanager.content.LocalBroadcastManager { *;}
-keep class androidx.recyclerview.widget.RecyclerView { *;}
-keep class androidx.recyclerview.widget.RecyclerView$OnScrollListener { *;}
-keep class * extends android.app.Activity
-flattenpackagehierarchy droom.daro.a
-keep public class droom.daro.** {
public protected *;
}
-keep interface droom.daro.** {
public protected *;
}
-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation
c. iOS #
요구사항
- iOS 13.0 이상
- Xcode 14.0 이상
1. ios-daro-key.txt 추가
Xcode 프로젝트에 제공받은 ios-daro-key.txt 파일을 추가합니다.
⚠️ SDK를 초기화하기 위해서는 ios-daro-key.txt 파일이 프로젝트에 반드시 포함되어야 합니다.
Xcode > BuildPhase 예시

2. Other Linker Flags 설정 (Objective-C)
Objective-C로 개발하는 경우, 빌드 설정에 -ObjC 플래그를 반드시 추가해야 합니다. 이 플래그가 없으면 SDK가 정상적으로 작동하지 않을 수 있습니다.
- Xcode 프로젝트 설정에서 다음 단계를 진행하세요:
- Xcode에서 프로젝트 파일을 선택합니다
- Build Settings 탭을 선택합니다
- 검색창에 “Other Linker Flags”를 입력합니다
- Other Linker Flags 항목에 -ObjC를 추가합니다
3. Info.plist 설정
앱 프로젝트의 ios/Runner/Info.plist에 앱 키를 추가합니다:
<key>GADApplicationIdentifier</key>
<string> /* Daro 대시보드에서 발급받은 Admob Key 추가 */ </string>
<key>DaroAppKey</key>
<string> /* Daro 대시보드에서 발급받은 Daro App Key 추가 */ </string>
<key>NSUserTrackingUsageDescription</key>
<string> /* 광고 제공을 위해 사용자 정보를 이용합니다 */ </string>
SKAdNetworkItems 를 추가합니다:
SKAdNetworkItems
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4fzdc2evr5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4pfyvq9l8r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2fnua5tdw4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5a6flpkh64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ludvb6z3bs.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cp8zw746q7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3sh42y64q3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qy4746246.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v4nxqhlyqp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta9lk7p23.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>vutu7akeur.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>y5ghdn5j9k.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n6fk4nfna4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n38lu8286q.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>47vhws6wlr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>eh6m2bh4zr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a2p9lx4jpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4468km3ulz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2u9pt9hc89.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ecpz2srf59.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>pwa73g5rt2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mlmmfzh3r3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4dzt52r2t5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8c4e2ghe7u.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zq492l623r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3rd42ekr43.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qcr597p9d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mj797d8u6f.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>55644vm79v.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6yxyv74ff7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>55y65gfgn7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cwn433xbcr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>nu4557a4je.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>w7jznl3r6g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>577p5t736z.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6rd35atwn8.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7bxrt786m8.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7fbxrn65az.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>dt3cjx1a9i.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>fz2k2k5tej.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>jk2fsx2rgz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>r8lj5b58b5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>tmhh9296z4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>k6y4y55b64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>qwpu75vrh2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>252b5q8x7y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4mn522wn87.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7fmhfwg9en.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8r8llnkz5a.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>dbu4b84rxf.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>dkc879ngq3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>eh6m2bh4zr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f7s53z58qe.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>g6gcrrvk4p.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta8lk7p23.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>krvm3zuq6h.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>lr83yxwka7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mj797d8u6f.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>qu637u8glc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s69wq72ugq.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v79kvwwj4g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>vhf287vqwu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>vutu7akeur.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>x5l83yy675.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>x8jxxk4ff5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>x8uqf25wch.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>xga6mpmplv.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ln5gz23vtd.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>z959bm4gru.skadnetwork</string>
</dict>
</array>
2. 프로젝트 설정 #
a. initialize - SDK 초기화 #
중요: 광고를 로드하기 전에 반드시 SDK를 초기화해야 합니다.
import 'package:flutter_daro_sdk/flutter_daro_sdk.dart';
// Non-Reward 앱 초기화
final success = await DaroSdk.initialize(
options: DaroSdkOptions( // optional
userId : String
logLevel : DaroLogLevel.debug,
appMute: false,
),
);
if (success) {
print('SDK 초기화 성공');
} else {
print('SDK 초기화 실패');
}
DaroSdkConfig
DaroSdkConfig.nonReward(): Non-Reward 앱용 설정
DaroSdkOptions (optional)
userId(String?): 사용자 IDlogLevel(DaroLogLevel?): 로그 레벨DaroLogLevel.off: 로그 출력 없음DaroLogLevel.error: 에러 로그만 출력DaroLogLevel.debug: 모든 로그 출력 (개발 시 권장)
appMute(bool?): 앱 음소거 설정
b. setOptions - SDK 옵션 설정 #
초기화 후 SDK 옵션을 변경할 수 있습니다:
final success = await DaroSdk.setOptions(
DaroSdkOptions(
userId: 'user-id',
logLevel: DaroLogLevel.error,
appMute: true,
),
);
if (success) {
print('옵션 설정 성공');
}
3. 광고 포맷 #
a. bannerAd - 배너 광고 #
배너 광고는 DaroBannerAdView 위젯을 사용하여 표시합니다.
기본 사용법
import 'package:flutter_daro_sdk/flutter_daro_sdk.dart';
// 배너 (320x50)
DaroBannerAdView(
ad: DaroBannerAd.banner('your-ad-unit-id',
placement: 'placement', // (optional)
),
listener: DaroBannerAdListener(
onAdLoaded: (ad) => print('광고 로드 완료'),
onAdFailedToLoad: (ad, error) => print('광고 로드 실패: $error'),
onAdImpression: (ad) => print('광고 노출'),
onAdClicked: (ad) => print('광고 클릭'),
),
)
// MREC 배너 (300x250)
DaroBannerAdView(
ad: DaroBannerAd.mrec('your-ad-unit-id',
placement: 'placement', // (optional)
),
listener: DaroBannerAdListener(
onAdLoaded: (ad) => print('광고 로드 완료'),
onAdFailedToLoad: (ad, error) => print('광고 로드 실패: $error'),
onAdImpression: (ad) => print('광고 노출'),
onAdClicked: (ad) => print('광고 클릭'),
),
)
b. rewardAd - 리워드 광고 #
리워드 광고는 DaroRewardAd 클래스를 사용합니다. 지원하는 광고 타입:
- 전면광고 (
DaroInterstitialAd) - 리워드 비디오 광고 (
DaroRewardedVideoAd) - 팝업광고 (
DaroPopupAd) - 앱 오프닝 (
DaroOpeningAd)
각 리워드 광고는
DaroRewardAd를 상속받아 구현되어있습니다. 각 리워드 광고는load()와show()를 지원하며,load()없이show()호출 시 로드가 완료되면 자동으로 노출됩니다.
DaroRewardAd.dart
/// 리워드 광고 클래스 (인터스티셜, 리워드 비디오, 팝업)
class DaroRewardAd {
/// 광고 타입
final DaroRewardAdType adType;
/// 광고 키
final String adUnit;
/// 광고 옵션
final Map<String, dynamic>? options;
...
/// 광고 로드
Future<bool> load();
/// 광고 표시
Future<bool> show();
/// 광고 이벤트 리스너 등록
void addListener(DaroRewardAdListener listener);
/// 광고 이벤트 리스너 제거
void removeListener();
/// 광고 인스턴스 해제
Future<void> dispose();
}
a) 전면 광고 (Interstitial)
// 광고 인스턴스 생성
final interstitialAd = DaroInterstitialAd('your-ad-unit-id');
// 이벤트 리스너 등록
interstitialAd.addListener(
DaroRewardAdListener(
onAdLoadSuccess: (adId) => print('광고 로드 성공: $adId'),
onAdLoadFail: (adId, data) => print('광고 로드 실패: $adId, $data'),
onShown: (adId) => print('광고 표시: $adId'),
onAdImpression: (adId) => print('광고 노출: $adId'),
onAdClicked: (adId) => print('광고 클릭: $adId'),
onDismiss: (adId) => print('광고 닫힘: $adId'),
onFailedToShow: (adId, data) => print('광고 표시 실패: $adId, $data'),
),
);
// 광고 로드
final loadSuccess = await interstitialAd.load();
if (loadSuccess) {
print('광고 로드 성공');
// 광고 표시
final showSuccess = await interstitialAd.show();
if (showSuccess) {
print('광고 표시 성공');
}
}
// 사용 후 해제
await interstitialAd.dispose();
b) 리워드 비디오 광고 (Rewarded Video)
// 광고 인스턴스 생성
final rewardedVideoAd = DaroRewardedVideoAd('your-ad-unit-id');
// 이벤트 리스너 등록
rewardedVideoAd.addListener(
DaroRewardAdListener(
onAdLoadSuccess: (adId) => print('광고 로드 성공: $adId'),
onAdLoadFail: (adId, data) => print('광고 로드 실패: $adId, $data'),
onShown: (adId) => print('광고 표시: $adId'),
onRewarded: (adId, reward) {
final amount = reward.amount;
final type = reward.type ?? '';s
print('리워드 적립: $amount, 타입: $type');
},
onAdImpression: (adId) => print('광고 노출: $adId'),
onAdClicked: (adId) => print('광고 클릭: $adId'),
onDismiss: (adId) => print('광고 닫힘: $adId'),
onFailedToShow: (adId, data) => print('광고 표시 실패: $adId, $data'),
),
);
// 광고 로드
final loadSuccess = await rewardedVideoAd.load();
if (loadSuccess) {
// 광고 표시
await rewardedVideoAd.show();
}
// 사용 후 해제
await rewardedVideoAd.dispose();
c) 팝업 광고 (Popup)
// 광고 인스턴스 생성
final popupAd = DaroPopupAd('your-ad-unit-id',
options: DaroPopupAdOptions( // optional
backgroundColor: Colors.black26,
containerColor: Colors.black,
adMarkLabelTextColor: Colors.white,
adMarkLabelBackgroundColor: Colors.black12,
titleColor: Colors.white,
bodyColor: Colors.white,
ctaBackgroundColor: Colors.blue,
ctaTextColor: Colors.white,
closeButtonText: closeButtonText,
closeButtonColor: Colors.white,
),
);
// 이벤트 리스너 등록
popupAd.addListener(
DaroRewardAdListener(
onAdLoadSuccess: (adId) => print('광고 로드 성공: $adId'),
onAdLoadFail: (adId, data) => print('광고 로드 실패: $adId, $data'),
onShown: (adId) => print('광고 표시: $adId'),
onAdImpression: (adId) => print('광고 노출: $adId'),
onAdClicked: (adId) => print('광고 클릭: $adId'),
onDismiss: (adId) => print('광고 닫힘: $adId'),
onFailedToShow: (adId, data) => print('광고 표시 실패: $adId, $data'),
),
);
// 광고 로드
final loadSuccess = await popupAd.load();
if (loadSuccess) {
// 광고 표시
await popupAd.show();
}
// 사용 후 해제
await popupAd.dispose();
d) 앱 오프닝 광고(Opening)
// 광고 인스턴스 생성
final openingAd = DaroOpeningAd('your-ad-unit-id');
// 이벤트 리스너 등록
openingAd.addListener(
DaroRewardAdListener(
onAdLoadSuccess: (adId) => print('광고 로드 성공: $adId'),
onAdLoadFail: (adId, data) => print('광고 로드 실패: $adId, $data'),
onShown: (adId) => print('광고 표시: $adId'),
onAdImpression: (adId) => print('광고 노출: $adId'),
onAdClicked: (adId) => print('광고 클릭: $adId'),
onDismiss: (adId) => print('광고 닫힘: $adId'),
onFailedToShow: (adId, data) => print('광고 표시 실패: $adId, $data'),
),
);
// 광고 로드
final loadSuccess = await openingAd.load();
if (loadSuccess) {
// 광고 표시
await openingAd.show();
}
// 사용 후 해제
await openingAd.dispose();
리워드 광고 이벤트
DaroRewardAdListener에서 사용 가능한 이벤트:
onAdLoadSuccess: 광고 로드 성공onAdLoadFail: 광고 로드 실패onShown: 광고 표시됨onRewarded: 리워드 적립 (리워드 비디오 광고만)onAdImpression: 광고 노출 (성과 집계)onAdClicked: 광고 클릭onDismiss: 광고 닫힘onFailedToShow: 광고 표시 실패
주의사항 #
- 리소스 해제: 리워드 광고 인스턴스는 사용 후
dispose()메서드를 호출하여 해제해야 합니다. - 앱 음소거:
appMute옵션을 사용하면 동영상 광고 적합성이 저하되어 광고 수익이 감소할 수 있습니다. 사용자에게 맞춤 음소거 컨트롤을 제공하는 경우에만 사용하세요.