Android Getting Started - adxcorp/ADXLibrary_Integration GitHub Wiki
Getting started with ADXLibrary
๊ฐ์ ์ ์ํ์๋ฉด [email protected]๋ก ์ฐ๋ฝ ๋ถํ ๋๋ฆฝ๋๋ค.
0. Latest ADXLibrary
Version : 1.17.0
Release Date : 2021/06/18
1. build.gradle ์ถ๊ฐ
repositories {
// ... other project repositories
jcenter()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.google.com' }
}
// ...
dependencies {
// ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด๋ฅผ ํฌํจํ ๊ฒฝ์ฐ(์ถ๊ฐ ์ [email protected]๋ก ๋
ธํฐ ํ์)
implementation 'com.github.adxcorp.ADXLibrary_Android:adx-library:1.17.0'
// ๋ค์ดํฐ๋ธ๋ง ํฌํจํ ๊ฒฝ์ฐ
implementation 'com.github.adxcorp.ADXLibrary_Android:adx-library-native:1.17.0'
// ์ ๋ฉด/๋ฐฐ๋๋ง ํฌํจํ ๊ฒฝ์ฐ
implementation 'com.github.adxcorp.ADXLibrary_Android:adx-library-standard:1.17.0'
// ๋ฆฌ์๋ ๋น๋์ค๋ง ํฌํจํ ๊ฒฝ์ฐ
implementation 'com.github.adxcorp.ADXLibrary_Android:adx-library-rewarded-video:1.17.0'
// ์๋ฅผ ๋ค์ด ์ ๋ฉด/๋ฐฐ๋/๋ค์ดํฐ๋ธ๋ฅผ ํฌํจํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ์ถ๊ฐํ์๋ฉด ๋ฉ๋๋ค.
implementation 'com.github.adxcorp.ADXLibrary_Android:adx-library-standard:1.17.0'
implementation 'com.github.adxcorp.ADXLibrary_Android:adx-library-native:1.17.0'
// Google Play Service Ads 20.1.0 ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค.
implementation 'com.google.android.gms:play-services-ads:20.1.0'
}
android {
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
2. Initialize
MainActivity onCreate์์ ๊ด๊ณ ๊ด๋ จ ์ฝ๋๋ฅผ ํธ์ถํ๊ธฐ ์ , ์๋์ ๊ฐ์ด ์ถ๊ฐํฉ๋๋ค. ๋ฐ๊ธ๋ฐ์ผ์ Ad Unit ID ์ค ํ๋๋ง ์ฌ์ฉํ์ฌ initialize ํด์ฃผ์๊ณ , onResult๊ฐ ํธ์ถ ๋ ๋ค์ ๊ด๊ณ ๊ด๋ จ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์ธ์. initialize function์ ํ ๋ฒ๋ง ํธ์ถํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
EU ํธ๋ํฝ์ด ์์ผ์ ๊ฒฝ์ฐ์๋ initWithSaveGDPRState๋ฅผ ์ด์ฉํ์ฌ ADXConsentStateNotRequired๋ก ๋์ ์ฌ๋ถ๋ฅผ ์ ๋ฐ์ดํธ ํด์ฃผ์๋ฉด ๋๋ฉฐ, initWithShowAdxConsent์ isDebug๋ฅผ true๋ก ์ค์ ํ์๋ฉด EU ๋ด์์ ๋ ธ์ถ๋๋ Consent UI๋ฅผ ํ์ธํ์ค์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ํ๋จ์ GDPR ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฃผ์๋ฉด ๋ฉ๋๋ค.
- ์ฌ์ฉ์์ ์์น ๋ฐ ๋์ ์ฌ๋ถ๋ฅผ ํ์ธํ์ฌ ๋์ UI ๋ ธ์ถ์ด ํ์ํ ๊ฒฝ์ฐ
ADXGDPR.initWithShowAdxConsent(activity, "<YOUR AD Unit ID>", isDebug, new ADXGDPR.ADXConsentListener() {
@Override
public void onResult(ADXGDPR.ADXConsentState adxConsentState) {
}
});
- ์ง์ ๋์ ์ฌ๋ถ๋ฅผ ์ค์ ํ์๋ ๊ฒฝ์ฐ (๋์ UI ๋ ธ์ถ๋์ง ์์)
ADXGDPR.initWithSaveGDPRState(activity, "<YOUR AD Unit ID>", adxConsentState, new ADXGDPR.ADXConsentListener() {
@Override
public void onResult(ADXGDPR.ADXConsentState adxConsentState) {
}
});
- Native Ad์ ๊ด๋ จ๋ function์ initialize function๊ณผ ๋์ผํ activity์์ ํธ์ถํ์๋ ๊ฒฝ์ฐ
initWithShowAdxConsent ๋๋ initWithSaveGDPRState์ ๊ฐ์ initialize function์ ํธ์ถํ์๊ธฐ ์ , NativeAdFactory.init()๊ณผ NativeAdFactory.setViewBinder()๋ฅผ ๋จผ์ ํธ์ถํด์ฃผ์๊ณ , ์๋ ์์ ์ฝ๋์ ๊ฐ์ด ADXConsentListener์ onResult ๋ด์์ NativeAdFactory.preloadAd()๋ฅผ ํธ์ถํด์ฃผ์ ์ผ ํฉ๋๋ค.
NativeAdFactory.init(context);
NativeAdFactory.setViewBinder(DefineAdUnitId.NATIVE_AD_UNIT_ID, new ViewBinder.Builder(R.layout.layout_native_ad)
.mainImageId(R.id.mainImageId)
.iconImageId(R.id.iconImageId)
.titleId(R.id.titleId)
.privacyInformationIconImageId(R.id.privacyInformationIconImageId)
.callToActionId(R.id.callToActionId)
.addExtra("ad_choices_container", R.id.ad_choices_container)
.build());
NativeAdFactory.setAdxViewBinder(DefineAdUnitId.NATIVE_AD_UNIT_ID, new ADXViewBinder.Builder(R.layout.layout_media_native_ad)
.mediaViewContainerId(R.id.mediaContainerId)
.adIconViewContainerId(R.id.adIconContainerId)
.titleId(R.id.titleId)
.adChoiceContainerId(R.id.adChoicesContainerId)
.callToActionId(R.id.callToActionId)
.build());
ADXGDPR.initWithShowAdxConsent(this, DefineAdUnitId.BANNER_AD_UNIT_ID, true, new ADXGDPR.ADXConsentListener() {
@Override
public void onResult(ADXGDPR.ADXConsentState adxConsentState) {
NativeAdFactory.preloadAd(DefineAdUnitId.NATIVE_AD_UNIT_ID);
}
});
3.Rewarded Video ์ฐ๋ ์ ํ
MoPub/AdMob ์ฐ๋ ์ฝ๋๋ฅผ ํจ๊ป ์ฌ์ฉํ์๋ฉด ์ ์์ ์ผ๋ก callback ํธ์ถ์ด ๋์ง ์์ ์ ์์ผ๋ฏ๋ก, ๋ฐ๋์ ํ๋์ ์ฐ๋ ์ฝ๋๋ง ์ฌ์ฉํด์ฃผ์ ์ผ ํฉ๋๋ค.
4. Add test device
AdMob Rewarded Video๋ฅผ ์ด์ฉํ์ค ๊ฒฝ์ฐ ๊ฐ๋ฐ์ค ๋ฐ๋์ ์๋ ๋ด์ฉ์ ์ฐธ๊ณ ํ์ฌ ํ ์คํธ ๋๋ฐ์ด์ค๋ฅผ ๋ฑ๋ก ํ ์ฌ์ฉํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ํ ์คํธ ๋๋ฐ์ด์ค ๋ฏธ๋ฑ๋ก ์ํ๋ก ํ ์คํธํ ๊ฒฝ์ฐ ๊ณ์ ์ด ์ ์ง๋ ์ ์์ต๋๋ค.
AdMob์ ์ด์ฉํ์ฌ Rewarded Video๋ฅผ ๋ก๋ํ๋ ์ฝ๋๊ฐ ์ฝ์ ๋ ์ํ๋ก run ํด์ฃผ์๋ฉด ์๋์ ๊ฐ์ ๋ก๊ทธ๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค.
Ads: Use RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("9E928D273E90AF6642DB99539DB71311")
to get test ads on this device.
์ถ๋ ฅ ๋ Device ID๋ฅผ ๋ณต์ฌํ์ฌ ์๋์ ๊ฐ์ด AdRequest์์ AddTestDevice๋ฅผ call ํ๋๋ก ์์ ํด์ฃผ์ธ์.
RequestConfiguration configuration = new RequestConfiguration.Builder()
.setTestDeviceIds(Arrays.asList("9E928D273E90AF6642DB99539DB71311")).build();
MobileAds.setRequestConfiguration(configuration);
5. ๋๋ฒ๊น ๋ก๊ทธ ํ์ฑํ
๋ฏธ๋์์ด์ ์ด ์ ์ ๋์ ํ์ธ์ ์ํด Initialize ํ๊ธฐ ์ ์ ์๋์ ๊ฐ์ด ์ถ๊ฐํด์ผ ํฉ๋๋ค.
ADXLogUtil.setLogEnable(true);
* GDPR Guide
- GDPR ๊ท์ ์ ์ค์ํ๊ธฐ ์ํด ADXGDPR class ์์ ์ ๊ณตํ๊ณ ์๋ ์๋์ ๊ฐ์ function์ ์ฌ์ฉํ์ค์ ์์ต๋๋ค.
// ADXLibrary๋ฅผ ์ด๊ธฐํ ํ๊ณ , GDPR ๊ท์ ์ ์ค์ํ๊ธฐ ์ํ์ฌ ๊ธฐ์กด ๋์ ์ฌ๋ถ์ EU ์ฌ์ฉ์ ์ฌ๋ถ๋ฅผ ํ์ธํ์ฌ ๊ฐ์ธ์ ๋ณด ์์ง ๋ฐ ์ด์ฉ์ ๋ํ ๋์ ํ๋ฉด์ ๋
ธ์ถํ์ฌ ๋์ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
public static void initWithShowAdxConsent(final Activity activity, String mopubAdUnitId, final boolean isDebug, final ADXConsentListener gdprListener)
// ADXLibrary๋ฅผ ์ด๊ธฐํ ํ๊ณ , ๋์ ํ๋ฉด ๋
ธ์ถ ์์ด ์ง์ ๋์ ์ฌ๋ถ๋ฅผ ์ค์ ํฉ๋๋ค.
public static void initWithSaveGDPRState(final Context context, final String mopubAdUnitId, final ADXConsentState consentState, final ADXConsentListener gdprListener)
// ADXGDPR์ ์ค์ ๋ ์ฌ์ฉ์์ ๋์ ์ ๋ณด๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค.
public static int getResultGDPR(Context context)
// ์ง์ ๋์ ์ฌ๋ถ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
public static void saveResultGDPR(Context context, ADXGDPR.ADXConsentState consentState)
// AD(x)์ Privacy Policy URL์ ์์ฒญํ ์ ์์ต๋๋ค.
public static String getPrivacyURL()
- ADXConsentState๋ ์๋์ ๊ฐ์ 4๊ฐ์ง ์ํ๊ฐ ์กด์ฌํฉ๋๋ค.
// ๋์์ฌ๋ถ๊ฐ ์กด์ฌํ์ง ์๋ ์ฌ์ฉ์๋ก, initialize function ๋ฏธํธ์ถ ์ํ์
๋๋ค. ๊ฐ์ธํ ๊ด๊ณ ๊ฐ ๋
ธ์ถ๋์ง ์์ต๋๋ค.
ADXConsentStateUnknown
// EU๋ด์ ์ฌ์ฉ์๊ฐ ์๋๋ฏ๋ก ๋์์ฌ๋ถ๊ฐ ๋ถํ์ํ ์ฌ์ฉ์์
๋๋ค. ๊ฐ์ธํ ๊ด๊ณ ๊ฐ ๋
ธ์ถ๋ฉ๋๋ค.
ADXConsentStateNotRequired
// ๊ฐ์ธ์ ๋ณด ํ์ฉ ๋์ ํ๋ฉด์์ ๊ฑฐ์ ์ ์ ํํ ์ฌ์ฉ์์
๋๋ค. ๊ฐ์ธํ ๊ด๊ณ ๊ฐ ๋
ธ์ถ๋์ง ์์ต๋๋ค.
ADXConsentStateDenied
// ๊ฐ์ธ์ ๋ณด ํ์ฉ ๋์ ํ๋ฉด์์ ์น์ธ์ ์ ํํ ์ฌ์ฉ์์
๋๋ค. ๊ฐ์ธํ ๊ด๊ณ ๊ฐ ๋
ธ์ถ๋ฉ๋๋ค.
ADXConsentStateConfirm
- Application ์คํ์ ์ํ์๋ ๋ฐฉ์์ ๋ง์ถฐ initWithShowAdxConsent ๋๋ initWithSaveGDPRState๋ฅผ ํธ์ถํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
- EU ํธ๋ํฝ์ด ์์ผ์ ๊ฒฝ์ฐ์๋ initWithSaveGDPRState๋ฅผ ์ด์ฉํ์ฌ ADXConsentStateNotRequired๋ก ๋์ ์ฌ๋ถ๋ฅผ ์ ๋ฐ์ดํธ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
- initWithShowAdxConsent์ isDebug๋ฅผ true๋ก ์ค์ ํ์๋ฉด EU ๋ด์์ ๋ ธ์ถ๋๋ Consent UI๋ฅผ ํ์ธํ์ค์ ์์ต๋๋ค.
- ๊ด๊ณ ๊ด๋ จ ์ฝ๋๋ ADXConsentListener์ onResult๊ฐ ํธ์ถ๋ ํ ์ฌ์ฉํ์ฌ ์ฃผ์ธ์.
- NativeAdFactory์ init()๊ณผ setViewBinder()๊ฐ initialize function๊ณผ ๋์ผํ activity์์ ํธ์ถ๋ ๊ฒฝ์ฐ, initialize function ๋ณด๋ค ๋จผ์ ํธ์ถํด์ฃผ์ธ์.
- initialize function์ AD Unit ID๋ ๋ฐ๊ธ๋ฐ์ผ์ ๊ฒ๋ค ์ค ์์์ ๊ฒ์ ํ๋ ์ฌ์ฉํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
- AdMob Rewarded Video๋ฅผ ์ฌ์ฉํ์ค ๊ฒฝ์ฐ AdRequest์ ๋ค์๊ณผ ๊ฐ์ด extra data๋ฅผ ์ถ๊ฐํด์ฃผ์ ์ผ ํฉ๋๋ค.
Bundle extras = new Bundle();
if (ADXGDPR.ADXConsentState.values()[ADXGDPR.getResultGDPR(this)] == ADXGDPR.ADXConsentState.ADXConsentStateDenied) {
extras.putString("npa", "1");
}
AdRequest request = new AdRequest.Builder()
.addNetworkExtrasBundle(AdMobAdapter.class, extras)
.build();