- 지원 환경 : iOS 13.0 + / iPadOS 13.0 + / Xcode 16.0 +
Networks Version
| Ad Network | iOS Version |
|---|---|
| AdMob | 12.14.0 |
| Amazon | 5.3.3 |
| AppLovin | 13.5.1 |
| BidMachine | 3.5.1 |
| Bigo | 5.0.0 |
| Chartboost | 9.11.0 |
| DT Exchange | 8.4.3 |
| InMobi | 11.0.0 |
| ironSource | 9.2.0.0 |
| Liftoff(Vungle) | 7.6.3 |
| Line | 2.9.20251119 |
| Meta(Fan) | 6.20.1 |
| Mintegral(Mobvista) | 8.0.4 |
| Moloco | 4.2.0 |
| Ogury | 5.1.1 |
| Pangle | 7.8.5.5 |
| PubMatic | 4.11.0 |
| TnkPub | 1.24 |
| Unity Ads | 4.16.5 |
- 1. Import
- 2. Initialize
- 3. 사용자 정보 설정
- 4. Lucky Event
- 5. RewardedVideo
- 6. Interstitial
- 7. RewardedInterstitial
- 8. Offerwall
- CocoaPods는 Cocoa Projects의 Dependency를 관리할 수 있음
gem install cocoapods- 명령어를 사용하여 설치 진행
- CocoaPods의 Xcode Project내에 Podfile에서 기술
# source 'https://github.com/CocoaPods/Specs.git' // 제한망 or install error시 추가
platform :ios, '13.0'
use_frameworks!
target '<Your Target Name>' do
pod 'Adiscope', '5.2.3'
end네트워크 개별 선택 추가 방법
# source 'https://github.com/CocoaPods/Specs.git' // 제한망 or install error시 추가
platform :ios, '13.0'
use_frameworks!
target '<Your Target Name>' do
pod 'Adiscope/LuckyEvent', '5.2.3'
pod 'Adiscope/AdManager', '5.2.0'
pod 'Adiscope/AdMob', '5.2.0'
pod 'Adiscope/ChartBoost', '5.2.0'
pod 'Adiscope/Pangle', '5.2.0'
pod 'Adiscope/TnkPub', '5.2.0'
pod 'Adiscope/Vungle', '5.2.0'
pod 'Adiscope/MaxMediaAdManager', '5.2.0'
pod 'Adiscope/MaxMediaAdMob', '5.2.0'
pod 'Adiscope/MaxMediaAmazon', '5.2.0'
pod 'Adiscope/MaxMediaBidMachine', '5.2.0'
pod 'Adiscope/MaxMediaBigo', '5.2.0'
pod 'Adiscope/MaxMediaChartBoost', '5.2.0'
pod 'Adiscope/MaxMediaDTExchange', '5.2.0'
pod 'Adiscope/MaxMediaFan', '5.2.0'
pod 'Adiscope/MaxMediaInMobi', '5.2.0'
pod 'Adiscope/MaxMediaIronSource', '5.2.0'
pod 'Adiscope/MaxMediaLine', '5.2.0'
pod 'Adiscope/MaxMediaMobVista', '5.2.0'
pod 'Adiscope/MaxMediaMoloco', '5.2.0'
pod 'Adiscope/MaxMediaOgury', '5.2.0'
pod 'Adiscope/MaxMediaPangle', '5.2.0'
pod 'Adiscope/MaxMediaPubMatic', '5.2.0'
pod 'Adiscope/MaxMediaUnityAds', '5.2.0'
pod 'Adiscope/MaxMediaVungle', '5.2.0'
endpod install --repo-update- 다음의 명령어를 실행해서 Library를 Xcode Project로 추가
- Xcode Project에 포함시키기 위해서 Xcode 재실행
- SPM 가이드 참고
<key>AdiscopeMediaId</key>
<string></string>
<key>AdiscopeMediaSecret</key>
<string></string><key>NSUserTrackingUsageDescription</key>
<string></string>- ex : Some ad content may require access to the user tracking.
- Xcode 12.0 이상이면 SKAdNetwork Download File 내용 추가 (Download)
- 2026년 3월 9일에 마지막으로 파일 내용 추가
<dict>
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string></string>
</dict>
</array>
</dict>- liftoff 사용하면서 AdAttributionKit 17.4+ 이면 AdNetwork Download File 내용 추가 (Download)
- 2026년 3월 9일에 마지막으로 파일 내용 추가
<dict>
<key>AdNetworkIdentifiers</key>
<array>
<string></string>
</array>
</dict>- "GADIsAdManagerApp" 설정 및 GADApplicationIdentifier의 Key 설정
<key>GADIsAdManagerApp</key>
<true/>
<key>GADApplicationIdentifier</key>
<string></string>- window 추가
var window: UIWindow?- 2024년 5월 1일부터 출시/업데이트 되는 앱에 대해 3rd Party Framework의 개인정보 추가
- 참고
import Adiscopelet CALLBACK_TAG = ""; // 관리자를 통해 발급, 기본 ""
if let adiscopeSDK = AdiscopeInterface.sharedInstance() {
adiscopeSDK.setMainDelegate(self)
adiscopeSDK.initialize(CALLBACK_TAG)
}- Build된 Project에서
Info.plist파일에서AdiscopeMediaId가 있어야 함 (Info.plist 확인) - CALLBACK_TAG이 없을 시,
adiscopeSDK.initialize()로 가능 - App 실행 시 1회 설정 권장
let MEDIA_ID = ""; // 관리자를 통해 발급
let MEDIA_SECRET = ""; // 관리자를 통해 발급
let CALLBACK_TAG = ""; // 관리자를 통해 발급, 기본 ""
if let adiscopeSDK = AdiscopeInterface.sharedInstance() {
adiscopeSDK.setMainDelegate(self)
adiscopeSDK.initialize(MEDIA_ID, mediaSecret: MEDIA_SECRET, callBackTag: CALLBACK_TAG)
}- CALLBACK_TAG이 없을 시,
adiscopeSDK.initialize(MEDIA_ID, mediaSecret: MEDIA_SECRET)로 가능 - App 실행 시 1회 설정 권장
func onInitialized(_ isSuccess: Bool) {
if (isSuccess) {
// Initialize Call Back
} else {
// Initialize Fail
}
}-
Offerwall,RewardedVideo,RewardedInterstitial를 사용하기 위해${\color{red}필수}$ 설정
let USER_ID = ""; // set unique user id to identify the user in reward information
AdiscopeInterface.sharedInstance().setUserId(USER_ID);- 64자까지 설정 가능
let EVENT_APP_ID = ""; // 관리자를 통해 발급
let EVENT_PUB_ID = ""; // 관리자를 통해 발급
AdiscopeInterface.sharedInstance().setLuckyEventAppId(EVENT_APP_ID, pubId: EVENT_PUB_ID)AdiscopeInterface.sharedInstance().showLuckyEvent()- 사용자 정보 설정의 진행 완료 후 Show 호출
func luckyEventWebViewNavigated(_ url: URL, vc: UIViewController) {
}setMainDelegate(_:)를 진행했다면 다음과 같은 응답을 수신 받을 수 있음- Lucky Event WebView에서 발생하는 Scheme URL 정보를 수신, 전달된 URL에 대해 이벤트 처리 용도로 사용 권장
if (AdiscopeInterface.sharedInstance().isInitialized()) {
let UNIT_ID = ""; // 관리자를 통해 발급
AdiscopeInterface.sharedInstance().load(UNIT_ID)
} else {
// Initialize 재시도
}- Initialize와 사용자 정보 설정의 진행 완료 후 Load 호출
- Load 후 사용자 정보 설정을 호출할 경우 isLoaded Flag가 False로 반환(Load 취소)
- 해당 유닛에 속한 ad 네크워크들의 광고를 Load
onRewardedVideoAdLoadedcallback이 호출되면 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 노출 추천
let UNIT_ID = ""; // Load한 값(관리자를 통해 발급)
if (AdiscopeInterface.sharedInstance().isLoaded(UNIT_ID)) {
// show ad here
} else {
// do something else
}- 광고가 Load 되었는지 상태를 확인
let UNIT_ID = ""; // Load한 값(관리자를 통해 발급)
if (AdiscopeInterface.sharedInstance().isLoaded(UNIT_ID)) {
AdiscopeInterface.sharedInstance().show()
} else {
// do something else
}- 마지막으로 Load된 광고를 사용자에게 보여줌
- Show 호출 후에는 다시 Load를 호출 할 수 있음
- Show method는 중복하여 호출 할 수 없음
- Show가 실행되면 (return값이 True일 경우)
onRewardedVideoAdOpened와onRewardedVideoAdFailedToShow중 하나가 항상 호출되고,onRewardedVideoAdOpened가 호출되었다면 이후onRewardedVideoAdClosed가 항상 호출 - Rewarded Video Ad의
Load와Show는 pair로 호출- Load를 한 후 Show를 하고, 광고를 Show한 후에는 다시 Load를 하여 다음번 Show를 준비
if (AdiscopeInterface.sharedInstance().isInitialized()) {
let UNIT_ID = ""; // 관리자를 통해 발급
AdiscopeInterface.sharedInstance().show(withLoad: UNIT_ID, delegate: self)
} else {
// Initialize 재시도
}- A(Load), C(Show)를 한번에 호출 하여 광고를 보여줌
setMainDelegate(_:)추가 호출 없이 한번에 추가 되도록 처리- A(Load), C(Show)와 동일하게 호출 되며,
onRewardedVideoAdFailedToLoad대신onRewardedVideoAdFailedToShow로 호출됨 - 기본적으로 Load동안 기본 Indicator가 동작, 오류시 기본 알림 팝업 발생
기본 설정 변경
가. Indicator가 동작되는 Background Color 설정
let red = "0" // 0 ~255 String 값
let green = "0" // 0 ~255 String 값
let blue = "0" // 0 ~255 String 값
let alpha = "0.3" // 0 ~ 1 String 값
AdiscopeInterface.sharedInstance().setShowWithLoad2BackgroundColor(red, green: green, blue: blue, alpha: alpha)나. Indicator의 크기 변경 및 Hidden 설정
let isStyleMedium = false // true : StyleMedium, false : StyleLarge
let isHidden = false // true : 미노출, false : 노출
AdiscopeInterface.sharedInstance().setShowWithLoad2IndicatorStyleMedium(isStyleMedium, isHidden: isHidden)다. Error Alert 메시지 설정 및 Hidden 설정
let msg = "현재 시청 가능한 광고가 없습니다.\n잠시 후 다시 시도해 주세요."
let isHidden = false // true : 미노출, false : 노출
AdiscopeInterface.sharedInstance().setShowWithLoad2ErrorAlertMsg(alertMsgLoadingView.value, isHidden: self.loadingAlertHidden)func onRewarded(_ unitID: String!, item: AdiscopeRewardItem!) {
// unitID - 해당 rewardedvideo의 UNIT_ID (Show 시 입력한 값)
// item.amount - 보상의 양
}setMainDelegate(_:)를 진행했다면 다음과 같은 응답을 수신 받을 수 있음- 이 보상 정보를 바탕으로 게임 내에서 보상을 지급
onRewarded는 보통onRewardedVideoAdOpened와onRewardedVideoAdClosed사이에 호출되는 경우가 많으나 광고 System의 상황에 따라 달라 질 수 있음onRewarded가 호출되지 않는 경우도 존재할 수 있음(Reward 설정을 Server-to-server로 하였다면, Video 시청 후에는onRewarded가 호출되지 않음)- Reward 정보는 abusing 방지를 위해서 Server-to-server 방식으로 전달 받는 것을 권장
- Server-to-server 방식을 선택하더라도 보상이 전달 될 시에는
onRewarded가 호출- 이때는 Server를 통해 전달받은 정보를 기준으로 처리하고,
onRewarded를 통해 전달받은 정보는 검증용으로 사용하거나 무시하도록 함
- 이때는 Server를 통해 전달받은 정보를 기준으로 처리하고,
func onRewardedVideoAdLoaded(_ unitID: String!) {
// RewardedVideo Load Success
}
func onRewardedVideoAdFailed(toLoad unitID: String!, error: AdiscopeError!) {
// RewardedVideo Load Fail
}
func onRewardedVideoAdOpened(_ unitID: String!) {
// RewardedVideo 열림
}
func onRewardedVideoAdClosed(_ unitID: String!) {
// RewardedVideo 닫힘
}
func onRewardedVideoAdFailed(toShow unitID: String!, error: AdiscopeError!) {
// RewardedVideo Show Fail
}setMainDelegate(_:)를 진행했다면 다음과 같은 응답을 수신 받을 수 있음- Load 성공 시
onRewardedVideoAdLoaded, 실패 시onRewardedVideoAdFailedToLoad가 호출 - Show 성공 시
onRewardedVideoAdOpened,onRewardedVideoAdClosed가 순차적으로 호출되고, 실패 시onRewardedVideoAdFailedToShow가 호출 onRewardedVideoAdFailedToLoad,onRewardedVideoAdFailedToShow시 AdiscopeError 참고
if (AdiscopeInterface.sharedInstance().isInitialized()) {
let UNIT_ID = ""; // 관리자를 통해 발급
AdiscopeInterface.sharedInstance().loadInterstitial(UNIT_ID)
} else {
// Initialize 재시도
}- Initialize 진행 완료 후 Load 호출
- 해당 유닛에 속한 ad 네크워크들의 광고를 Load
onInterstitialAdLoadedcallback이 호출되면 Load가 완료- Interstitial의
Load와Show는 pair로 호출 - Load를 한 후 Show를 하고, 광고를 Show한 후에는 다시 Load를 하여 다음 번 Show를 준비
- 광고가 Show되는 동안 다음 광고를 Load를 할 수도 있지만 이는 사용하는 mediation ad network company의 종류에 따라 달라질 수 있으므로 항상 보장되는 동작은 아님
- Load 동작 수행 중에 Load를 여러 번 호출할 수 없음
- (Optional) Load의 시간이 필요해 ProgressBar 노출 추천
let UNIT_ID = ""; // Load한 값(관리자를 통해 발급)
if (AdiscopeInterface.sharedInstance().isLoadedInterstitialUnitID(UNIT_ID)) {
// show ad here
} else {
// do something else
}- 광고가 Load 되었는지 상태를 확인
let UNIT_ID = ""; // Load한 값(관리자를 통해 발급)
if (AdiscopeInterface.sharedInstance().isLoadedInterstitialUnitID(UNIT_ID)) {
AdiscopeInterface.sharedInstance().showInterstitial()
} else {
// do something else
}- 마지막으로 Load된 광고를 사용자에게 보여줌
- Show 호출 후에는 다시 Load를 호출 할 수 있음
- Show method는 중복하여 호출 할 수 없음
- Show가 실행되면 (return값이 True일 경우)
onInterstitialAdOpened와onInterstitialAdFailedToShow중 하나가 항상 호출되고,onInterstitialAdOpened가 호출되었다면 이후onInterstitialAdClosed가 항상 호출 - Rewarded Video Ad의
Load와Show는 pair로 호출- Load를 한 후 Show를 하고, 광고를 Show한 후에는 다시 Load를 하여 다음번 Show를 준비
if (AdiscopeInterface.sharedInstance().isInitialized()) {
let UNIT_ID = ""; // 관리자를 통해 발급
AdiscopeInterface.sharedInstance().show(withLoadInterstitial: UNIT_ID, delegate: self)
} else {
// Initialize 재시도
}- A(Load), C(Show)를 한번에 호출 하여 광고를 보여줌
setMainDelegate(_:)추가 호출 없이 한번에 추가 되도록 처리- A(Load), C(Show)와 동일하게 호출 되며,
onInterstitialAdFailedToLoad대신onInterstitialAdFailedToShow로 호출됨 - 기본적으로 Load동안 기본 Indicator가 동작, 오류시 기본 알림 팝업 발생
기본 설정 변경
가. Indicator가 동작되는 Background Color 설정
let red = "0" // 0 ~255 String 값
let green = "0" // 0 ~255 String 값
let blue = "0" // 0 ~255 String 값
let alpha = "0.3" // 0 ~ 1 String 값
AdiscopeInterface.sharedInstance().setShowWithLoad2BackgroundColor(red, green: green, blue: blue, alpha: alpha)나. Indicator의 크기 변경 및 Hidden 설정
let isStyleMedium = false // true : StyleMedium, false : StyleLarge
let isHidden = false // true : 미노출, false : 노출
AdiscopeInterface.sharedInstance().setShowWithLoad2IndicatorStyleMedium(isStyleMedium, isHidden: isHidden)다. Error Alert 메시지 설정 및 Hidden 설정
let msg = "현재 시청 가능한 광고가 없습니다.\n잠시 후 다시 시도해 주세요."
let isHidden = false // true : 미노출, false : 노출
AdiscopeInterface.sharedInstance().setShowWithLoad2ErrorAlertMsg(alertMsgLoadingView.value, isHidden: self.loadingAlertHidden)func onInterstitialAdLoaded(_ unitID: String!) {
// Interstitial Load Success
}
func onInterstitialAdFailed(toLoad unitID: String!, error: AdiscopeError!) {
// Interstitial Load Fail
}
func onInterstitialAdOpened(_ unitID: String!) {
// Interstitial 열림
}
func onInterstitialAdClosed(_ unitID: String!) {
// Interstitial 닫힘
}
func onInterstitialAdFailed(toShow unitID: String!, error: AdiscopeError!) {
// Interstitial Show Fail
}setMainDelegate(_:)를 진행했다면 다음과 같은 응답을 수신 받을 수 있음- Load 성공 시
onInterstitialAdLoaded, 실패 시onInterstitialAdFailedToLoad가 호출 - Show 성공 시
onInterstitialAdOpened,onInterstitialAdClosed가 순차적으로 호출되고, 실패 시onInterstitialAdFailedToShow가 호출 onInterstitialAdFailedToLoad,onInterstitialAdFailedToShow시 AdiscopeError 참고
if (AdiscopeInterface.sharedInstance().isInitialized()) {
AdiscopeInterface.sharedInstance().preLoadAllRewardedInterstitial()
} else {
// Initialize 재시도
}- Initialize와 사용자 정보 설정의 진행 완료 후 1회 설정 권장
- 관리자가 설정된 활성화된 모든 유닛들을 Load 진행
if (AdiscopeInterface.sharedInstance().isInitialized()) {
let UNIT_ID1 = ""; // 관리자를 통해 발급
let UNIT_ID2 = ""; // 관리자를 통해 발급
AdiscopeInterface.sharedInstance().preLoadRewardedInterstitial([UNIT_ID1, UNIT_ID2, ... ])
} else {
// Initialize 재시도
}- Initialize와 사용자 정보 설정의 진행 완료 후 1회 설정 권장
- 입력된 유닛들을 Load 진행
let UNIT_ID = ""; // 관리자를 통해 발급
AdiscopeInterface.sharedInstance().showRewardedInterstitial(UNIT_ID)- 해당 유닛이 Load되어 있으면 안내 팝업을 보여 준 뒤 해당 광고를 사용자에게 보여줌
- ShowRewardedInterstitial method는 중복하여 호출 할 수 없음
- Show가 실행되면 (return값이 True일 경우)
onRewardedInterstitialAdSkip와onRewardedInterstitialAdOpened와onRewardedInterstitialAdFailedToShow중 하나가 항상 호출되고,onRewardedInterstitialAdOpened가 호출되었다면 이후onRewardedInterstitialAdClosed가 항상 호출 onRewardedInterstitialAdClosed와onRewardedInterstitialAdFailedToShow가 호출 되면 내부에서 해당 유닛을 자동 Load 시킴
let UNIT_ID = ""; // 관리자를 통해 발급
AdiscopeInterface.sharedInstance().getRewardedInterstitialUnitStatus(UNIT_ID);onRewardedInterstitialResponsedUnitStatus에서 해당 유닛의 수익화 여부, 활성화 여부를 알 수 있음
func onRewardedInterstitialRewarded(_ unitID: String!, item: AdiscopeRewardItem!) {
// unitID - 해당 RewardedInterstitial의 UNIT_ID (Show 시 입력한 값)
// item.amount - 보상의 양
}setMainDelegate(_:)를 진행했다면 다음과 같은 응답을 수신 받을 수 있음- 보상이 주어져야 할 경우
OnRewarded가 호출되며 그 parameter로 관련 정보가 전달 - 이 보상 정보를 바탕으로 게임 내에서 보상을 지급
OnRewarded는 보통OnOpened와OnClosed사이에 호출되는 경우가 많으나 광고 System의 상황에 따라 달라 질 수 있음OnRewarded가 호출되지 않는 경우도 존재할 수 있음(Reward 설정을 Server-to-server로 하였다면, Video 시청 후에는OnRewarded가 호출되지 않음)- Reward 정보는 abusing 방지를 위해서 Server-to-server 방식으로 전달 받는 것을 권장
- Server-to-server 방식을 선택하더라도 보상이 전달 될 시에는
OnRewarded가 호출- 이때는 Server를 통해 전달받은 정보를 기준으로 처리하고,
OnRewarded를 통해 전달받은 정보는 검증용으로 사용하거나 무시하도록 함
- 이때는 Server를 통해 전달받은 정보를 기준으로 처리하고,
func onRewardedInterstitialResponsedUnitStatus(_ status: AdiscopeUnitStatus!) {
// status.active - 활성화 여부
// status.live - 수익화 여부
}
func onRewardedInterstitialAdSkip(_ unitID: String!) {
// RewardedInterstitial Skip for 안내 팝업
}
func onRewardedInterstitialAdOpened(_ unitID: String!) {
// RewardedInterstitial 열림
}
func onRewardedInterstitialAdClosed(_ unitID: String!) {
// RewardedInterstitial 닫힘
}
func onRewardedInterstitialAdFailed(toShow unitID: String!, error: AdiscopeError!) {
// RewardedInterstitial Show Fail
}setMainDelegate(_:)를 진행했다면 다음과 같은 응답을 수신 받을 수 있음- Show 성공 후 Skip 시
onRewardedInterstitialAdSkip가 호출 - Show 성공 후 영상 시청 시
onRewardedInterstitialAdOpened,onRewardedInterstitialAdClosed가 순차적으로 호출되고, 실패 시onRewardedInterstitialAdFailedToShow가 호출 onRewardedInterstitialAdFailedToShow시 AdiscopeError 참고
if (AdiscopeInterface.sharedInstance().isInitialized()) {
let OFFERWALL_UNIT_ID = ""; // 관리자를 통해 발급
AdiscopeInterface.sharedInstance().showOfferwall(OFFERWALL_UNIT_ID)
} else {
// Initialize 재시도
}Show가 실행되면 (return값이 True일 경우)onOfferwallAdOpened와onOfferwallAdFailedToShow중 하나가 항상 호출되고,onOfferwallAdOpened가 호출되었다면 이후onOfferwallAdClosed가 항상 호출
func onOfferwallAdOpened(_ unitID: String!) {
// Offerwall이 열림
}
func onOfferwallAdClosed(_ unitID: String!) {
// Offerwall이 닫힘
}
func onOfferwallAdFailed(toShow unitID: String!, error: AdiscopeError!) {
// Offerwall이 Fail
}setMainDelegate(_:)를 진행했다면 다음과 같은 응답을 수신 받을 수 있음- Show 성공 시
onOfferwallAdOpened,onOfferwallAdClosedcallback이 순차적으로 호출 onOfferwallAdFailed시 AdiscopeError 참고
let OFFERWALL_UNIT_ID = ""; // 관리자를 통해 발급
let OFFERWALL_ITEM_ID = ""; // 관리자를 통해 확인
let OFFERWALL_URL = ""; // 관리자를 통해 확인
AdiscopeInterface.sharedInstance().showOfferwallDetail(OFFERWALL_UNIT_ID, OFFERWALL_ITEM_ID)
AdiscopeInterface.sharedInstance().showOfferwallDetail(OFFERWALL_URL)