๋งค๋์ ๋ก๋ถํฐ ๋ค์์ ๋ฐ๊ธ ๋ฐ์ผ์ธ์.
- AppLovin SDK key
- AppLovin MAX ad unit ID (์ฑ์ ๊ด๊ณ ํ์๋ง๋ค ๊ณ ์ ํ ๊ฐ)
- AdMob app ID (์ฑ๋ง๋ค ๊ณ ์ ํ ๊ฐ)
- PointBerry inventory ID (์ฑ์ ๊ด๊ณ ๋จ์๋ง๋ค ๊ณ ์ ํ ๊ฐ)
AppLovin MAX SDK์ AdMob ์ด๋ํฐ, Unity Ads ์ด๋ํฐ, Android Advertising ID, PointBerry Event Tracker๋ฅผ ๋ค์ด๋ก๋ํ์ธ์.
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
// AppLovin MAX SDK
implementation 'com.applovin:applovin-sdk:11.3.1'
// Meta SDK
implementation 'com.applovin.mediation:facebook-adapter:6.11.0.2'
implementation 'com.facebook.android:audience-network-sdk:6.11.0'
// Vungle SDK
implementation 'com.applovin.mediation:vungle-adapter:6.11.0.1'
// AdMob-to-MAX adapter
implementation 'com.applovin.mediation:google-adapter:20.6.0.3'
// Unity-Ads-to-MAX adapter
implementation 'com.applovin.mediation:unityads-adapter:4.3.0.0'
// Android Advertising ID (AAID)
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
// PointBerry Event Tracker
implementation 'com.github.connect-n:pointberry-event-tracker-android:1.0.3'
}
๋งค๋์ ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ AppLovin SDK key์ AdMob app ID๋ฅผ ์ถ๊ฐํ์ธ์.
<?xml version="1.0" encoding="utf-8"?>
<manifest โฆ >
<application โฆ >
<meta-data android:name="applovin.sdk.key"
android:value="YOUR_APPLOVIN_SDK_KEY"/>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="YOUR_ADMOB_APP_ID"/>
โฎ
</application>
</manifest>
์ฑ์ด ์์๋ ํ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ SDK๋ฅผ ์ด๊ธฐํํ์ธ์.
public class FirstActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppLovinSdk.getInstance(this).setMediationProvider(AppLovinMediationProvider.MAX);
AppLovinSdk.getInstance(this).initializeSdk(config -> {
// SDK๊ฐ ์ด๊ธฐํ๋์ต๋๋ค.
// ์ด์ ๊ด๊ณ ๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
});
}
}
๊ธฐ๋ณธ ๋ฐฐ๋ ๋์ด๋ฅผ 50dp๋ก ์ค์ ํ์ธ์.
<!-- res/values/attrs.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="banner_height">50dp</dimen>
</resources>
ํ๋ธ๋ฆฟ ๋ฐฐ๋ ๋์ด๋ฅผ 90dp๋ก ์ค์ ํ์ธ์.
<!-- res/values-sw600dp/attrs.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="banner_height">90dp</dimen>
</resources>
๋ ์ด์์ XML์ MaxAdView
๋ฅผ ์ ์ํ์ธ์. ์ด๋ ๋งค๋์ ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ MAX ad unit ID๋ฅผ ์ฌ์ฉํ์ธ์.
<!-- res/layout/activity_banner_ad.xml -->
<com.applovin.mediation.ads.MaxAdView
xmlns:maxads="http://schemas.applovin.com/android/1.0"
maxads:adUnitId="YOUR_MAX_AD_UNIT_ID"
android:background="@color/banner_background_color" <!-- Set background or background color for banners to be fully functional -->
android:layout_width="match_parent" <!-- Stretch to the width of the screen for banners to be fully functional -->
android:layout_height="@dimen/banner_height"
</com.applovin.mediation.ads.MaxAdView>
MaxAdView
์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ธ์.
MaxAdView
์ loadAd()
๋ฅผ ํธ์ถํด์ ๊ด๊ณ ๋ฅผ ๋ก๋ํ์ธ์.
MaxAdViewAdListener
๋ฅผ ๊ตฌํํด์ ๊ด๊ณ ์ด๋ฒคํธ๋ฅผ ์์ ํ์ธ์.
onAdLoaded()
์ฝ๋ฐฑ์์ PointBerryImpressionTracker
์ logImpression()
์ ํธ์ถํด์ ๊ด๊ณ ๋
ธ์ถ์ ๋ก๊น
ํ์ธ์. ์ด๋ ๋งค๋์ ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ PointBerry inventory ID๋ฅผ ์ฌ์ฉํ์ธ์.
public class BannerAdActivity extends Activity implements MaxAdViewAdListener {
private MaxAdView bannerAd;
private PointBerryImpressionTracker impTracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_banner_ad);
bannerAd = findViewById(R.id.banner_ad);
bannerAd.setListener(this);
bannerAd.setPlacement("YOUR_POINTBERRY_INVENTORY_ID");
// ์ฒซ ๊ด๊ณ ๋ฅผ ๋ก๋ํ์ธ์.
bannerAd.loadAd();
impTracker = new PointBerryImpressionTracker(getApplicationContext());
}
@Override
protected void onDestroy() {
super.onDestroy();
bannerAd.destroy();
}
// ๊ด๊ณ ์ด๋ฒคํธ
@Override
public void onAdLoaded(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ๋ก๋๋์ต๋๋ค.
// ๊ด๊ณ ๋
ธ์ถ์ ๋ก๊น
ํ์ธ์.
impTracker.logImpression("YOUR_POINTBERRY_INVENTORY_ID");
// ๊ฐ๋ฐ ํ๊ฒฝ์์๋ development ํ๋ผ๋ฏธํฐ์ true๋ฅผ ์ ๋ฌํด์ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ธ์.
// impTracker.logImpression("YOUR_POINTBERRY_INVENTORY_ID", true);
}
@Override
public void onAdLoadFailed(final String adUnitId, final MaxError error) {
// ๊ด๊ณ ๊ฐ ๋ก๋์ ์คํจํ์ต๋๋ค.
}
@Override
public void onAdClicked(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ํด๋ฆญ๋์ต๋๋ค.
}
@Override
public void onAdExpanded(MaxAd ad) {
}
@Override
public void onAdCollapsed(MaxAd ad) {
}
@Override
public void onAdDisplayed(final MaxAd maxAd) {
// ์ฌ์ฉํ์ง ๋ง์ธ์!
}
@Override
public void onAdDisplayFailed(final MaxAd maxAd, final MaxError error) {
// ์ฌ์ฉํ์ง ๋ง์ธ์!
}
@Override
public void onAdHidden(final MaxAd maxAd) {
// ์ฌ์ฉํ์ง ๋ง์ธ์!
}
}
MaxInterstitialAd
์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ธ์. ์ด๋ ๋งค๋์ ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ MAX ad unit ID๋ฅผ ์ฌ์ฉํ์ธ์.
MaxInterstitialAd
์ loadAd()
๋ฅผ ํธ์ถํด์ ๊ด๊ณ ๋ฅผ ๋ก๋ํ์ธ์.
MaxAdListener
๋ฅผ ๊ตฌํํด์ ๊ด๊ณ ์ด๋ฒคํธ๋ฅผ ์์ ํ์ธ์.
onAdDisplayed()
์ฝ๋ฐฑ์์ PointBerryImpressionTracker
์ logImpression()
์ ํธ์ถํด์ ๊ด๊ณ ๋
ธ์ถ์ ๋ก๊น
ํ์ธ์. ์ด๋ ๋งค๋์ ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ PointBerry inventory ID๋ฅผ ์ฌ์ฉํ์ธ์.
public class InterstitialAdActivity extends Activity implements MaxAdListener {
private MaxInterstitialAd interstitialAd;
private int retryAttempt;
private PointBerryImpressionTracker impTracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
interstitialAd = new MaxInterstitialAd("YOUR_MAX_AD_UNIT_ID", this);
interstitialAd.setListener(this);
// ์ฒซ ๊ด๊ณ ๋ฅผ ๋ก๋ํ์ธ์.
interstitialAd.loadAd();
impTracker = new PointBerryImpressionTracker(getApplicationContext());
}
// ๊ด๊ณ ์ด๋ฒคํธ
@Override
public void onAdLoaded(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ๋ก๋๋๊ณ ์ด์ ๊ฒ์ฌ๋ ์ ์์ต๋๋ค.
// interstitialAd.isReady()๊ฐ true๋ฅผ ๋ฆฌํดํฉ๋๋ค.
// ๋ก๋ ์ฌ์๋ ํ์๋ฅผ ๋ฆฌ์
ํ์ธ์.
retryAttempt = 0;
}
@Override
public void onAdLoadFailed(final String adUnitId, final MaxError error) {
// ๊ด๊ณ ๊ฐ ๋ก๋์ ์คํจํ์ต๋๋ค.
// ๋๋ ์ด๋ฅผ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐ์ํค๋ฉฐ ๊ด๊ณ ๋ก๋๋ฅผ ์ฌ์๋ํ์ธ์.
// ๋๋ ์ด๋ฅผ 1์ด๋ถํฐ 64์ด๊น์ง 2๋ฐฐ์ฉ ์ฆ๊ฐ์ํค๋ ์์์
๋๋ค.
retryAttempt++;
long delayMillis = TimeUnit.SECONDS.toMillis((long) Math.pow(2, Math.min(6, retryAttempt)));
new Handler().postDelayed(() -> interstitialAd.loadAd(), delayMillis);
}
@Override
public void onAdDisplayFailed(final MaxAd maxAd, final MaxError error) {
// ๊ด๊ณ ๊ฐ ๊ฒ์ฌ์ ์คํจํ์ต๋๋ค.
// ๋ค์ ๊ด๊ณ ๋ฅผ ๋ก๋ํ์ธ์.
interstitialAd.loadAd();
}
@Override
public void onAdDisplayed(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ๊ฒ์ฌ๋์ต๋๋ค.
// ๊ด๊ณ ๋
ธ์ถ์ ๋ก๊น
ํ์ธ์.
impTracker.logImpression("YOUR_POINTBERRY_INVENTORY_ID");
// ๊ฐ๋ฐ ํ๊ฒฝ์์๋ development ํ๋ผ๋ฏธํฐ์ true๋ฅผ ์ ๋ฌํด์ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ธ์.
// impTracker.logImpression("YOUR_POINTBERRY_INVENTORY_ID", true);
}
@Override
public void onAdClicked(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ํด๋ฆญ๋์ต๋๋ค.
}
@Override
public void onAdHidden(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ๋ซํ์ต๋๋ค.
// ๋ค์ ๊ด๊ณ ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ์ธ์.
interstitialAd.loadAd();
}
}
MaxInterstitialAd
์ showAd()
๋ฅผ ํธ์ถํด์ ๊ด๊ณ ๋ฅผ ๊ฒ์ฌํ์ธ์. ์ด๋ ๋งค๋์ ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ PointBerry inventory ID๋ฅผ ์ฌ์ฉํ์ธ์.
if (interstitialAd.isReady()) {
interstitialAd.showAd("YOUR_POINTBERRY_INVENTORY_ID");
}
MaxRewaredAd
์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ธ์. ์ด๋ ๋งค๋์ ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ MAX ad unit ID๋ฅผ ์ฌ์ฉํ์ธ์.
MaxRewaredAd
์ loadAd()
๋ฅผ ํธ์ถํด์ ๊ด๊ณ ๋ฅผ ๋ก๋ํ์ธ์.
MaxRewardedAdListener
๋ฅผ ๊ตฌํํด์ ๊ด๊ณ ์ด๋ฒคํธ๋ฅผ ์์ ํ์ธ์.
onUserRewarded()
์ฝ๋ฐฑ์์ PointBerryImpressionTracker
์ logImpression()
์ ํธ์ถํด์ ๊ด๊ณ ๋
ธ์ถ์ ๋ก๊น
ํ์ธ์. ์ด๋ ๋งค๋์ ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ PointBerry inventory ID๋ฅผ ์ฌ์ฉํ์ธ์.
public class RewardedAdActivity extends Activity implements MaxRewardedAdListener {
private MaxRewardedAd rewardedAd;
private int retryAttempt;
private PointBerryImpressionTracker impTracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
rewardedAd = MaxRewardedAd.getInstance("YOUR_MAX_AD_UNIT_ID", this);
rewardedAd.setListener(this);
// ์ฒซ ๊ด๊ณ ๋ฅผ ๋ก๋ํ์ธ์.
rewardedAd.loadAd();
impTracker = new PointBerryImpressionTracker(getApplicationContext());
}
// ๊ด๊ณ ์ด๋ฒคํธ
@Override
public void onAdLoaded(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ๋ก๋๋๊ณ ์ด์ ๊ฒ์ฌ๋ ์ ์์ต๋๋ค.
// rewardedAd.isReady()๊ฐ true๋ฅผ ๋ฆฌํดํฉ๋๋ค.
// ๋ก๋ ์ฌ์๋ ํ์๋ฅผ ๋ฆฌ์
ํ์ธ์.
retryAttempt = 0;
}
@Override
public void onAdLoadFailed(final String adUnitId, final MaxError error) {
// ๊ด๊ณ ๊ฐ ๋ก๋์ ์คํจํ์ต๋๋ค.
// ๋๋ ์ด๋ฅผ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐ์ํค๋ฉฐ ๊ด๊ณ ๋ก๋๋ฅผ ์ฌ์๋ํ์ธ์.
// ๋๋ ์ด๋ฅผ 1์ด๋ถํฐ 64์ด๊น์ง 2๋ฐฐ์ฉ ์ฆ๊ฐ์ํค๋ ์์์
๋๋ค.
retryAttempt++;
long delayMillis = TimeUnit.SECONDS.toMillis((long) Math.pow(2, Math.min(6, retryAttempt)));
new Handler().postDelayed(() -> rewardedAd.loadAd(), delayMillis);
}
@Override
public void onAdDisplayFailed(final MaxAd maxAd, final MaxError error) {
// ๊ด๊ณ ๊ฐ ๊ฒ์ฌ์ ์คํจํ์ต๋๋ค.
// ๋ค์ ๊ด๊ณ ๋ฅผ ๋ก๋ํ์ธ์.
rewardedAd.loadAd();
}
@Override
public void onAdDisplayed(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ๊ฒ์ฌ๋์ต๋๋ค.
}
@Override
public void onAdClicked(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ํด๋ฆญ๋์ต๋๋ค.
}
@Override
public void onRewardedVideoStarted(MaxAd ad) {
// ๊ด๊ณ ๊ฐ ์์๋์ต๋๋ค.
}
@Override
public void onRewardedVideoCompleted(MaxAd ad) {
// ๊ด๊ณ ๊ฐ ์ข
๋ฃ๋์ต๋๋ค.
}
@Override
public void onUserRewarded(MaxAd ad, MaxReward reward) {
// ์ ์ ๊ฐ ๋ณด์์ ๋ฐ์์ผ ํฉ๋๋ค.
// ๊ด๊ณ ๋
ธ์ถ์ ๋ก๊น
ํ์ธ์.
impTracker.logImpression("YOUR_POINTBERRY_INVENTORY_ID");
// ๊ฐ๋ฐ ํ๊ฒฝ์์๋ development ํ๋ผ๋ฏธํฐ์ true๋ฅผ ์ ๋ฌํด์ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ธ์.
// impTracker.logImpression("YOUR_POINTBERRY_INVENTORY_ID", true);
}
@Override
public void onAdHidden(final MaxAd maxAd) {
// ๊ด๊ณ ๊ฐ ๋ซํ์ต๋๋ค.
// ๋ค์ ๊ด๊ณ ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ์ธ์.
rewardedAd.loadAd();
}
}
MaxRewaredAd
์ showAd()
๋ฅผ ํธ์ถํด์ ๊ด๊ณ ๋ฅผ ๊ฒ์ฌํ์ธ์. ์ด๋ ๋งค๋์ ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ PointBerry inventory ID๋ฅผ ์ฌ์ฉํ์ธ์.
if (rewardedAd.isReady()) {
rewardedAd.showAd("YOUR_POINTBERRY_INVENTORY_ID");
}
PUBMATIC SDK ์ฐ๋์ Prebid๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ด๊ณ ํจ์จ ์ต์ ํ ๋ฐฉ์์ผ๋ก 2023.11์(์์ ) ์ค ์๋น์ค ์์์ ์ฑ ๋ณ ์งํ ์ฝ๋๋ฅผ ๋ณ๋ ์ ๋ฌํ ์์ ์ด๋ฉฐ, ์ด๋ฅผ ์ํด ์ฌ์ ์ฑ ๋ด ์ค์ ์ ๊ถ์ฅํฉ๋๋ค.
https://github.com/PubMatic/android-openwrap-sdk-samples
// To integrate OpenWrap SDK
implementation 'com.pubmatic.sdk:openwrap:3.0.0'
// To integrate GAM event handler
implementation 'com.pubmatic.sdk:openwrap-eventhandler-dfp:3.0.0'
<!-- Mandatory permission for OpenWrap SDK -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Ask this permission to user (at runtime from code) only for API 30+ -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
private void Permission() {
// Runtime optional permission list
List<String> permissionList = new ArrayList<>();
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
permissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION);
permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
// Access READ_PHONE_STATE permission if api level 30 and above
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
permissionList.add(Manifest.permission.READ_PHONE_STATE);
}
final String[] PERMISSIONS = new String[permissionList.size()];
permissionList.toArray(PERMISSIONS);
// Ask permission from user for location and write external storage
if (!hasPermissions(this, PERMISSIONS)) {
int MULTIPLE_PERMISSIONS_REQUEST_CODE = 123;
ActivityCompat.requestPermissions(this, PERMISSIONS, MULTIPLE_PERMISSIONS_REQUEST_CODE);
}
}
private static boolean hasPermissions(Context context, String... permissions) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
pubmatic Banner View
<com.pubmatic.sdk.openwrap.banner.POBBannerView
android:id="@+id/banner"
android:layout_width="320dp" // android:layout_width="300dp"
android:layout_height="50dp" // android:layout_height="250dp"
/>
// ์๋ ๊ฐ๋ค ์ค ์ฝ๋ ๋ฐ ์ ๋ ๊ฐ์ ์์ ์ฌํญ์ผ๋ก ์ค ๋ฐ์์ ๋ณ๋ ์ ๊ณต ์์
// Interstitial
void DFPInterstitial() {
// Create an interstitial custom event handler for your ad server. Make sure
// you use separate event handler objects to create each interstitial ad instance.
// For example, The code below creates an event handler for DFP ad server.
DFPInterstitialEventHandler eventHandler = new DFPInterstitialEventHandler(this, DFP_AD_UNIT_ID_Interstitial);
// Create interstitial instance by passing activity context and
interstitial = new POBInterstitial(this,
"YOUR_PUB_ID_Interstitial", // publisherId
"YOUR_PROFILE_ID_Interstitial", // profileId
"YOUR_OPENWRAP_AD_UNIT_ONE_Interstitial", // adUnitId
eventHandler);
// Set Optional listener
interstitial.setListener(new POBInterstitialListener());
}
// To show interstitial ad call this method
private void showInterstitialAd() {
// check if the interstitial is ready
if (null != interstitial && interstitial.isReady()) {
// Call show on interstitial
interstitial.show();
}
}
// Interstitial Ad listener callbacks
class POBInterstitialListener extends POBInterstitial.POBInterstitialListener {
private final String TAG = "tpmn";
// Callback method notifies that an ad has been received successfully.
@Override
public void onAdReceived(@NonNull POBInterstitial ad) {
Log.d(TAG, "onAdReceived Interstitial");
//Method gets called when ad gets loaded in container
//Here, you can show interstitial ad to user
btnInterstitial.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
}
// Callback method notifies an error encountered while loading an ad.
@Override
public void onAdFailedToLoad(@NonNull POBInterstitial ad, @NonNull POBError error) {
Log.e(TAG, "onAdFailedToLoad Interstitial : Ad failed to load with error -" + error.toString());
//Method gets called when loadAd fails to load ad
//Here, you can put logger and see why ad failed to load
}
// Callback method notifies an error encountered while showing an ad.
@Override
public void onAdFailedToShow(@NonNull POBInterstitial ad, @NonNull POBError error) {
Log.e(TAG, "onAdFailedToShow Interstitial : Ad failed to show with error -" + error.toString());
//Method gets called when loadAd fails to show ad
//Here, you can put logger and see why ad failed to show
}
// Callback method notifies that a user interaction will open another app (for example, App Store), leaving the current app.
@Override
public void onAppLeaving(@NonNull POBInterstitial ad) {
Log.d(TAG, "onAppLeaving");
}
// Callback method notifies that the interstitial ad will be presented as a modal on top of the current view controller
@Override
public void onAdOpened(@NonNull POBInterstitial ad) {
Log.d(TAG, "onAdOpened Interstitial");
}
// Callback method notifies that the interstitial ad has been animated off the screen.
@Override
public void onAdClosed(@NonNull POBInterstitial ad) {
Log.d(TAG, "onAdClosed Interstitial");
btnInterstitial.setBackgroundColor(Color.GRAY);
}
// Callback method notifies ad click
@Override
public void onAdClicked(@NonNull POBInterstitial ad) {
Log.d(TAG, "onAdClicked");
}
}
// Rewarded
void DFPRewarded() {
// Create an rewarded custom event handler for your ad server. Make sure
// you use separate event handler objects to create each rewarded ad instance.
// For example, The code below creates an event handler for DFP ad server.
DFPRewardedEventHandler eventHandler = new DFPRewardedEventHandler(this, "YOUR_DFP_AD_UNIT_ID_Rewarded");
//Create POBRewardedAd instance by passing activity context and profile parameters
rewarded = POBRewardedAd.getRewardedAd(this,
"YOUR_PUB_ID_Rewarded",
"YOUR_PROFILE_ID_Rewarded",
"YOUR_OPENWRAP_AD_UNIT_ID_Rewarded",
eventHandler
);
//Set Optional Callback Listener
rewarded.setListener(new POBRewardedAdListenerImpl());
}
// To show Rewarded Ad Call this method
private void showRewardedAd() {
//Call showAd when Ad is ready
if (rewarded != null && rewarded.isReady()) {
rewarded.show();
}
}
// Rewarded Ad listener callbacks
class POBRewardedAdListenerImpl extends POBRewardedAd.POBRewardedAdListener {
private final String TAG = "tpmn";
// Callback method notifies that an ad has been received successfully.
@Override
public void onAdReceived(@NonNull POBRewardedAd ad) {
Log.d(TAG, "Rewarded: onAdReceived : " + ad);
//Method gets called when ad gets loaded in container
//Here, you can show Rewarded ad to user
btnRewarded.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
}
// Callback method notifies an error encountered while loading an ad.
@Override
public void onAdFailedToLoad(@NonNull POBRewardedAd ad, @NonNull POBError error) {
Log.d(TAG, "Rewarded : onAdFailedToLoad");
Log.e(TAG, "Ad failed with load error - " + error.toString());
//Method gets called when sdk fails to load ad
//Here, you can put logger and see why ad failed to load
}
// Callback method notifies an error encountered while rendering an ad.
@Override
public void onAdFailedToShow(@NonNull POBRewardedAd ad, @NonNull POBError error) {
Log.e(TAG, "Rewarded : onAdFailedToShow");
Log.e(TAG, "Ad failed with show error - " + error.toString());
//Method gets called when sdk fails to show ad
//Here, you can put logger and see why ad failed to show
}
// Callback method notifies that a user interaction will open another app (for example, App Store), leaving the current app.
@Override
public void onAppLeaving(@NonNull POBRewardedAd ad) {
Log.d(TAG, "Rewarded : onAppLeaving");
}
// Callback method notifies that the rewarded ad will be presented as a modal on top of the current view controller
@Override
public void onAdOpened(@NonNull POBRewardedAd ad) {
Log.d(TAG, "Rewarded : onAdOpened");
}
// Callback method notifies that the rewarded ad has been animated off the screen.
@Override
public void onAdClosed(@NonNull POBRewardedAd ad) {
Log.d(TAG, "Rewarded : onAdClosed");
btnRewarded.setBackgroundColor(Color.GRAY);
}
// Callback method notifies ad click
@Override
public void onAdClicked(@NonNull POBRewardedAd ad) {
Log.d(TAG, "Rewarded : onAdClicked");
}
@Override
public void onReceiveReward(@NonNull POBRewardedAd ad, @NonNull POBReward reward) {
// As this is callback method, No action Required
Log.d(TAG, "Rewarded : Ad should Reward -" + reward.getAmount() + "(" + reward.getCurrencyType() + ")");
Toast.makeText(getApplicationContext(), "Congratulation! You are rewarded with " + reward.getAmount() + " " + reward.getCurrencyType(), Toast.LENGTH_LONG).show();
}
}
// Banner
private void POBView() {
try {
// Initialize banner view
banner = findViewById(R.id.banner);
// Call init() to set tag information
// For test IDs see - https://community.pubmatic.com/display/AOPO/Test+and+debug+your+integration#Testanddebugyourintegration-Testprofile/placement
// Create a banner custom event handler for your ad server. Make sure you use
// separate event handler objects to create each banner view.
// For example, The code below creates an event handler for DFP ad server.
DFPBannerEventHandler eventHandler = new DFPBannerEventHandler(this, AdUnit, AdSize.BANNER);
// Initialise banner view
banner = findViewById(R.id.banner);
banner.init("YOUR_PublisherId",
"YOUR_ProfileId",
"YOUR_AdUnit",
eventHandler);
//optional listener to listen banner events
banner.setListener(new POBBannerViewListener());
// Call loadAd() on banner instance
banner.loadAd();
} catch (Exception e) {
e.printStackTrace();
Log.e("tpmn", "Exception e : " + e.getMessage());
}
}
// Banner
void BannerVideo() {
// Create a banner custom event handler for your ad server. Make sure you use
// separate event handler objects to create each banner view.
// For example, The code below creates an event handler for DFP ad server with adsize medium rectangle i.e 300x250.
DFPBannerEventHandler eventHandler = new DFPBannerEventHandler(this, "YOUR_DFP_AD_UNIT_ID_BV", AdSize.MEDIUM_RECTANGLE);
// Initialise banner view
bannerVideo = findViewById(R.id.bannerVideo);
bannerVideo.init("YOUR_PUB_ID_BV",
"YOUR_PROFILE_ID_BV",
"YOUR_OPENWRAP_AD_UNIT_ID_BV",
eventHandler);
//optional listener to listen banner events
bannerVideo.setListener(new POBBannerViewListener());
// Call loadAd() on banner instance
bannerVideo.loadAd();
}
// Banner Ad listener callbacks
class POBBannerViewListener extends POBBannerView.POBBannerViewListener {
private final String TAG = "tpmn";
// Callback method Notifies that an ad has been successfully loaded and rendered.
@Override
public void onAdReceived(@NonNull POBBannerView view) {
Log.d(TAG, "Ad Received");
}
// Callback method Notifies an error encountered while loading or rendering an ad.
@Override
public void onAdFailed(@NonNull POBBannerView view, @NonNull POBError error) {
Log.e(TAG, "onAdFailed : " + error.toString());
}
// Callback method Notifies whenever current app goes in the background due to user click
@Override
public void onAppLeaving(@NonNull POBBannerView view) {
Log.d(TAG, "App Leaving");
}
// Callback method Notifies that the banner ad view is clicked.
@Override
public void onAdClicked(@NonNull POBBannerView view) {
Log.d(TAG, "Ad Clicked");
}
// Callback method Notifies that the banner ad view will launch a dialog on top of the current view
@Override
public void onAdOpened(@NonNull POBBannerView view) {
Log.d(TAG, "Ad Opened");
}
// Callback method Notifies that the banner ad view has dismissed the modal on top of the current view
@Override
public void onAdClosed(@NonNull POBBannerView view) {
Log.d(TAG, "Ad Closed");
}
}
-
๊ด๊ณ ๊ฐ ๋ ธ์ถ๋๋์?
๊ด๊ณ ๊ฐ ๋ ธ์ถ๋์ง ์๋๋ค๋ฉด MAX SDK๋ฅผ ์ ๊ฒํ์ธ์.
-
๊ด๊ณ ๋ ธ์ถ์ด ๋ก๊น ๋๋์?
logImpression("YOUR_POINTBERRY_INVENTORY_ID", true)
์ ํธ์ถํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋์ด์ผ ํฉ๋๋ค.Successfully logged ad impression for inventory ID P_148 and advertising ID a1312407-a27a-4a2e-a52f-0a0ab89febe1
์ฑ๊ณต์ ๋ปํ๋ ๋ก๊ทธ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋์ง ์๋๋ค๋ฉด, ์ฆ ๊ด๊ณ ๋ ธ์ถ์ด ๋ก๊น ๋์ง ์๋๋ค๋ฉด PointBerry Event Tracker๋ฅผ ์ ๊ฒํ์ธ์.
-
์ฑ ์ถ์ ์ ์, ๊ด๊ณ ๋ ธ์ถ ๋ก๊น ์ ๊ดํ ๋ก๊ทธ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋์ง ์๋๋ก ํ๋์?
์ถ์ ๋ฒ์ ์์๋
logImpression("YOUR_POINTBERRY_INVENTORY_ID")
๋๋logImpression("YOUR_POINTBERRY_INVENTORY_ID", false)
์ ํธ์ถํ์ธ์.
AppLovin์์ ์ ๊ณตํ๋ ๋ฐ๋ชจ ์ฑ์ ์ฐธ๊ณ ํ์ธ์.