Android
Adiz Android¶
Adiz Android는 AdMob에서 제공하는 광고 노출 기능을 더 편하게 쓸 수 있도록 Hive에서 제공하는 Android용 광고 모듈입니다. Adiz Android가 제공하는 광고 형태는 다음과 같습니다.
- 전면 광고(Interstitial)
- 배너 광고(Banner)
- 네이티브 광고(Native)
- 보상형 광고(Rewarded)
- 보상형 전면 광고(Rewarded Interstitial)
- 앱 오프닝 광고(AppOpen)
Adiz Android를 설치하고 사용하려면 아래 가이드를 순서대로 참고하세요.
설치¶
모듈의 앱 수준 Gradle 파일(app/build.gradle)에 Adiz 라이브러리 항목을 추가합니다.
Java 8 기능 지원을 위해 모듈의 앱 수준 Gradle 파일에 android
설정으로 아래와 같이 추가합니다.
android {
// ...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
AndroidManifest.xml 파일에 AdMobId
(ca-app-pub-XXXXX~YYYYY 형식)를 입력합니다.
<manifest>
<application>
<!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
</application>
</manifest>
Proguard를 사용 시 Adiz 모듈에 ProGuard 규칙이 함께 포함되어 있습니다. 따라서 프로젝트에 ProGuard 규칙을 추가할 필요가 없습니다.
동영상 광고를 표시하려면 하드웨어 가속을 활성화해야 합니다. AndroidManifest.xml 파일에 하드웨어 가속을 위한 설정을 추가합니다. application
태그에 추가하면 전체 애플리케이션에 하드웨어 가속을 사용합니다. activity
태그에 추가하면 광고를 표시하려는 특정 Activity
에만 하드웨어 가속을 사용합니다.
<application android:hardwareAccelerated="true">
<!-- For activities that use ads, hardwareAcceleration should be true. -->
<activity android:hardwareAccelerated="true" />
</application>
테스트 광고 설정¶
Adiz는 2가지 방법으로 테스트 광고를 노출할 수 있습니다.
- 테스트 모드 활성화: AdMob에서 발급한 테스트용 광고만 노출
- 테스트 기기 등록 후 광고 노출: 실제 광고를 테스트를 위해 노출, 무효 트래픽이 발생하지 않도록 테스트하며 테스트 광고를 노출할 기기를 등록해 진행
테스트 모드 활성화¶
개발 단계에서는 테스트 광고를 클릭해도 광고주에게 비용을 청구하지 않도록 테스트 모드를 활성화합니다. 테스트 모드를 활성화하면 테스트 광고만 노출됩니다. 테스트 모드에서는 콘솔에 AdMob 광고 키를 입력하지 않아도 테스트 광고를 노출합니다. 상용 배포 시에는 테스트 모드를 비활성화합니다.
테스트 모드 활성화 방법은 2가지입니다.
- 하이브 콘솔에 테스트 기기 등록 후, 데모 광고로 설정하기 (권장):
콘솔 가이드의 테스트 기기 관리 내용을 참고하세요. - Adiz 클래스의
setTestMode()
메서드 사용하기:
아래 예제 코드를 참고하세요.
Note
개발 단계에서 테스트 모드가 아닐 때 광고를 지나치게 많이 클릭하면 무효 트래픽으로 간주되고 AdMob 계정이 신고되어 광고를 노출하지 못할 수 있습니다.
Adiz.setTestMode() 메서드 사용하기¶
import com.hive.adiz.Adiz
import com.hive.adiz.AdizError
import org.json.JSONException
import org.json.JSONObject
// Enable test mode. Comment out the line below for commercial distribution.
Adiz.setTestMode(true)
// Enable logging for Hive Adiz module. Logging should only be used in test mode. Comment out the line below for commercial distribution.
Adiz.setLogEnable(true)
import com.hive.adiz.Adiz;
import com.hive.adiz.AdizError;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
// Enable test mode. Comment out the line below for commercial distribution.
Adiz.setTestMode(true);
// Enable logging for Hive Adiz module. Logging should only be used in test mode. Comment out the line below for commercial distribution.
Adiz.setLogEnable(true);
테스트 기기에 광고 노출¶
아래 상황에서는 테스트 기기를 등록해 테스트 광고를 노출해야 합니다.
- 콘솔에 등록한 AdMob 광고 키가 잘 동작하는지 테스트하는 경우
- GDPR 메시지를 작성하고 GDPR 동의 팝업이 잘 동작하는지 확인하는 경우
- 광고 검사기를 실행해 광고 요청을 분석하고 디버깅하는 경우
테스트 기기에 광고 노출하는 방법은 2가지입니다.
-
하이브 콘솔에 테스트 기기 등록 후 광고 단위 ID 사용으로 설정하기 (권장):
콘솔 가이드의 테스트 기기 관리 내용을 참고세요. -
Adiz 클래스의
setTestDevice()
메서드 사용하기:
아래 예제 코드를 참고하세요.
Note
테스트 기기를 등록하지 않고 실제 광고를 노출하는 테스트를 하면 무효 트래픽으로 간주되어 AbMob 계정이 차단되고 광고를 더는 노출하지 못할 수 있습니다. 테스트 기기를 등록하면 광고 노출 시 "Test Mode" 또는 "Test Ad"(네티이브 광고)가 표시됩니다. 상용 배포 시에는 테스트 기기를 비활성화해야 합니다.
Adiz.setTestDevice() 메서드 사용하기¶
테스트 기기를 등록하려면 먼저 테스트 기기 ID를 확인합니다. 테스트 기기 ID(예시:33BE2250B43518CCDA7DE426D04EE231
)는 아래 2가지 방법으로 확인 가능합니다.
-
Adiz.Initialize()
호출 후 Logcat 로그 확인: -
Adiz.Initialize()
호출 후 광고 타입 상관없이initialize()
→load()
호출 후 Logcat 로그 확인:
테스트 기기 ID를 확인 후, 기존 Adiz 초기화 코드에서 Adiz.initialize
실행 전에 Adiz.setTestDevice(DEVICE_ID)
라인을 추가합니다. DEVICE_ID
에는 복사한 테스트 기기 ID를 입력합니다.
import com.hive.Adiz
import com.hive.adiz.AdizError
import org.json.JSONObject
fun initialize() {
Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231")
Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
override fun onComplete(error: AdizError, jsonData: JSONObject?) {
// ... 생략
}
})
}
import com.hive.Adiz;
import com.hive.adiz.AdizError;
import org.json.JSONObject;
public void initialize() {
Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231");
Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
@Override
public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {
if(error.isSuccess()) {
// ... 생략
}
}
});
}
import com.hive.Adiz;
import com.hive.adiz.AdizError;
import org.json.JSONObject;
public void initialize() {
Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231");
Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
@Override
public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {
if(error.isSuccess()) {
// ... 생략
}
}
});
}
광고 검사기 활용¶
광고 검사기는 테스트 기기 상에서 실제 광고를 요청 후 노출하는 과정을 실시간으로 분석하는 인앱 오버레이 도구입니다. 광고를 로드하는데 걸린 시간을 알려주며, 노출에 실패했다면 실패 사유를 알려줍니다. 또 특정 광고 네트워크를 지정하여 광고가 잘 노출되는지 확인 가능하며 문제가 있다면 코드 레벨에서 디버깅을 할 수 있습니다. 이 모든 과정은 광고 검사 UI와 함께 진행합니다. Google Mobile Ads SDK Android 20.0.0 이상에 포함되어 있으며 AdizDeveloperTool.openAdInspector
를 호출해 사용할 수 있습니다.
광고 검사기를 사용하려면 테스트 기기에 광고 노출 이 설정되어야 합니다.
Adiz AppID 설정¶
콘솔 AppCenter에 등록했던 Adiz AppID를 설정합니다. 미설정 시 AndroidManifest.xml 패키지명을 사용합니다.
Hive 콘솔 서버 설정¶
사용할 Hive 콘솔 서버를 설정합니다. 기본값은 REAL
입니다. 상용 서버를 사용하더라도 테스트 모드를 활성화하면 테스트 광고만 노출합니다.
- Hive 테스트 콘솔 서버:
ZoneType.TEST
- Hive 샌드박스 콘솔 서버:
ZoneType.SANDBOX
- Hive 상용 콘솔 서버:
ZoneType.REAL
GDPR 동의 팝업 노출(유럽, 영국)¶
게임이 유럽 및 영국(EEA & UK)을 타겟팅하는 경우, GDPR(유럽 연합 일반 데이터 보호 규칙) 동의 팝업을 노출해야 합니다. GDPR 동의 팝업은 유저 기기 IP 주소가 유럽 및 영국(EEA & UK) IP 주소인 경우에만 노출됩니다. Adiz는 GDPR 동의 팝업 노출을 위해 Google UMP(User Messaging Platform)를 지원합니다. AdMob 콘솔에서 GDPR 메시지를 작성한 후에 Adiz를 초기화하면 유럽 및 영국 지역에서 접속한 사용자에게는 GDPR 팝업이 노출됩니다.
Warning
유럽 및 영국 외 지역을 타겟팅 할 경우, 예를 들어 국내에서만 서비스를 계획하고 있는 경우 GDPR 동의 팝업 노출(유럽, 영국) 단계를 건너뛰고 Adiz.initializeForNonGDPR()
메서드를 사용하여 초기화를 진행할 수 있습니다.
Adiz.initialize()
메서드를 사용하여 초기화를 진행하는 경우 AdMob 콘솔에서 GDPR 메시지를 작성해야만 Adiz 초기화가 정상적으로 진행됩니다.
GDPR 메시지 작성¶
Google AdMob 콘솔에 접속하여 GDPR 메시지를 작성합니다. GDPR 메시지를 작성하기 전에, 먼저 GDPR 메시지 작성 가이드를 참고하세요.
GDPR 메시지를 작성했다면 Adiz 초기화 시 자동으로 GDPR 동의 팝업이 노출됩니다.
GDPR 동의/철회 기능 구현¶
GDPR 동의 팝업에 있는 항목들은 유저가 동의 여부를 언제든지 수정할 수 있도록 수정 기능을 제공해야 합니다. 예를 들어, 유저가 처음에는 GDPR에 동의하지 않았지만 맞춤 광고를 보기 위해 다시 동의를 원하거나, 반대로 처음에는 GDPR에 동의했지만 더는 개인 정보를 제공하고 싶지 않아 동의 철회를 원할 수 있습니다. 이러한 상황에 대응하려면 앱 개발사는 각 항목에 다시 동의하거나 기존 동의를 철회하는 기능을 구현해야 합니다. GDPR 동의/철회 기능을 구현하려면 다음 단계를 따릅니다.
- GDPR 동의 팝업창을 다시 불러올 수 있는 버튼 UI를 앱에 구현합니다.
- Adiz 초기화 구현 시
isPrivacyOptionsRequired()
를 호출하여, 유럽 및 영국에서 접속하는 유저에게는 위 버튼 UI를 표시하고, 그렇지 않은 경우에는 표시하지 않도록 구현합니다. 유럽 및 영국에서 접속하는 유저가 위 버튼을 누르면showPrivacyOptionsForm
을 호출하여 GDPR 동의 팝업창을 다시 불러옵니다. 그러면, 유저는 앱에서 언제든지 "Manage Options"와 같은 버튼을 눌러서 GDPR 세부 항목 동의 여부를 수정할 수 있습니다. 아래showPrivacyOptionsForm
은 예시를 위해 임의로 구현한 메서드이며, 개발사에서 원하는 형태로 구현을 변경할 수 있습니다.
import com.hive.Adiz
import com.hive.adiz.AdizError
import com.hive.AdizConsentManager
import org.json.JSONObject
fun initialize() {
// ...
Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
override fun onComplete(error: AdizError, jsonData: JSONObject?) {
if(error.isSuccess) {
// ... 생략
// GDPR 동의 팝업창을 다시 띄우는 버튼을 앱에 표시할지 여부를 결정
var isPrivacyOptionsRequired = AdizConsentManager.isPrivacyOptionsRequired()
if(isPrivacyOptionsRequired) {
// 버튼을 앱에 표시함. (버튼 클릭 시 showPrivacyOptionsForm() 호출하여 GDPR 동의 팝업창을 표시함)
showGDPRConsentPopupButton()
} else {
// 버튼을 앱에 표시하지 않음.
// 기타 앱에서 원하는 처리.
}
}
}
})
}
fun showPrivacyOptionsForm(activity: Activity) {
// GDPR 동의 옵션 양식 호출
if(AdizConsentManager.isPrivacyOptionsRequired()) {
AdizConsentManager.showPrivacyOptionsForm(activity, object : AdizConsentManager.ConsentListener {
override fun onResult(error: AdizError) {
addLog("AdizConsentManager.showPrivacyOptionsForm() errorCode : ${error.getCode()}, errorMessage : ${error.getMessage()}}\n")
// No need to do any error handling.
}
})
}
}
import com.hive.adiz.Adiz;
import com.hive.adiz.AdizError;
import com.hive.AdizConsentManager;
import org.json.JSONObject;
public void initialize() {
Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
@Override
public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {
if(error.isSuccess()) {
// ... 생략
// GDPR 동의 팝업창을 다시 띄우는 버튼을 앱에 표시할지 여부를 결정
boolean isPrivacyOptionsRequired = AdizConsentManager.isPrivacyOptionsRequired();
if(isPrivacyOptionsRequired) {
// 버튼을 앱에 표시함. (버튼 클릭 시 showPrivacyOptionsForm() 호출하여 GDPR 동의 팝업창을 표시함)
showGDPRConsentPopupButton();
} else {
// 버튼을 앱에 표시하지 않음.
// 기타 앱에서 원하는 처리.
}
}
}
});
}
public void showPrivacyOptionsForm(Activity activity) {
// GDPR 동의 옵션 양식 호출
if(AdizConsentManager.isPrivacyOptionsRequired()) {
AdizConsentManager.showPrivacyOptionsForm(activity, new AdizConsentManager.ConsentListener() {
@Override
public void onResult(@NonNull AdizError error) {
// No need to do any error handling.
}
});
}
}
GDPR 동의 연령 미만의 사용자를 위한 태그(TFUA) 설정¶
GDPR 동의 연령 미만의 사용자를 위한 태그(Tag For Under the Age of Consent, TFUA)를 사용하여 유럽 경제 지역(EEA), 영국, 스위스에 거주하는 사용자를 제한적인 데이터 처리 대상으로 취급하도록 광고 요청시 설정할 수 있습니다. 어린이를 대상으로 서비스 하는 앱의 경우 AdizConsentManager.setUserPrivacySettings
를 사용해 사용자가 동의 연령 미만임을 설정할 수 있습니다. 유럽 국가마다 일부 차이가 있지만, GDPR은 16세 미만을 부모 동의가 필요한 나이로 규정합니다. 동의 연령 미만 설정은 Adiz.initialize
실행 전에 설정해야 합니다.
Warning
GDPR 동의 연령 미만 태그 설정인 setTagForUnderAgeOfConsent
와 COPPA 어린이 대상 설정인 setTagForChildDirectedTreatment
를 동시에 true
로 설정하면, COPPA 어린이 대상 설정 setTagForChildDirectedTreatment
설정이 우선 적용되므로, 이들을 동시에 true
로 설정해 사용하지 마십시오.
Note
Hive SDK v4 24.2.0 이상과 Adiz 2.0.1 이상을 함께 사용 시, Hive SDK에서 설정한 동의 연령 미만 사용자 여부를 자동으로 적용하므로 AdizConsentManager.setUserPrivacySettings
을 호출할 필요가 없습니다.
import com.hive.Adiz
import com.hive.adiz.AdizError
import com.hive.adiz.consent.PrivacySettings
import org.json.JSONObject
fun initialize() {
val isUnderAgeForGDPR = false // 어린이인 경우 true로 변경
val settings = PrivacySettings.Builder()
.setTagForUnderAgeOfConsent(isUnderAgeForGDPR)
.build()
AdizConsentManager.setUserPrivacySettings(settings)
Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
override fun onComplete(error: AdizError, jsonData: JSONObject?) {
// ... 생략
}
})
}
import com.hive.Adiz;
import com.hive.adiz.AdizError;
import com.hive.adiz.consent.PrivacySettings;
import org.json.JSONObject;
public void initialize() {
boolean isUnderAgeForGDPR = false; // 어린이인 경우 true로 변경
PrivacySettings settings = new PrivacySettings.Builder()
.setTagForUnderAgeOfConsent(isUnderAgeForGDPR)
.build();
AdizConsentManager.setUserPrivacySettings(settings);
Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
@Override
public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {
if(error.isSuccess()) {
// ... 생략
}
}
});
}
GDPR 테스트 기기 설정¶
GDPR 동의 팝업은 기기 IP 주소가 유럽 및 영국 IP 주소일 경우에만 노출됩니다. 개발 단계에서는 IP 주소와 상관 없이 GDPR 동의 팝업을 강제로 노출하여 팝업 노출을 테스트할 수 있으며, 이를 위해 GDPR 테스트 기기를 설정해야 합니다. 하이브 콘솔에서 테스트 기기를 설정하면 손쉽게 테스트를 할 수 있습니다. setTestDevice
메서드를 사용하여 설정하는 방법은 아래와 같으며, 테스트 기기에 광고를 노출하는 방법과 동일합니다.
- Adiz를 초기화합니다. 테스트 기기 ID를 확인하기 위한 초기화이며 GDPR 동의 메시지를 작성할 필요가 없습니다.
Logcat 로그 출력에서 기기 ID를 확인할 수 있는 메세지를 확인합니다. 아래는 예시 메시지입니다.
- 메시지에서 기기 ID(예시:
33BE2250B43518CCDA7DE426D04EE231
)를 확인합니다. - 기기 ID를 복사합니다.
- 기존 Adiz 초기화 코드에서
Adiz.initialize
실행 전에AdizGDPRManager.setTestDevice(DEVICE_ID)
를 추가합니다. - GDPR 동의 메시지를 작성하고 Adiz를 다시 초기화하여 GDPR 동의 팝업이 잘 나타나는지 확인합니다.
import com.hive.Adiz
import com.hive.adiz.AdizError
import org.json.JSONObject
fun initialize() {
Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231")
Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
override fun onComplete(error: AdizError, jsonData: JSONObject?) {
// ... 생략
}
})
}
import com.hive.Adiz;
import com.hive.adiz.AdizError;
import org.json.JSONObject;
public void initialize() {
Adiz.setTestDevice("33BE2250B43518CCDA7DE426D04EE231");
Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
@Override
public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {
if(error.isSuccess()) {
// ... 생략
}
}
});
}
COPPA 아동 대상 취급 태그 설정¶
아동 온라인 개인정보 보호법(COPPA) 목적에 따라, 앱 개발자는 아동 대상 취급 태그 설정(tagForChildDirectedTreatment, TFCD)으로 광고 요청 시 Google에서 콘텐츠를 아동용 콘텐츠로 처리할지 여부를 지정할 수 있습니다. 아동용으로 처리하기를 원하는 경우 AdizConsentManager.setUserPrivacySettings
를 Adiz.initialize
실행 전에 호출해야 합니다. Adiz와 Hive SDK를 함께 사용 시, 아동 대상 취급 태그는 자동으로 적용되므로 별도 설정이 필요하지 않습니다.
import com.hive.Adiz
import com.hive.adiz.AdizError
import com.hive.adiz.consent.PrivacySettings
import org.json.JSONObject
fun initialize() {
val isChildDirectedTreatmentForCOPPA = false // 어린이인 경우 true로 변경
val settings = PrivacySettings.Builder()
.setTagForChildDirectedTreatment(isChildDirectedTreatmentForCOPPA)
.build()
AdizConsentManager.setUserPrivacySettings(settings)
Adiz.initialize(activity, object : Adiz.SdkInitializationListener {
override fun onComplete(error: AdizError, jsonData: JSONObject?) {
// ... 생략
}
})
}
import com.hive.Adiz;
import com.hive.adiz.AdizError;
import com.hive.adiz.consent.PrivacySettings;
import org.json.JSONObject;
public void initialize() {
boolean isChildDirectedTreatmentForCOPPA = false; // 어린이인 경우 true로 변경
PrivacySettings settings = new PrivacySettings.Builder()
.setTagForChildDirectedTreatment(isChildDirectedTreatmentForCOPPA)
.build();
AdizConsentManager.setUserPrivacySettings(settings);
Adiz.initialize(activity, new Adiz.SdkInitializationListener() {
@Override
public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {
if(error.isSuccess()) {
// ... 생략
}
}
});
}
광고 미디에이션 추가¶
Adiz는 AdMob 미디에이션을 사용해 광고를 노출할 수 있습니다. AdMob 미디에이션을 추가하려면 아래 단계를 따르세요.
AdMob 미디에이션 추가¶
AdMob 콘솔에서 광고 소스 연동 작업을 진행합니다. 아래 표를 따라 진행합니다.
AppLovin | Pangle | Unity Ads | Meta | |
---|---|---|---|---|
Step 1 | AppLovin 구성 설정하기 | Pangle 구성 설정하기 | Unity Ads 구성 설정하기 | Meta 구성 설정하기 |
Step 2 | AdMob에 AppLovin 광고 소스 추가하기 | AdMob에 Pangle 광고 소스 추가하기 | AdMob에 Unity Ads 광고 소스 추가하기 | AdMob에 Meta 광고 소스 추가하기 |
Step 3 | Adiz 어댑터 추가하기 |
Adiz 어댑터 추가하기¶
앱 수준 build.gradle에 라이브러리 의존성을 추가합니다.
dependencies {
// ... (생략)
implementation 'com.com2us.android.adiz:hive-adiz:2.0.1' // 공통 (필수 추가)
implementation 'com.com2us.android.adiz:hive-adiz-adapter-applovin:2.0.1' // AppLovin 연동시 추가
implementation 'com.com2us.android.adiz:hive-adiz-adapter-pangle:2.0.1' // Pangle 연동시 추가
implementation 'com.com2us.android.adiz:hive-adiz-adapter-unityads:2.0.1' // Unity Ads 연동시 추가
implementation 'com.com2us.android.adiz:hive-adiz-adapter-meta:2.0.1' // Meta 연동시 추가
}
Pangle 연동 시에는 다음 설정을 추가합니다. Gradle 7.0 이상을 사용하는 경우 프로젝트 수준 settings.gradle dependencyResolutionManagement
부분에 repository
설정을 추가합니다.
// Gradle 7.0 이상 사용 시 settings.gradle 설정
dependencyResolutionManagement {
repositories {
maven { url 'https://artifact.bytedance.com/repository/pangle/' } // Pangle 연동 시 추가
}
}
Gradle 7.0 미만을 사용하는 경우 프로젝트 수준 build.gradle allprojects
부분에 repository
설정을 추가합니다.
// Gradle 7.0 미만 사용 시 build.gradle 설정
allprojects {
repositories {
maven {
url 'https://artifact.bytedance.com/repository/pangle' // Pangle 연동 시 추가
}
}
}
Adiz 어댑터 구성이 올바르게 적용되었는지 확인하기 위해 앱을 실행 후 광고 검사기 화면에서 구성 목록을 확인합니다.
Adiz 초기화¶
모든 타입의 광고를 노출하기 전 필수적으로 수행해야 하는 단계입니다. Adiz 초기화를 하면 광고를 노출하는 데 필요한 광고 키를 받을 수 있습니다. 테스트 모드를 활성화한 상태라면 테스트 키를 받습니다. Hive SDK를 사용중이라면 AuthV4.setup
을 호출한 이후 Adiz 초기화를 진행합니다.
val sdkInitializationListener = object : Adiz.SdkInitializationListener {
override fun onComplete(error: AdizError, jsonData: JSONObject?) {
Log.d(TAG, "Adiz initialize complete. error code : ${error.getCode()}, message : ${error.getMessage()}, data : $jsonData")
if(error.isSuccess) {
if(jsonData != null) {
var interstitialKeyList = ArrayList<String>()
var bannerKeyList = ArrayList<String>()
var nativeKeyList = ArrayList<String>()
var rewardedKeyList = ArrayList<String>()
var rewardedInterstitialKeyList = ArrayList<String>()
var appOpenKeyList = ArrayList<String>()
try {
var keysArr = jsonData.getJSONArray("keys")
for (i in 0 until keysArr.length()) {
var unit = keysArr.optJSONObject(i)
// An example of constructing a list of keys where is_default is false if you enter the ad key directly in the game.
if (unit.optBoolean("is_default").not()) {
var hiveAdKey = unit.optString("key")
when (unit.optString("form")) {
"interstitial" -> interstitialKeyList.add(hiveAdKey)
"banner" -> bannerKeyList.add(hiveAdKey)
"native" -> nativeKeyList.add(hiveAdKey)
"rewarded" -> rewardedKeyList.add(hiveAdKey)
"rewarded_interstitial" -> rewardedInterstitialKeyList.add(hiveAdKey)
"app_open" -> appOpenKeyList.add(hiveAdKey)
}
}
}
println("interstitialKeyList $interstitialKeyList")
println("bannerKeyList $bannerKeyList")
println("nativeKeyList $nativeKeyList")
println("rewardedKeyList $rewardedKeyList")
println("rewardedInterstitialKeyList $rewardedInterstitialKeyList")
println("appOpenKeyList $appOpenKeyList")
} catch (e: JSONException) {
//...
}
}
}
}
}
fun initAdiz() {
// 일반적인 초기화
Adiz.initialize(activity, sdkInitializationListener)
}
fun initAdizForNonGDPR() {
// GDPR 대응을 하지 없는 경우
Adiz.initializeForNonGDPR(activity, sdkInitializationListener)
}
Adiz.SdkInitializationListener sdkInitializationListener = new Adiz.SdkInitializationListener() {
@Override
public void onComplete(@NonNull AdizError error, @Nullable JSONObject jsonData) {
if(error.isSuccess()) {
if(jsonData != null) {
ArrayList interstitialKeyList = new ArrayList<String>();
ArrayList bannerKeyList = new ArrayList<String>();
ArrayList nativeKeyList = new ArrayList<String>();
ArrayList rewardedKeyList = new ArrayList<String>();
ArrayList rewardedInterstitialKeyList = new ArrayList<String>();
ArrayList appOpenKeyList = new ArrayList<String>();
try {
JSONArray keysArr = jsonData.optJSONArray("keys");
for(int i = 0; i < keysArr.length(); i++) {
JSONObject unit = keysArr.optJSONObject(i);
if(unit.optBoolean("is_default") == false) {
String hiveAdKey = unit.optString("key");
String form = unit.optString("form");
switch (form) {
case "interstitial":
interstitialKeyList.add(hiveAdKey);
break;
case "banner":
bannerKeyList.add(hiveAdKey);
break;
case "native":
nativeKeyList.add(hiveAdKey);
break;
case "rewarded":
rewardedKeyList.add(hiveAdKey);
break;
case "rewarded_interstitial":
rewardedInterstitialKeyList.add(hiveAdKey);
break;
case "app_open":
appOpenKeyList.add(hiveAdKey);
break;
}
}
}
System.out.println("interstitialKeyList " + interstitialKeyList);
System.out.println("bannerKeyList " + bannerKeyList);
System.out.println("nativeKeyList " + nativeKeyList);
System.out.println("rewardedKeyList " + rewardedKeyList);
System.out.println("rewardedInterstitialKeyList " + rewardedInterstitialKeyList);
System.out.println("appOpenKeyList " + appOpenKeyList);
} catch (Exception e) {
}
}
}
}
};
void initAdiz() {
// 일반적인 초기화
Adiz.initialize(activity, sdkInitializationListener);
}
void initAdizForNonGDPR() {
// GDPR 대응을 하지 없는 경우
Adiz.initializeForNonGDPR(activity, sdkInitializationListener);
}
초기화 실행 시 콜백으로 받는 JSON 파일에는 광고 키 목록이 있습니다. 광고 키 목록은 다음과 같은 형식을 가집니다.
{
"keys":[
{
"mediation_id":5,
"key":"ca-app-pub-3940256099942544/5354046379",
"form":"rewarded_interstitial",
"is_default":true,
"placement_id":"lobby01"
},
{
"mediation_id":4,
"key":"ca-app-pub-3940256099942544/5224354917",
"form":"rewarded",
"is_default":true,
"placement_id":"game02"
},
{
"mediation_id":3,
"key":"ca-app-pub-3940256099942544/2247696110",
"form":"native",
"is_default":true,
"placement_id":"event01"
},
{
"mediation_id":1,
"key":"ca-app-pub-3940256099942544/1033173712",
"form":"interstitial",
"is_default":true,
"placement_id":"mission01"
},
{
"mediation_id":2,
"key":"ca-app-pub-3940256099942544/6300978111",
"form":"banner",
"is_default":true,
"placement_id":"main01"
},
{
"mediation_id":6,
"key":"ca-app-pub-3940256099942544/9257395921",
"form":"app_open",
"is_default":true,
"placement_id":"appopen01"
}
]
}
테스트 모드에서 초기화를 하면 AdMob 광고키를 Hive 콘솔에 등록하지 않았어도 테스트용 광고 키 목록을 받습니다. 상용 모드에서 초기화를 하면 Hive 콘솔에 등록한 AdMob 광고 키 목록을 받습니다.
광고 형태(form
)마다 한 개 광고는 기본 광고("is_default":true
인 광고)로 사용합니다. 어떤 광고 형태를 최초 등록 시, 최초 등록한 광고가 기본 광고가 됩니다. 기본 광고는, 광고 인스턴스를 생성(initialize()
)할 때 광고 키(hiveAdKey
)를 입력하지 않아도 됩니다. 기본 광고를 변경하려면, Hive 콘솔에서 기존 기본 광고를 삭제하고 광고를 새로 등록해야 합니다.
광고 콜백 리스너 설정¶
각 광고 인스턴스 생성 시 AdizListener
를 구현하면 광고 상태 변화에 따라 콜백을 받을 수 있습니다.
명칭 | 설명 | 필수 구현 |
---|---|---|
onLoad() | 광고 로드 성공 | O |
onFail(error: AdizError) | 실패(error.getCode() 와 error.getMessage() 로 실패 이유를 알 수 있음) | O |
onShow() | 광고 노출 성공 | O |
onClick() | 광고 클릭 | O |
onPaidEvent(adRevenueData: AdRevenueData) | 광고 노출 이후 paid event를 받는 시점으로, 광고 수익 정보가 전달됨 | O |
onClose() | 광고 종료
| X |
onRewarded(rewardItem: RewardItem) | 보상형 광고(rewarded , rewarded interstitial )에서 광고 노출 후 유저가 보상을 받는 시점 | X |
var adizListener = object : AdizListener() {
override fun onLoad() {
// Called when the ad is loaded.
// If the ad load is successful, you need to call the ad instance's .show() at the desired point to display the ad.
}
override fun onFail(loadError: AdizError) {
// Called if the ad load failed or the ad display failed for some other reason.
}
override fun onShow() {
// Called when the ad is displayed.
}
override fun onClick() {
// Called when the ad is clicked.
}
override fun onPaidEvent(adRevenueData: AdRevenueData) {
// Called when revenue is generated for the ad.
var revenue = adRevenueData.revenue // Revenue at the time of ad display
var currency = adRevenueData.currency // Currency code for the revenue at the time of ad display
}
override fun onClose() {
// Called when the ad is closed.
// Banner, Native ads do not have an onClose callback.
}
override fun onRewarded(rewardItem: RewardItem) {
// Called when a reward is creaetd for watching the ad in rewarded, rewarded interstitial ads.
var itemType = rewardItem.itemType // Reward item type
var itemAmount = rewardItem.itemAmount // Reward item quantity
}
}
AdizListener adizListener = new AdizListener() {
@Override
public void onLoad() {
// Called when the ad is loaded.
// If the ad load is successful, you need to call the ad instance's .show() at the desired point to display the ad.
}
@Override
public void onFail(@NonNull AdizError loadError) {
// Called if the ad load failed or the ad display failed for some other reason.
}
@Override
public void onShow() {
// Called when the ad is displayed.
}
@Override
public void onClick() {
// Called when the ad is clicked.
}
@Override
public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
double revenue = adRevenueData.getRevenue(); // Revenue at the time of ad display
String currency = adRevenueData.getCurrency(); // Currency code for the revenue at the time of ad display
}
@Override
public void onClose() {
// Called when the ad is closed.
// Banner, Native ads do not have a close button and therefore do not have an onClose callback.
}
@Override
public void onRewarded(@NonNull RewardItem rewardItem) {
// Called when a reward occurs for watching the ad in rewarded, rewarded interstitial ads.
String rewardType = rewardItem.getItemType(); // Reward item type
int rewardAmount = rewardItem.getItemAmount(); // Reward item quantity
}
};
에러 코드¶
Adiz.Initialize
와 AdizListener
에서 onFail()
을 받았을 때 AdizError
에러 코드와 에러 메세지는 다음과 같습니다.
공통 코드¶
Number | Case | Explanation |
---|---|---|
0 | Success | 성공 |
Adiz 에러 코드¶
Number | Case | Explanation |
---|---|---|
-1 | InvalidParam | 잘못된 파라미터 |
-2 | NotSupported | 지원하지 않음 |
-3 | InProgress | 프로세스 진행중 상태 |
-4 | Network | 네트워크 에러 |
-5 | NeedInitialize | 초기화 필요 |
-6 | ResponseFail | 응답 실패 |
-7 | Timeout | 네트워크 타임 아웃 |
-99 | Unknown | 알 수 없는 에러 |
광고 플랫폼 에러 코드¶
Number | Case | Explanation |
---|---|---|
-101 | NeedLoad | 광고가 로드 되지 않았음 |
-102 | NeedReload | 광고 노출 시간 만료로 인한 다시 로드 필요 |
-103 | NotEnoughInventory | 미디에이션 응답은 성공하였으나 인벤토리 부족으로 채워진 광고가 없음 |
-104 | MissingAppId | 미디에이션 요청을 위한 AppID 오류 |
-105 | InternalNetworkError | 미디에이션 네트워크 관련 에러 |
-106 | InvalidUnitId | 잘못된 Unit Id |
-107 | MediationNoFill | 미디에이션 어댑터가 광고 요청을 처리하지 못함 |
-108 | AlreadyLoaded | 이미 로드된 상태 |
-109 | CannotRequestAds | 광고를 요청할 수 없음 |
-201 | GdprConsentError | GDPR 동의 에러 |
-202 | IsNotPrivacyOptionsRequired | GDPR 동의 팝업을 노출할 수 없거나 노출하지 않아도 되는 상태임 |
광고 노출과 광고 종료¶
광고를 노출, 종료하려면 다음 순서를 따릅니다.
- 노출하려는 광고 형태별로 광고 클래스에서 광고 인스턴스를 생성합니다. 노출하려는 광고가 기본 광고가 아니면, 초기화에서 얻은 광고 키 또는 위치 ID를 입력해야 합니다.
광고 키(hiveAdKey
) 또는 위치 ID(placementId
)를 입력하지 않으면, 기본 광고 인스턴스를 생성합니다. 위치 ID는 하이브 콘솔에서 설정할 수 있으며 보다 자세한 내용은 콘솔 가이드의 Admob 설정 페이지를 참고하세요. - 노출하려는 광고를 로드(
load()
)합니다. - 로드한 광고를 노출(
show()
)합니다. 광고를 다시 노출하려면load()
를 다시 호출한 후show()
를 호출합니다. - 광고를 종료하려면
destroy()
를 호출합니다.
전면 광고(Interstitial)¶
화면 전체를 차지하는 전면 광고입니다.
import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizInterstitial
import com.hive.adiz.common.AdRevenueData
class InterstitialExample : Activity() {
var interstitialAd: AdizInterstitial? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
// requestInitAd(this)
}
val adizListener = object : AdizListener() {
override fun onLoad() {
// requestShowAd()
}
override fun onFail(loadError: AdizError) {
var code = loadError.getCode() // error code
var message = loadError.getMessage() // error message
}
override fun onShow() {
//
}
override fun onClick() {
//
}
override fun onPaidEvent(adRevenueData: AdRevenueData) {
var revenue = adRevenueData.revenue // revenue when ad is exposed
var currency = adRevenueData.currency // currency code for revenue when ad is exposed
}
override fun onClose() {
// requestDestroyAd()
}
}
fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {
if(hiveAdKey.isNullOrEmpty()) {
// Create an interstitial ad instance.
interstitialAd = AdizInterstitial.initialize(activity, adizListener)
} else {
// You can create an interstitial ad instance by entering the hiveAdKey.
interstitialAd = AdizInterstitial.initialize(activity, hiveAdKey, adizListener)
}
// requestLoadAd()
}
fun requestInitAdWithPlacementid(activity: Activity, placementId: String? = null) {
if(placementId.isNullOrEmpty()) {
// Create an interstitial ad instance.
interstitialAd = AdizInterstitial.initialize(activity, adizListener)
} else {
// You can create an interstitial ad instance by entering the placementId.
interstitialAd = AdizInterstitial.initializeWithPlacementId(activity, placementId, adizListener)
}
// requestLoadAd()
}
fun requestLoadAd() {
// Load the interstitial ad.
interstitialAd?.let {
if(it.isInitialized()) it.load()
}
}
fun requestShowAd() {
// Expose the interstitial ad.
interstitialAd?.let {
if(it.isLoaded()) it.show()
}
}
fun requestDestroyAd() {
// Remove the interstitial ad.
interstitialAd?.destroy()
}
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizInterstitial;
import com.hive.adiz.common.AdRevenueData;
public class InterstitialExample extends Activity {
AdizInterstitial interstitialAd = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
// requestInitAd(this, null);
}
AdizListener adizListener = new AdizListener() {
@Override
public void onLoad() {
// requestShowAd();
}
@Override
public void onFail(@NonNull AdizError loadError) {
int code = loadError.getCode(); // error code
String message = loadError.getMessage(); // error message
}
@Override
public void onShow() {
}
@Override
public void onClick() {
//
}
@Override
public void onClose() {
// requestDestroyAd();
}
@Override
public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
double revenue = adRevenueData.getRevenue(); // revenue when ad is exposed
String currency = adRevenueData.getCurrency(); // currency code for revenue when ad is exposed
}
};
public void requestInitAd(Activity activity, String hiveAdKey) {
if(TextUtils.isEmpty(hiveAdKey)) {
// Create an interstitial ad instance.
interstitialAd = AdizInterstitial.initialize(activity, adizListener);
} else {
// You can create an interstitial ad instance by entering the hiveAdKey.
interstitialAd = AdizInterstitial.initialize(activity, hiveAdKey, adizListener);
}
// requestLoadAd();
}
public void requestInitAdWithPlacementId(Activity activity, String placementId) {
if(TextUtils.isEmpty(placementId)) {
// Create an interstitial ad instance.
interstitialAd = AdizInterstitial.initialize(activity, adizListener);
} else {
// You can create an interstitial ad instance by entering the placementId.
interstitialAd = AdizInterstitial.initializeWithPlacementId(activity, placementId, adizListener);
}
// requestLoadAd();
}
private void requestLoadAd() {
// Load the interstitial ad.
if(interstitialAd != null && interstitialAd.isInitialized()) interstitialAd.load();
}
private void requestShowAd() {
// Expose the interstitial ad.
if(interstitialAd != null && interstitialAd.isLoaded()) interstitialAd.show();
}
private void requestDestroyAd() {
// Remove the interstitial ad.
if(interstitialAd != null) interstitialAd.destroy();
}
}
배너 광고 (Banner)¶
특정 사이즈의 배너를 노출하는 배너 광고입니다. 배너 광고는 onClose()
콜백을 전달받지 않습니다. 따라서, 다른 위치에서 destroy()
를 호출하여 광고를 종료해야 합니다.
BannerSize
는 표준 배너 크기를 따릅니다.
크기 포인트 (너비x높이) | 설명 | 지원 대상 | BannerSize 상수 |
---|---|---|---|
320x50 | 배너 | 휴대전화 및 태블릿 | BannerSize.NORMAL |
320x100 | 대형 배너 | 휴대전화 및 태블릿 | BannerSize.MEDIUM |
300x250 | IAB 중간 직사각형 | 휴대전화 및 태블릿 | BannerSize.LARGE |
468 x 60 | IAB 전체 크기 배너 | 태블릿 | BannerSize.FULL |
PositionType
은 최상단 혹은 최하단입니다. 기본값은 최하단입니다.
정렬 | 설명 | PositionType 상수 |
---|---|---|
최상단 정렬 | 화면 최상단 정렬 지정 | PositionType.TOP |
최하단 정렬 (기본값) | 화면 최하단 정렬 지정 | PositionType.BOTTOM |
import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizBanner
import com.hive.adiz.common.AdRevenueData
import com.hive.adiz.common.BannerSize
import com.hive.adiz.common.PositionType
class BannerExample : Activity() {
var banner: AdizBanner? = null
// Set the banner size.
var bannerSize = BannerSize.NORMAL
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
// requestInitAd(this)
}
val adizListener = object : AdizListener() {
override fun onLoad() {
// requestShowAd()
}
override fun onFail(loadError: AdizError) {
var code = loadError.getCode() // error code
var message = loadError.getMessage() // error message
}
override fun onShow() {
//
}
override fun onClick() {
//
}
override fun onPaidEvent(adRevenueData: AdRevenueData) {
var revenue = adRevenueData.revenue // revenue when ad is exposed
var currency = adRevenueData.currency // currency code for revenue when ad is exposed
}
}
fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {
if(hiveAdKey.isNullOrEmpty()) {
// Create a banner ad instance.
banner = AdizBanner.initialize(activity, bannerSize, adizListener)
} else {
// You can create a banner ad instance by entering the hiveAdKey.
banner = AdizBanner.initialize(activity, hiveAdKey, bannerSize, adizListener)
}
// requestLoadAd()
}
fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {
if(placementId.isNullOrEmpty()) {
// Create a banner ad instance.
banner = AdizBanner.initialize(activity, bannerSize, adizListener)
} else {
// You can create a banner ad instance by entering the placementId.
banner = AdizBanner.initializeWithPlacementId(activity, placementId, bannerSize, adizListener)
}
// requestLoadAd()
}
fun requestLoadAd() {
// Load the banner ad.
banner?.let {
if(it.isInitialized()) it.load()
}
}
fun requestShowAd() {
// Expose the banner ad.
banner?.let {
if(it.isLoaded()) it.show()
}
// Set banner position
/*
var position = PositionType.TOP
banner?.let {
if(it.isLoaded()) it.show(position)
}
*/
}
fun requestDestroyAd() {
// Remove the banner ad.
banner?.destroy()
}
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizBanner;
import com.hive.adiz.common.AdRevenueData;
import com.hive.adiz.common.BannerSize;
import com.hive.adiz.common.PositionType;
public class BannerExample extends Activity {
// Set the banner size.
BannerSize bannerSize = BannerSize.NORMAL;
AdizBanner banner = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
// requestInitAd(this, null);
}
AdizListener adizListener = new AdizListener() {
@Override
public void onLoad() {
// requestShowAd();
}
@Override
public void onFail(@NonNull AdizError loadError) {
int code = loadError.getCode(); // error code
String message = loadError.getMessage(); // error message
}
@Override
public void onShow() {
}
@Override
public void onClick() {
//
}
@Override
public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
double revenue = adRevenueData.getRevenue(); // revenue when ad is exposed
String currency = adRevenueData.getCurrency(); // currency code for revenue when ad is exposed
}
};
public void requestInitAd(Activity activity, String hiveAdKey) {
if(TextUtils.isEmpty(hiveAdKey)) {
// Create a banner ad instance.
banner = AdizBanner.initialize(activity, bannerSize, adizListener);
} else {
// You can create a banner ad instance by entering the hiveAdKey.
banner = AdizBanner.initialize(activity, hiveAdKey, bannerSize, adizListener);
}
// requestLoadAd();
}
public void requestInitAdWithPlacementId(Activity activity, String placementId) {
if(TextUtils.isEmpty(placementId)) {
// Create a banner ad instance.
banner = AdizBanner.initialize(activity, bannerSize, adizListener);
} else {
// You can create a banner ad instance by entering the placementId.
banner = AdizBanner.initializeWithPlacementId(activity, placementId, bannerSize, adizListener);
}
// requestLoadAd();
}
private void requestLoadAd() {
// Load the banner ad.
if(banner != null && banner.isInitialized()) banner.load();
}
private void requestShowAd() {
// Expose the banner ad.
if(banner != null && banner.isLoaded()) banner.show();
// Set banner position
// PositionType position = PositionType.TOP;
// if(banner != null) banner.show(position);
}
private void requestDestroyAd() {
// Remove the banner ad.
if(banner != null) banner.destroy();
}
}
네이티브 광고 (Native)¶
특정 크기의 Native 템플릿을 노출하는 네이티브 광고입니다. 네이티브 광고는 세로 화면에 최적화되어 있으므로 세로형 게임(세로 화면 게임)에서 사용하는 것을 권장합니다. 네이티브 광고는 onClose()
콜백을 전달받지 않습니다. 따라서, 다른 위치에서 destroy()
를 호출하여 광고를 종료해야 합니다.
현재 템플릿은 small
또는 medium
사이즈를 지원합니다.
템플릿 | 정렬 | BannerSize 상수 |
---|---|---|
small 사이즈 | Top / Bottom | BannerSize.NORMAL |
medium 사이즈 | Center (고정) | BannerSize.MEDIUM |
small
템플릿에서 PositionType
은 최상단 혹은 최하단이며 기본값은 최하단입니다.
정렬 | 설명 | PositionType 상수 |
---|---|---|
최상단 정렬 | 화면 최상단 정렬 지정 | PositionType.TOP |
최하단 정렬 (기본값) | 화면 최하단 정렬 지정 | PositionType.BOTTOM |
medium
템플릿은 정렬을 선택할 수 없으며, 기본적으로 중앙 정렬을 사용합니다.
import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizNative
import com.hive.adiz.common.AdRevenueData
import com.hive.adiz.common.BannerSize
class NativeAdExampleKT : Activity() {
var nativeAd: AdizNative? = null
// Set the banner size.
var bannerSize = BannerSize.NORMAL
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
// requestInitAd(this)
}
val adizListener = object : AdizListener() {
override fun onLoad() {
// requestShowAd()
}
override fun onFail(loadError: AdizError) {
var code = loadError.getCode() // Error code
var message = loadError.getMessage() // Error message
}
override fun onShow() {
//
}
override fun onClick() {
//
}
override fun onPaidEvent(adRevenueData: AdRevenueData) {
var revenue = adRevenueData.revenue // Revenue when ad is shown
var currency = adRevenueData.currency // Currency code for revenue when ad is shown
}
}
fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {
if(hiveAdKey.isNullOrEmpty()) {
// Create a native ad instance.
nativeAd = AdizNative.initialize(activity, bannerSize, adizListener)
} else {
// You can create a native ad instance by entering the hiveAdKey.
nativeAd = AdizNative.initialize(activity, hiveAdKey, bannerSize, adizListener)
}
// requestLoadAd()
}
fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {
if(placementId.isNullOrEmpty()) {
// Create a native ad instance.
nativeAd = AdizNative.initialize(activity, bannerSize, adizListener)
} else {
// You can create a native ad instance by entering the placementId.
nativeAd = AdizNative.initializeWithPlacementId(activity, placementId, bannerSize, adizListener)
}
// requestLoadAd()
}
fun requestLoadAd() {
// Load the native ad.
nativeAd?.let {
if(it.isInitialized()) it.load()
}
}
fun requestShowAd() {
// Expose the native ad.
nativeAd?.let {
if(it.isLoaded()) it.show()
}
// Set banner position
/*
var position = PositionType.TOP
nativeAd?.let {
if(it.isLoaded()) it.show(position)
}
*/
}
fun requestDestroyAd() {
// Remove the native ad.
nativeAd?.destroy()
}
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizNative;
import com.hive.adiz.common.AdRevenueData;
import com.hive.adiz.common.BannerSize;
import com.hive.adiz.common.PositionType;
public class NativeAdExample extends Activity {
// Set the banner size.
BannerSize bannerSize = BannerSize.NORMAL;
AdizNative nativeAd = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
// requestInitAd(this, null);
}
AdizListener adizListener = new AdizListener() {
@Override
public void onLoad() {
// requestShowAd();
}
@Override
public void onFail(@NonNull AdizError loadError) {
int code = loadError.getCode(); // Error code
String message = loadError.getMessage(); // Error message
}
@Override
public void onShow() {
}
@Override
public void onClick() {
//
}
@Override
public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
double revenue = adRevenueData.getRevenue(); // Revenue when ad is shown
String currency = adRevenueData.getCurrency(); // Currency code for revenue when ad is shown
}
};
public void requestInitAd(Activity activity, String hiveAdKey) {
if(TextUtils.isEmpty(hiveAdKey)) {
// Create a native ad instance. (If no HiveAdKey is entered, the instance is created with the default key set to is_default=true, which was received during the initialization of Hive Adiz.)
nativeAd = AdizNative.initialize(activity, bannerSize, adizListener);
} else {
// You can create a native ad instance by entering the hiveAdKey.
nativeAd = AdizNative.initialize(activity, hiveAdKey, bannerSize, adizListener);
}
// requestLoadAd();
}
public void requestInitAdWithPlacementId(Activity activity, String placementId) {
if(TextUtils.isEmpty(placementId)) {
// Create a native ad instance. (If no HiveAdKey is entered, the instance is created with the default key set to is_default=true, which was received during the initialization of Hive Adiz.)
nativeAd = AdizNative.initialize(activity, bannerSize, adizListener);
} else {
// You can create a native ad instance by entering the placementId.
nativeAd = AdizNative.initializeWithPlacementId(activity, placementId, bannerSize, adizListener);
}
// requestLoadAd();
}
private void requestLoadAd() {
// Load the native ad.
if(nativeAd != null && nativeAd.isInitialized()) nativeAd.load();
}
private void requestShowAd() {
// Display the native ad.
if(nativeAd != null && nativeAd.isLoaded()) nativeAd.show();
// Set banner position
// PositionType position = PositionType.TOP;
// if(nativeAd != null && nativeAd.isLoaded()) nativeAd.show(position);
}
private void requestDestroyAd() {
// Remove the native ad.
if(nativeAd != null) nativeAd.destroy();
}
}
보상형 광고 (Rewarded)¶
유저가 광고를 일정 시간 이상 시청 시 리워드를 받는 보상형 광고입니다. 리워드 지급을 완료하면 onRewarded()
콜백으로 보상 아이템 정보를 받습니다.
import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizRewarded
import com.hive.adiz.common.AdRevenueData
class RewardedExample : Activity() {
var rewardedAd: AdizRewarded? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
// requestInitAd(this)
}
val adizListener = object : AdizListener() {
override fun onLoad() {
// requestShowAd()
}
override fun onFail(loadError: AdizError) {
var code = loadError.getCode() // Error code
var message = loadError.getMessage() // Error message
}
override fun onShow() {
//
}
override fun onClick() {
//
}
override fun onPaidEvent(adRevenueData: AdRevenueData) {
var revenue = adRevenueData.revenue // Revenue when ad is shown
var currency = adRevenueData.currency // Currency code for revenue when ad is shown
}
override fun onClose() {
// requestDestroyAd()
}
override fun onRewarded(rewardItem: RewardItem) {
var itemType = rewardItem.itemType // Reward item type
var itemAmount = rewardItem.itemAmount // Reward item quantity
}
}
fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {
if(hiveAdKey.isNullOrEmpty()) {
// Create a rewarded ad instance.
rewardedAd = AdizRewarded.initialize(activity, adizListener)
} else {
// You can create a rewarded ad instance by entering the hiveAdKey.
rewardedAd = AdizRewarded.initialize(activity, hiveAdKey, adizListener)
}
// requestLoadAd()
}
fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {
if(placementId.isNullOrEmpty()) {
// Create a rewarded ad instance.
rewardedAd = AdizRewarded.initialize(activity, adizListener)
} else {
// You can create a rewarded ad instance by entering the placementId.
rewardedAd = AdizRewarded.initializeWithPlacementId(activity, placementId, adizListener)
}
// requestLoadAd()
}
fun requestLoadAd() {
// Load the rewarded ad.
rewardedAd?.let {
if(it.isInitialized()) it.load()
}
}
fun requestShowAd() {
// Display the rewarded ad.
rewardedAd?.let {
if(it.isLoaded()) it.show()
}
}
fun requestDestroyAd() {
// Remove the rewarded ad.
rewardedAd?.destroy()
}
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizRewarded;
import com.hive.adiz.common.AdRevenueData;
public class RewardedExample extends Activity {
AdizRewarded rewardedAd = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
// requestInitAd(this, null);
}
AdizListener adizListener = new AdizListener() {
@Override
public void onLoad() {
// requestShowAd();
}
@Override
public void onFail(@NonNull AdizError loadError) {
int code = loadError.getCode(); // Error code
String message = loadError.getMessage(); // Error message
}
@Override
public void onShow() {
//
}
@Override
public void onClick() {
//
}
@Override
public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
double revenue = adRevenueData.getRevenue(); // Revenue when ad is shown
String currency = adRevenueData.getCurrency(); // Currency code for revenue when ad is shown
}
@Override
public void onClose() {
// requestDestroyAd();
}
@Override
public void onRewarded(@NonNull RewardItem rewardItem) {
String rewardType = rewardItem.getItemType(); // Reward item type
int rewardAmount = rewardItem.getItemAmount(); // Reward item quantity
}
};
public void requestInitAd(Activity activity, String hiveAdKey) {
if(TextUtils.isEmpty(hiveAdKey)) {
// Create a rewarded ad instance. (If no HiveAdKey is entered, the instance is created with the default key (is_default=true), which was received during the initialization of Hive Adiz.)
rewardedAd = AdizRewarded.initialize(activity, adizListener);
} else {
// You can create a rewarded ad instance by entering the hiveAdKey.
rewardedAd = AdizRewarded.initialize(activity, hiveAdKey, adizListener);
}
// requestLoadAd();
}
public void requestInitAdWithPlacementId(Activity activity, String placementId) {
if(TextUtils.isEmpty(placementId)) {
// Create a rewarded ad instance. (If no HiveAdKey is entered, the instance is created with the default key (is_default=true), which was received during the initialization of Hive Adiz.)
rewardedAd = AdizRewarded.initialize(activity, adizListener);
} else {
// You can create a rewarded ad instance by entering the placementId.
rewardedAd = AdizRewarded.initializeWithPlacementId(activity, placementId, adizListener);
}
// requestLoadAd();
}
private void requestLoadAd() {
// Load the rewarded ad.
if(rewardedAd != null && rewardedAd.isInitialized()) rewardedAd.load();
}
private void requestShowAd() {
// Display the rewarded ad.
if(rewardedAd != null && rewardedAd.isLoaded()) rewardedAd.show();
}
private void requestDestroyAd() {
// Remove the rewarded ad.
if(rewardedAd != null) rewardedAd.destroy();
}
}
보상형 전면 광고 (Rewarded Interstitial)¶
유저가 광고를 일정 시간 이상 시청 시 리워드를 받는 보상형 전면 광고입니다. 리워드 지급을 완료하면 onRewarded()
콜백으로 보상 아이템 정보를 받습니다.
import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizRewardedInterstitial
import com.hive.adiz.common.AdRevenueData
import com.hive.adiz.rewarded.RewardItem
class RewardedInterstitialExample : Activity() {
var rewardedInterstitialAd: AdizRewardedInterstitial? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
// requestInitAd(this)
}
val adizListener = object : AdizListener() {
override fun onLoad() {
// requestShowAd()
}
override fun onFail(loadError: AdizError) {
var code = loadError.getCode() // Error code
var message = loadError.getMessage() // Error message
}
override fun onShow() {
//
}
override fun onClick() {
//
}
override fun onPaidEvent(adRevenueData: AdRevenueData) {
var revenue = adRevenueData.revenue // Revenue generated when ad is shown
var currency = adRevenueData.currency // Currency code for revenue when ad is shown
}
override fun onClose() {
// requestDestroyAd()
}
override fun onRewarded(rewardItem: RewardItem) {
var itemType = rewardItem.itemType // Reward item type
var itemAmount = rewardItem.itemAmount // Reward item quantity
}
}
fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {
if(hiveAdKey.isNullOrEmpty()) {
// Creates an instance of rewarded interstitial ad.
rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, adizListener)
} else {
// You can create an instance of rewarded interstitial ad by entering the hiveAdKey.
rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, hiveAdKey, adizListener)
}
// requestLoadAd()
}
fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {
if(placementId.isNullOrEmpty()) {
// Creates an instance of rewarded interstitial ad.
rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, adizListener)
} else {
// You can create an instance of rewarded interstitial ad by entering the placementId.
rewardedInterstitialAd = AdizRewardedInterstitial.initializeWithPlacementId(activity, placementId, adizListener)
}
// requestLoadAd()
}
fun requestLoadAd() {
// Loads the rewarded interstitial ad.
rewardedInterstitialAd?.let {
if(it.isInitialized()) it.load()
}
}
fun requestShowAd() {
// Displays the rewarded interstitial ad.
rewardedInterstitialAd?.let {
if(it.isLoaded()) it.show()
}
}
fun requestDestroyAd() {
// Removes the rewarded interstitial ad.
rewardedInterstitialAd?.destroy()
}
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizRewardedInterstitial;
import com.hive.adiz.common.AdRevenueData;
import com.hive.adiz.rewarded.RewardItem;
public class RewardedInterstitialExample extends Activity {
AdizRewardedInterstitial rewardedInterstitialAd = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
// requestInitAd(this, null);
}
AdizListener adizListener = new AdizListener() {
@Override
public void onLoad() {
// requestShowAd();
}
@Override
public void onFail(@NonNull AdizError loadError) {
int code = loadError.getCode(); // Error code
String message = loadError.getMessage(); // Error message
}
@Override
public void onShow() {
//
}
@Override
public void onClick() {
//
}
@Override
public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
double revenue = adRevenueData.getRevenue(); // Revenue generated when ad is shown
String currency = adRevenueData.getCurrency(); // Currency code for when ad is shown
}
@Override
public void onClose() {
// requestDestroyAd();
}
@Override
public void onRewarded(@NonNull RewardItem rewardItem) {
String rewardType = rewardItem.getItemType(); // Reward item type
int rewardAmount = rewardItem.getItemAmount(); // Reward item quantity
}
};
public void requestInitAd(Activity activity, String hiveAdKey) {
if(TextUtils.isEmpty(hiveAdKey)) {
// Creates an instance of rewarded interstitial ad (If the ad key (HiveAdKey) is not entered, the instance will be created with the default key (is_default=true) during Hive Adiz initialization.)
rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, adizListener);
} else {
// You can create an instance of rewarded interstitial ad by entering the hiveAdKey.
rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, hiveAdKey, adizListener);
}
// requestLoadAd();
}
public void requestInitAdWithPlacementId(Activity activity, String placementId) {
if(TextUtils.isEmpty(placementId)) {
// Creates an instance of rewarded interstitial ad (If the ad key (HiveAdKey) is not entered, the instance will be created with the default key (is_default=true) during Hive Adiz initialization.)
rewardedInterstitialAd = AdizRewardedInterstitial.initialize(activity, adizListener);
} else {
// You can create an instance of rewarded interstitial ad by entering the placementId.
rewardedInterstitialAd = AdizRewardedInterstitial.initializeWithPlacementId(activity, placementId, adizListener);
}
// requestLoadAd();
}
private void requestLoadAd() {
// Loads the rewarded interstitial ad.
if(rewardedInterstitialAd != null && rewardedInterstitialAd.isInitialized()) rewardedInterstitialAd.load();
}
private void requestShowAd() {
// Displays the rewarded interstitial ad.
if(rewardedInterstitialAd != null && rewardedInterstitialAd.isLoaded()) rewardedInterstitialAd.show();
}
private void requestDestroyAd() {
// Removes the rewarded interstitial ad.
if(rewardedInterstitialAd != null) rewardedInterstitialAd.destroy();
}
}
앱 오프닝 광고 (AppOpen)¶
앱 상태가 백그라운드에서 포그라운드로 변경될 때 미리 로드해놨던(load()
) 광고를 노출하는 앱 오프닝 광고입니다. 광고 로드 후 3시간이 경과한 후에 show()
를 호출하면, 광고를 자동으로 다시 로드한 후에 광고를 노출합니다. 일단 광고를 한 번이라도 노출한 후에는 광고는 자동으로 로드되지 않습니다.
import android.app.Activity
import android.os.Bundle
import com.hive.adiz.AdizError
import com.hive.adiz.AdizListener
import com.hive.adiz.base.AdizAppOpen
import com.hive.adiz.common.AdRevenueData
class AppOpenExample : Activity() {
var appOpen: AdizAppOpen? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
// requestInitAd(this)
}
val adizListener = object : AdizListener() {
override fun onLoad() {
//
}
override fun onFail(loadError: AdizError) {
var code = loadError.getCode() // Error code
var message = loadError.getMessage() // Error message
}
override fun onShow() {
//
}
override fun onClick() {
//
}
override fun onPaidEvent(adRevenueData: AdRevenueData) {
var revenue = adRevenueData.revenue // Revenue when ad is shown
var currency = adRevenueData.currency // Currency code for revenue when ad is shown
}
override fun onClose() {
// requestDestroyAd()
}
}
fun requestInitAd(activity: Activity, hiveAdKey: String? = null) {
if(hiveAdKey.isNullOrEmpty()) {
// Creates an app opening ad instance.
appOpen = AdizAppOpen.initialize(activity, adizListener)
} else {
// You can create an app opening ad instance by entering the hiveAdKey.
appOpen = AdizAppOpen.initialize(activity, hiveAdKey, adizListener)
}
// requestLoadAd()
}
fun requestInitAdWithPlacementId(activity: Activity, placementId: String? = null) {
if(placementId.isNullOrEmpty()) {
// Creates an app opening ad instance.
appOpen = AdizAppOpen.initialize(activity, adizListener)
} else {
// You can create an app opening ad instance by entering the placementId.
appOpen = AdizAppOpen.initializeWithPlacementId(activity, placementId, adizListener)
}
// requestLoadAd()
}
fun requestLoadAd() {
// Loads the app opening ad. After loading is complete, the ad will be automatically displayed when the app moves from background to foreground.
// Once the ad is displayed at least once, it will not be re-displayed, so if you want to continue displaying ads, you need to call appOpen.load() again in the onClose() callback.
appOpen?.let {
if(it.isInitialized()) it.load()
}
}
fun requestDestroyAd() {
// Removes the app opening ad.
appOpen?.destroy()
}
}
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.hive.adiz.AdizError;
import com.hive.adiz.AdizListener;
import com.hive.adiz.base.AdizAppOpen;
import com.hive.adiz.common.AdRevenueData;
public class AppOpenExample extends Activity {
AdizAppOpen appOpen = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
// requestInitAd(this, null);
}
AdizListener adizListener = new AdizListener() {
@Override
public void onLoad() {
//
}
@Override
public void onFail(@NonNull AdizError loadError) {
int code = loadError.getCode(); // Error code
String message = loadError.getMessage(); // Error message
}
@Override
public void onShow() {
//
}
@Override
public void onClick() {
//
}
@Override
public void onPaidEvent(@NonNull AdRevenueData adRevenueData) {
double revenue = adRevenueData.getRevenue(); // Revenue when ad is shown
String currency = adRevenueData.getCurrency(); // Currency code for revenue when ad is shown
}
@Override
public void onClose() {
// requestDestroyAd();
}
};
public void requestInitAd(Activity activity, String hiveAdKey) {
if(TextUtils.isEmpty(hiveAdKey)) {
// Creates an app opening ad instance. (If the ad key (HiveAdKey) is not entered, the instance will be created with the default key (is_default=true) during Hive Adiz initialization.)
appOpen = AdizAppOpen.initialize(activity, adizListener);
} else {
// You can create an app opening ad instance by entering the hiveAdKey.
appOpen = AdizAppOpen.initialize(activity, hiveAdKey, adizListener);
}
// requestLoadAd();
}
public void requestInitAdWithPlacementId(Activity activity, String placementId) {
if(TextUtils.isEmpty(placementId)) {
// Creates an app opening ad instance. (If the ad key (HiveAdKey) is not entered, the instance will be created with the default key (is_default=true) during Hive Adiz initialization.)
appOpen = AdizAppOpen.initialize(activity, adizListener);
} else {
// You can create an app opening ad instance by entering the placementId.
appOpen = AdizAppOpen.initializeWithPlacementId(activity, placementId, adizListener);
}
// requestLoadAd();
}
private void requestLoadAd() {
// Loads the app opening ad.
if(appOpen != null && appOpen.isInitialized()) appOpen.load();
}
private void requestDestroyAd() {
// Removes the app opening ad.
if(appOpen != null) appOpen.destroy();
}
}