Skip to main content

revup_flutter_plugin 1.0.5 copy "revup_flutter_plugin: ^1.0.5" to clipboard
revup_flutter_plugin: ^1.0.5 copied to clipboard

We provide a plugin so that you can integrate revup while developing with Flutter.

Revup Flutter Plugin #

pub package Android iOS

  • Android Target API Level : 31+
  • Android Minimum API Level : 21
  • iOS Minimum Version : 12.0
  • Xcode Minimum Version : Xcode 16.0
Networks Version
Ad Network Android Version iOS Version
AdMob 23.5.0 12.2.0
Amazon 9.10.4 5.1.0
AppLovin 13.0.1 13.1.0
BidMachine 3.0.1 3.2.1
Chartboost 9.8.2 9.8.1
DT Exchange 8.3.5 8.3.5
InMobi 10.7.8 10.8.2
Ironsource 8.7.0 없음
Liftoff(Vungle) 7.4.2 7.4.4
Meta(Fan) 6.18.0 6.17.1
Mintegral(Mobvista) 16.9.41 7.7.7
Moloco 3.6.1 3.7.2
Ogury 5.8.0 5.0.2
Pangle 6.5.0.4 6.5.0.9
Smaato 22.7.1 없음
Unity Ads 4.13.2 4.14.0
Verve 3.3.0 없음
Yandex 7.9.0 없음

Contents #

Add the Revup package to Your Project

Revup Overview

웹사이트 필수 등록

Revup Server 연동하기

Privacy Manifest 정책 적용

Revup Error Information

Adiscope에서 마이그레이션하기

etc

  • Sample App 폴더 이동
  • Releases
  • LICENSE

Add the Revup package to Your Project #

1. Installation #

A. Latest version Installation

flutter pub add revup_flutter_plugin
  • 프로젝트의 IDE루트 경로에서 터미널을 열고 위과 같이 실행하여 플러그인을 설치

B. Specific version Installation

flutter pub add revup_flutter_plugin:4.2.0
  • 프로젝트의 IDE루트 경로에서 터미널을 열고 위과 같이 특정 버전을 추가로 실행하여 플러그인을 설치



2. Setup Android #

A. Setup AndroidManifest

<application>
    <meta-data android:name="adiscope_media_id" android:value="${adiscope_media_id}"/>
    <meta-data android:name="adiscope_media_secret" android:value="${adiscope_media_secret}"/>
    <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="${revup_admob_id}"/>
</application>
  • Android 프로젝트의 AndroidManifest.xml파일에 다음과 같은 설정
  • meta-data 복사해서 변경 없이 추가 (아래 B - 나의 Module Gradle의 변수 값을 참조 함)

B. Setup Gradle

가. Setup Project Gradle
allprojects {
    repositories {
        maven { url 'https://repository.tnkad.net:8443/repository/android/' }
        maven { url "https://s3.amazonaws.com/smaato-sdk-releases/" }                                 // max 연동 시 추가
        maven { url "https://verve.jfrog.io/artifactory/verve-gradle-release" }                       // max 연동 시 추가
	maven { url "https://artifactory.bidmachine.io/bidmachine" }                                  // max 연동 시 추가
	maven { url "https://maven.ogury.co" }                                                        // max 연동 시 추가
        maven { url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea" } // max 연동 시 추가
	maven { url "https://android-sdk.is.com" }                                                    // max 연동 시 추가
        maven { url "https://artifact.bytedance.com/repository/pangle" }                              // max 혹은 pangle 연동 시 추가
        maven { url 'https://cboost.jfrog.io/artifactory/chartboost-ads/' }                           // chartboost 연동 시 추가
    }
}
  • Revup SDK는 Maven Central이 아니라 자체 Maven 저장소 (https://repository.tnkad.net:8443/repository/android/)에 배포됩니다. 저장소 추가는 필수입니다.
  • 프로젝트 파일 내에 {projectroot}/android/build.gradle 파일에 maven 추가
  • max를 연동 시 6개를 추가하고, chartboost를 연동 시 1개를 추가
나. Setup Module Gradle
android {
    defaultConfig {
        manifestPlaceholders = [
                adiscope_media_id    : "media id 기입 필요",
                adiscope_media_secret: "media secret 기입 필요",
                adiscope_sub_domain  : "sub domain 기입 필요",		// 옵션값 (오퍼월 상세페이지 이동 기능, 필요시 담당자 전달 예정)
                revup_admob_id    : "admob_app_id 기입 필요"           // Admob 사용 시 필요
        ]
    }
}
dependencies {
    // BOM 으로 연동하면 어댑터 버전을 개별로 명시할 필요가 없다
    implementation platform('com.tnkfactory.revup:revup-bom:1.0.9')

    implementation 'com.tnkfactory.revup:revupCore'
    implementation 'com.tnkfactory.revup:revupAndroid'
    implementation 'com.tnkfactory.revup:revupLuckyEvent'                   // 복권(Lucky Event) 사용 시

    implementation 'com.tnkfactory.revup:adapter.chartboost'                // chartboost
    implementation 'com.tnkfactory.revup:adapter.max'                       // max
    implementation 'com.tnkfactory.revup:adapter.admob'                     // admob
    implementation 'com.tnkfactory.revup:adapter.pangle'                    // pangle
    implementation 'com.tnkfactory.revup:adapter.vungle'                    // vungle
    implementation 'com.tnkfactory.revup:adapter.tnkpub'                    // tnkpub
}
  • 애디스콥 측에 media_id 와 media_secret, sub_domain 문의!
  • adiscope_media_id: 매체 아이디
  • adiscope_media_secret: 매체 시크릿키
  • adiscope_sub_domain: 옵션값 (오퍼월 상세페이지 이동 기능, 필요시 담당자 전달 예정)
  • revup_admob_id: admob을 접속 하기 위한 키
  • 프로젝트 파일 내에 {projectroot}/android/app/build.gradle 파일에 manifestPlaceholders, implementation 추가
  • Third Party 네트워크사들을 확인 후 필요한 네트워크사들만 추가
  • 특정 버전의 adapter들 버전을 확인 방법
    • Releases에서 Source Code 파일 다운로드 후 README.md 파일 확인
  • Adapter Version이 상이할 경우 Initialize시 Log를 통해 확인 가능



3. Setup iOS #

A. Setup Podfile

platform :ios, '13.0'

target 'Runner' do
  # REVUP.xcframework 는 정적 라이브러리이므로 static linkage 가 필요하다
  use_frameworks! :linkage => :static
  use_modular_headers!

  # REVUP 은 단일 pod + subspec 구조다. 필요한 subspec 만 골라 추가한다.
  # (umbrella 인 pod 'REVUP' 를 쓰면 default_subspecs 로 모든 광고 네트워크가 딸려온다)
  pod 'REVUP/Core', '1.1.9'
  pod 'REVUP/LuckyEvent', '1.1.9'
  pod 'REVUP/AdManager', '1.1.9'
  pod 'REVUP/AdMob', '1.1.9'
  pod 'REVUP/ChartBoost', '1.1.9'
  pod 'REVUP/Pangle', '1.1.9'
  pod 'REVUP/Vungle', '1.1.9'
  pod 'REVUP/TnkPub', '1.1.9'
  pod 'REVUP/Max', '1.1.9'
  pod 'REVUP/MaxMediaAdManager', '1.1.9'
  pod 'REVUP/MaxMediaAdMob', '1.1.9'
  pod 'REVUP/MaxMediaBidMachine', '1.1.9'
  pod 'REVUP/MaxMediaBigo', '1.1.9'
  pod 'REVUP/MaxMediaChartBoost', '1.1.9'
  pod 'REVUP/MaxMediaDTExchange', '1.1.9'
  pod 'REVUP/MaxMediaFan', '1.1.9'
  pod 'REVUP/MaxMediaInMobi', '1.1.9'
  pod 'REVUP/MaxMediaIronSource', '1.1.9'
  pod 'REVUP/MaxMediaLine', '1.1.9'
  pod 'REVUP/MaxMediaMobVista', '1.1.9'
  pod 'REVUP/MaxMediaMoloco', '1.1.9'
  pod 'REVUP/MaxMediaOgury', '1.1.9'
  pod 'REVUP/MaxMediaPangle', '1.1.9'
  pod 'REVUP/MaxMediaPubMatic', '1.1.9'
  pod 'REVUP/MaxMediaUnityAds', '1.1.9'
  pod 'REVUP/MaxMediaVungle', '1.1.9'
end
  • 프로젝트 파일 내에 {projectroot}/ios/Podfile 파일에 pod 추가
  • Third Party 네트워크사들을 확인 후 필요한 네트워크사들만 추가
  • Adapter Version이 상이할 경우 Initialize시 Xcode Log를 통해 확인 가능

B. Setup Plist

  • 프로젝트 파일 내에 {projectroot}/ios/Runner/Info.plist 파일에 추가
가. REVUPMediaId, REVUPMediaSecret 추가
<key>REVUPMediaId</key>
<string>{media id 기입 필요}</string>
<key>REVUPMediaSecret</key>
<string>{media secret 기입 필요}</string>

나. App Tracking Permission 추가
<key>NSUserTrackingUsageDescription</key>
<string></string>
  • ex : Some ad content may require access to the user tracking.
다. SKAdNetwork 추가 (Download)
<dict>
    <key>SKAdNetworkItems</key>
    <array>
	<dict>
	    <key>SKAdNetworkIdentifier</key>
	    <string></string>
	</dict>
    </array>
</dict>
  • SKAdNetwork Download File 내용 추가 (Download)
라. Admob, Max의 Admob 사용 시 추가
<key>GADIsAdManagerApp</key>
<true/>
<key>GADApplicationIdentifier</key>
<string>{admob_app_id 기입 필요}</string>
  • "GADIsAdManagerApp" 설정 및 "GADApplicationIdentifier"의 Key 설정



Revup Overview #

1. Import #

import 'package:revup_flutter_plugin/revup_flutter_plugin.dart';
  • Revup을 사용하기 위해서 추가



2. RevupFlutterPlugin 생성 #

final _revupFlutterPlugin = RevupFlutterPlugin();
  • Revup을 사용하기 위해서 추가



3. Initialize #

A. Code에서 Media 없이 Initialize 방법

Future<void> initialize() async {
    bool result = await _revupFlutterPlugin.initialize() ?? false;
    if (result) {
        // Initialize Call Back
    } else {
        // Initialize Fail
    }
}
  • Android는 AndroidManifest 파일과 Module Gradle 파일 세팅 필요
  • iOS는 Plist 파일 세팅 필요
  • App 실행 시 1회 설정 권장
  • Revup에서는 Google Play 가족 정책을 준수해야 함 (Android 전용 - Revup Google Play 가족 정책 확인)
    • ${정책\ {\color{red}미준수시}}\ 광고에\ 제한이\ 생김$ (광고 물량 축소 및 오퍼월 진입 불가)

B. Code에서 직접 Media 넣어서 Initialize 방법

Future<void> initialize() async {
    var mediaId = "";        // 관리자를 통해 발급
    var mediaSecret = "";    // 관리자를 통해 발급
    var callbackTag = "";    // 관리자를 통해 발급, 기본 ""
    var childYN = "";        // 어린이 여부를 설정 해주는 값(Google GMA에 세팅)
    bool result = await _revupFlutterPlugin.initialize(mediaId, mediaSecret, callbackTag, childYN) ?? false;
    if (result) {
        // Initialize Call Back
    } else {
        // Initialize Fail
    }
}
  • App 실행 시 1회 설정 권장
  • Revup에서는 Google Play 가족 정책을 준수해야 함 (Android 전용 - Revup Google Play 가족 정책 확인)
    • ${정책\ {\color{red}미준수시}}\ 광고에\ 제한이\ 생김$ (광고 물량 축소 및 오퍼월 진입 불가)


4. 사용자 정보 설정 #

Future<void> setUserId() async {
    var userId = "";        // set unique user id to identify the user in reward information
    bool result =  await _revupFlutterPlugin.setUserId(userId) ?? false;
}
  • RewardedVideo, RewardedInterstitial를 사용하기 위해 ${\color{red}필수}$ 설정
  • 64자까지 설정 가능


5. Lucky Event #

복권 등 서드파티 이벤트 웹 페이지를 노출합니다. 이벤트 아이디와 키값은 매체 영업팀을 통해 발급받습니다.

Android 는 revupLuckyEvent 모듈, iOS 는 REVUP/LuckyEvent subspec 이 연동되어 있어야 합니다.

A. Settings

Future<void> setLuckyEventAppId() async {
    var eventId = "";       // 이벤트 식별 키값 (관리자를 통해 발급)
    var pubId = "";         // 이벤트 매체 식별 키값 (관리자를 통해 발급)
    bool result = await _revupFlutterPlugin.setLuckyEventAppId(eventId, pubId) ?? false;
}
  • 사용자 정보 설정(setUserId) 완료 후 호출

B. Theme

Future<void> setLuckyEventTheme() async {
    // light : 단말 설정과 무관하게 항상 라이트
    // dark  : 단말 설정과 무관하게 항상 다크
    // system: 단말의 다크모드 설정을 따름 (기본값)
    bool result = await _revupFlutterPlugin
        .setLuckyEventTheme(RevupLuckyEventTheme.system) ?? false;
}
  • 적용 범위는 SDK 가 그리는 ${\color{red}네이티브\ 영역}$ 입니다 — 화면 배경, 상태바·내비게이션바 아이콘 대비, SDK 안내 팝업
  • 이벤트 웹 페이지 자체는 웹에서 정한 대로 표시됩니다
  • Show 호출 전 에 설정해야 하며, 이미 떠 있는 화면에는 반영되지 않음
  • 기본값이 system 이므로, 별도 설정이 없으면 다크모드 단말에서 화면이 다크로 표시됨
  • Android 1.0.9 / iOS 1.1.9 이상 필요

C. Show

Future<void> showLuckyEvent() async {
    bool result = await _revupFlutterPlugin.showLuckyEvent() ?? false;
}

D. 부가 옵션

// 이벤트 URL 뒤에 붙일 해시마크 (#page-1 등)
await _revupFlutterPlugin.setLuckyEventHashMark("page-1");

// 이벤트 URL 에 추가할 커스텀 쿼리 파라미터
await _revupFlutterPlugin.setLuckyEventExtraParam("key", "value");

// 이벤트 base URL 변경 (테스트 서버 연동 등, 협의 후 사용)
await _revupFlutterPlugin.setLuckyEventBaseUrl("https://...");

// [iOS 전용] 웹뷰에 safe area 적용
await _revupFlutterPlugin.setLuckyEventUseSafeAreaWebView(true);

// [iOS 전용] 웹뷰 edge swipe 제스처로 뒤로가기
await _revupFlutterPlugin.setLuckyEventEdgeGesture(true);
  • iOS 전용 옵션은 Android 에서 호출해도 동작하지 않고 false 를 반환합니다

E. Callback

RevupListener.setupLuckyEventListener(
    luckyEventWebViewNavigated: (url) {
        // 이벤트 웹뷰에서 발생한 scheme URL 수신
    },
);
  • 이벤트 웹뷰에서 발생하는 Scheme URL 을 전달받아 매체가 직접 처리할 때 사용


6. RewardedVideo #

A. Load

Future<void> rewardedVideoLoad() async {
    var unitId = "";      // 관리자를 통해 발급
    bool result = await _revupFlutterPlugin.rewardedVideoLoad(unitId) ?? false;
}
  • 해당 유닛에 속한 ad 네크워크들의 광고를 Load
  • onRewardedVideoAdLoaded callback이 호출되면 Load가 완료
  • Load가 실행되면 onRewardedVideoAdLoaded 와 onRewardedVideoAdFailedToLoad 중 하나의 callback은 항상 호출
  • Rewarded Video Ad의 Load와 Show는 pair로 호출
  • Load를 한 후 Show를 하고, 광고를 Show한 후에는 다시 Load를 하여 다음 번 Show를 준비
  • Load & Show 후 다시 Load를 하려 할 때 Load 는 Show 이후 언제든 호출가능
    • 광고가 Show되는 동안 다음 광고를 Load를 할 수도 있지만 이는 사용하는 mediation ad network company의 종류에 따라 달라질 수 있으므로 항상 보장되는 동작은 아님
  • Show의 callback 인 onRewardedVideoAdClosed에서 다시 Load를 하는 것을 권장
    • Abusing 방지를 위해 Rewarded Video Ad를 연속으로 보여주는 것을 제한하여 한번 광고를 보고 나면 일정 시간이 지난 후에 다시 Show를 할 수 있도로록 Admin page에서 서비스 설정 가능
  • Load 동작 수행 중에 Load를 여러 번 호출할 수 없음
  • (Optional) Load의 시간이 필요해 ProgressBar 노출 추천

B. IsLoaded

Future<void> rewardedVideoIsLoad() async {
    var unitId = "";      // 관리자를 통해 발급
    bool result = await _revupFlutterPlugin.rewardedVideoIsLoad(unitId) ?? false;
    if (result) {
        // show ad here
    } else {
        // do something else
    }
}
  • 광고가 Load 되었는지 상태를 확인

C. Show

Future<void> rewardedVideoShow() async {
    var unitId = "";      // 관리자를 통해 발급
    bool result = await _revupFlutterPlugin.rewardedVideoIsLoad(unitId) ?? false;
    if (result) {
        bool resultShow = await _revupFlutterPlugin.rewardedVideoShow() ?? false;
        if (resultShow) {
            // Success
        } else {
            // This Show request is duplicated
        }
    } else {
        // ad is not loaded
    }
}
  • 마지막으로 Load된 광고를 사용자에게 보여줌
  • Show 호출 후에는 다시 Load를 호출 할 수 있음
  • Show method는 중복하여 호출 할 수 없음
  • Show가 실행되면 (return값이 True일 경우) onRewardedVideoAdOpened와 onRewardedVideoAdFailedToShow 중 하나가 항상 호출되고, onRewardedVideoAdOpened가 호출되었다면 이후 onRewardedVideoAdClosed가 항상 호출
  • Rewarded Video Ad의 Load와 Show는 pair로 호출
    • Load를 한 후 Show를 하고, 광고를 Show한 후에는 다시 Load를 하여 다음번 Show를 준비

D. Callback Reward

RevupListener.setupRewardedVideoListener(
    onRewarded: (unitId, currencyUnit, amount) {
	// unitId - 해당 rewarded video ad의 unitId (rewardedVideoShow 시 입력한 값)
    	// currencyUnit - 보상 type
    	// amount - 보상의 양
    },
);
  • Initialize를 실행 해야 Callbacks 호출
  • 보상이 주어져야 할 경우 onRewarded가 호출되며 그 parameter로 관련 정보가 전달
  • 이 보상 정보를 바탕으로 게임 내에서 보상을 지급
  • onRewarded는 보통 onRewardedVideoAdOpened 와 onRewardedVideoAdClosed 사이에 호출되는 경우가 많으나 광고 System의 상황에 따라 달라 질 수 있음
  • onRewarded가 호출되지 않는 경우도 존재할 수 있음(Reward 설정을 Server-to-server로 하였다면, Video 시청 후에는 OnRewarded가 호출되지 않음)
  • Reward 정보는 abusing 방지를 위해서 Server-to-server 방식으로 전달 받는 것을 권장
  • Server-to-server 방식을 선택하더라도 보상이 전달 될 시에는 onRewarded가 호출
    • 이때는 Server를 통해 전달받은 정보를 기준으로 처리하고, onRewarded를 통해 전달받은 정보는 검증용으로 사용하거나 무시하도록 함

D. Callback Others

RevupListener.setupRewardedVideoListener(
    onRewardedVideoAdLoaded: (unitId) {
    },
    onRewardedVideoAdFailedToLoad: (unitId, errorDescription, errorXB3TraceID) {
    },
    onRewardedVideoAdOpened: (unitId) {
    },
    onRewardedVideoAdClosed: (unitId) {
    },
    onRewardedVideoAdFailedToShow: (unitId, errorDescription, errorXB3TraceID) {
    }
);
  • Initialize를 실행 해야 Callbacks 호출
  • Load 성공 시 onRewardedVideoAdLoaded, 실패 시 onRewardedVideoAdFailedToLoad가 호출
  • Show 성공 시 onRewardedVideoAdOpened, onRewardedVideoAdClosed가 순차적으로 호출되고, 실패시 onRewardedVideoAdFailedToShow가 호출
  • onRewardedVideoAdFailedToLoad, onRewardedVideoAdFailedToShow시 RevupError 참고


7. Interstitial #

A. Load

Future<void> interstitialLoad() async {
    var unitId = "";      // 관리자를 통해 발급
    bool result = await _revupFlutterPlugin.interstitialLoad(unitId) ?? false;
}
  • 해당 유닛에 속한 ad 네크워크들의 광고를 Load
  • onInterstitialAdLoaded callback이 호출되면 Load가 완료
  • Interstitial의 Load와 Show는 pair로 호출
  • Load를 한 후 Show를 하고, 광고를 Show한 후에는 다시 Load를 하여 다음 번 Show를 준비
  • 광고가 Show되는 동안 다음 광고를 load를 할 수도 있지만 이는 사용하는 mediation ad network company의 종류에 따라 달라질 수 있으므로 항상 보장되는 동작은 아님
  • Load 동작 수행 중에 Load를 여러 번 호출할 수 없음
  • (Optional) Load의 시간이 필요해 ProgressBar 노출 추천

B. IsLoaded

Future<void> interstitialIsLoad() async {
    var unitId = "";      // 관리자를 통해 발급
    bool result = await _revupFlutterPlugin.interstitialIsLoad(unitId) ?? false;
    if (result) {
        // show ad here
    } else {
        // do something else
    }
}
  • 광고가 Load 되었는지 상태를 확인

C. Show

Future<void> interstitialShow() async {
    var unitId = "";      // 관리자를 통해 발급
    bool result = await _revupFlutterPlugin.interstitialIsLoad(unitId) ?? false;
    if (result) {
        bool resultShow = await _revupFlutterPlugin.interstitialShow() ?? false;
        if (interstitialAd.Show()) {
            // Success
        } else {
            // This Show request is duplicated
        }
    } else {
        // ad is not loaded
    }
}
  • 마지막으로 Load된 광고를 사용자에게 보여줌
  • Show 호출 후에는 다시 Load를 호출 할 수 있음
  • Show method는 중복하여 호출 할 수 없음
  • Show가 실행되면 (return값이 True일 경우) onInterstitialAdLoaded와 onInterstitialAdFailedToLoad 중 하나가 항상 호출되고, onInterstitialAdOpened가 호출되었다면 이후 onInterstitialAdClosed가 항상 호출
  • Rewarded Video Ad의 Load와 Show는 pair로 호출
    • Load를 한 후 Show를 하고, 광고를 Show한 후에는 다시 Load를 하여 다음번 Show를 준비

D. Callback

RevupListener.setupInterstitialListener(
    onInterstitialAdLoaded: (unitId) {
    },
    onInterstitialAdFailedToLoad: (unitId, errorDescription, errorXB3TraceID) {
    },
    onInterstitialAdOpened: (unitId) {
    },
    onInterstitialAdClosed: (unitId) {
    },
    onInterstitialAdFailedToShow: (unitId, errorDescription, errorXB3TraceID) {
    }
);
  • Initialize를 실행 해야 Callbacks 호출
  • Load 성공 시 onInterstitialAdLoaded, 실패 시 onInterstitialAdFailedToLoad가 호출
  • Show 성공 시 onInterstitialAdOpened, onInterstitialAdClosed가 순차적으로 호출되고, 실패 시 onInterstitialAdFailedToShow가 호출
  • onInterstitialAdFailedToLoad, onInterstitialAdFailedToShow시 RevupError 참고


8. RewardedInterstitial #

A. PreLoadAll

Future<void> preLoadAllRewardedInterstitial() async {
    bool result = await _revupFlutterPlugin.preLoadAllRewardedInterstitial() ?? false;
}
  • Initialize Call Back 후 1회 설정 권장
  • 관리자가 설정된 활성화된 모든 유닛들을 Load 진행

B. Unit 지정 PreLoad

Future<void> preLoadRewardedInterstitial() async {
    var unitIds = List<String>.empty(growable : true);
    unitIds.add(unitId1);
    unitIds.add(unitId2);
    bool result = await _revupFlutterPlugin.preLoadRewardedInterstitial(unitIds) ?? false;
}
  • Initialize Call Back 후 1회 설정 권장
  • 입력된 유닛들을 Load 진행

C. Show

Future<void> showRewardedInterstitial(String unitId) async {
    var unitId = "";      // 관리자를 통해 발급
    bool result = await _revupFlutterPlugin.showRewardedInterstitial(unitId) ?? false;
}
  • 해당 유닛이 Load되어 있으면 안내 팝업을 보여 준 뒤 해당 광고를 사용자에게 보여줌
  • showRewardedInterstitial method는 중복하여 호출 할 수 없음
  • showRewardedInterstitial가 실행되면 (return값이 True일 경우) onRewardedInterstitialAdSkip와 onRewardedInterstitialAdOpened와 onRewardedInterstitialAdFailedToShow 중 하나가 항상 호출되고, onRewardedInterstitialAdOpened가 호출되었다면 이후 onRewardedInterstitialAdClosed가 항상 호출
  • onRewardedInterstitialAdClosed와 onRewardedInterstitialAdFailedToShow가 호출 되면 내부에서 해당 유닛을 자동 Load 시킴

D. Callbacks Reward

RevupListener.setupRewardedInterstitialListener(
    onRewardedInterstitialRewarded: (unitId, currencyUnit, amount) {
	// unitId - 해당 rewarded video ad의 unitId (ShowRewardedInterstitial 시 입력한 값)
    	// currencyUnit - 보상 type
    	// amount - 보상의 양
    },
);
  • Initialize를 실행 해야 Callbacks 호출
  • 보상이 주어져야 할 경우 onRewardedInterstitialRewarded가 호출되며 그 parameter로 관련 정보가 전달
  • 이 보상 정보를 바탕으로 게임 내에서 보상을 지급
  • onRewardedInterstitialRewarded는 보통 onRewardedInterstitialAdOpened 와 onRewardedInterstitialAdClosed 사이에 호출되는 경우가 많으나 광고 System의 상황에 따라 달라 질 수 있음
  • onRewardedInterstitialRewarded가 호출되지 않는 경우도 존재할 수 있음(Reward 설정을 Server-to-server로 하였다면, Video 시청 후에는 OnRewarded가 호출되지 않음)
  • Reward 정보는 abusing 방지를 위해서 Server-to-server 방식으로 전달 받는 것을 권장
  • Server-to-server 방식을 선택하더라도 보상이 전달 될 시에는 onRewardedInterstitialRewarded가 호출
    • 이때는 Server를 통해 전달받은 정보를 기준으로 처리하고, onRewardedInterstitialRewarded를 통해 전달받은 정보는 검증용으로 사용하거나 무시하도록 함

D. Callbacks Others

RevupListener.setupRewardedInterstitialListener(
    onRewardedInterstitialAdSkip: (unitId) {
    },
    onRewardedInterstitialAdOpened: (unitId) {
    },
    onRewardedInterstitialAdClosed: (unitId) {
    },
    onRewardedInterstitialAdFailedToShow: (unitId, errorDescription, errorXB3TraceID) {
    }
);
  • Initialize를 실행 해야 Callbacks 호출
  • Show 성공 후 Skip 시 onRewardedInterstitialAdSkip가 호출
  • Show 성공 후 영상 시청 시 onRewardedInterstitialAdOpened, onRewardedInterstitialAdClosed가 순차적으로 호출되고, 실패 시 onRewardedInterstitialAdFailedToShow가 호출
  • onRewardedInterstitialAdFailedToShow시 RevupError 참고


9. Etc #

A. Revup SDK Version

Future<void> getSDKVersion() async {
    String result = await _revupFlutterPlugin.getSDKVersion() ?? "";
}
  • Android와 iOS의 Core SDK Version 확인

B. Revup Network Versions

Future<void> getNetworkVersions() async {
    String result = await _revupFlutterPlugin.getNetworkVersions() ?? "";
}
  • Android와 iOS의 Third Party SDK Versions 확인

C. Set Rewarded Check Param

Future<void> setRewardedCheckParam(String param) async {
    await _revupFlutterPlugin.setRewardedCheckParam(param);
}
  • Rewarded callback 시 parameters을 추가
  • 해당 정보는 Rewarded 지급 등에 있어 구분하는데 사용 할 수 있음
  • 내부 설정 후 사용 가능 ( 담당자에게 요청 부탁 )
  • param은 Base64 Encoded(UTF8)를 처리 후 1000자내로 설정

D. Volume

Future<void> setVolumeOff() async {
    bool isOff = true;  // Ad Sound Off
    bool isOff = false; // Ad Sound On (Default)
    await _revupFlutterPlugin.setVolumeOff(isOff);
    if (isOff) {
      pushLog("Ad Sound Off");
    } else {
      pushLog("Ad Sound On");
    }
}
  • Admob, AppLovin, Mintegral, Verve 만 적용 가능


웹사이트 필수 등록 (Android 전용) #

  • 관리자에게 전달받은 app-ads.txt를 웹사이트에 등록

Revup Server 연동하기 #

  • 연동하기

Privacy Manifest 정책 적용 (iOS 전용) #

  • 2024년 5월 1일부터 출시/업데이트 되는 앱에 대해 3rd Party Framework의 개인정보 추가

Revup Error Information #

  • Error 정보

Revup Sample App #

  • Sample App 폴더 이동

Releases #

  • Releases

LICENSE #

  • LICENSE
0
likes
0
points
451
downloads

Publisher

unverified uploader

Weekly Downloads

We provide a plugin so that you can integrate revup while developing with Flutter.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on revup_flutter_plugin

Packages that implement revup_flutter_plugin