메인 콘텐츠로 건너뛰기

개요

Adrop Android SDK의 예제 코드와 샘플 프로젝트를 확인하세요.

샘플 프로젝트

GitHub에서 전체 샘플 프로젝트를 확인할 수 있습니다.

Android 샘플 프로젝트

Kotlin으로 작성된 Android 샘플 앱

빠른 시작 예제

배너 광고 (Kotlin)

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import io.adrop.ads.banner.AdropBanner

class BannerActivity : AppCompatActivity() {
    private lateinit var adropBanner: AdropBanner

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_banner)

        // 배너 광고 초기화
        adropBanner = findViewById(R.id.adrop_banner)
        adropBanner.unitId = "YOUR_UNIT_ID"

        // 광고 리스너 설정 (선택사항)
        adropBanner.listener = object : AdropBanner.Listener {
            override fun onAdReceived(banner: AdropBanner) {
                // 광고 수신 성공
            }

            override fun onAdClicked(banner: AdropBanner) {
                // 광고 클릭됨
            }

            override fun onAdFailedToReceive(banner: AdropBanner, errorCode: Int) {
                // 광고 수신 실패
            }
        }

        // 광고 로드
        adropBanner.load()
    }
}
레이아웃 파일 (activity_banner.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <io.adrop.ads.banner.AdropBanner
        android:id="@+id/adrop_banner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

네이티브 광고 (Kotlin)

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import io.adrop.ads.native.AdropNativeAd
import io.adrop.ads.native.AdropNativeAdView

class NativeAdActivity : AppCompatActivity() {
    private lateinit var nativeAd: AdropNativeAd
    private lateinit var nativeAdView: AdropNativeAdView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_native)

        // 네이티브 광고 초기화
        nativeAd = AdropNativeAd(this, "YOUR_UNIT_ID")

        // 광고 리스너 설정
        nativeAd.listener = object : AdropNativeAd.Listener {
            override fun onAdReceived(ad: AdropNativeAd) {
                // 광고 수신 성공 - UI 바인딩
                displayNativeAd(ad)
            }

            override fun onAdClicked(ad: AdropNativeAd) {
                // 광고 클릭됨
            }

            override fun onAdFailedToReceive(ad: AdropNativeAd, errorCode: Int) {
                // 광고 수신 실패
            }
        }

        // 광고 로드
        nativeAd.load()
    }

    private fun displayNativeAd(ad: AdropNativeAd) {
        // 네이티브 광고 뷰 인플레이트
        val inflater = LayoutInflater.from(this)
        nativeAdView = inflater.inflate(
            R.layout.native_ad_layout,
            null
        ) as AdropNativeAdView

        // 광고 요소 바인딩
        val iconView = nativeAdView.findViewById<ImageView>(R.id.ad_icon)
        val titleView = nativeAdView.findViewById<TextView>(R.id.ad_title)
        val bodyView = nativeAdView.findViewById<TextView>(R.id.ad_body)
        val ctaButton = nativeAdView.findViewById<TextView>(R.id.ad_cta)

        // 광고 데이터 설정
        ad.icon?.let { iconView.setImageBitmap(it) }
        titleView.text = ad.title
        bodyView.text = ad.body
        ctaButton.text = ad.callToAction

        // 네이티브 광고 뷰에 광고 등록
        nativeAdView.setNativeAd(ad)

        // 컨테이너에 추가
        val adContainer = findViewById<View>(R.id.native_ad_container)
        adContainer.removeAllViews()
        adContainer.addView(nativeAdView)
    }

    override fun onDestroy() {
        nativeAd.destroy()
        super.onDestroy()
    }
}
네이티브 광고 레이아웃 (native_ad_layout.xml)
<?xml version="1.0" encoding="utf-8"?>
<io.adrop.ads.native.AdropNativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/ad_icon"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_alignParentStart="true" />

        <TextView
            android:id="@+id/ad_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toEndOf="@id/ad_icon"
            android:layout_marginStart="12dp"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/ad_body"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/ad_title"
            android:layout_toEndOf="@id/ad_icon"
            android:layout_marginStart="12dp"
            android:layout_marginTop="4dp"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/ad_cta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/ad_body"
            android:layout_alignParentEnd="true"
            android:layout_marginTop="12dp"
            android:background="@drawable/button_background"
            android:padding="12dp"
            android:textColor="@android:color/white"
            android:textSize="14sp"
            android:textStyle="bold" />

    </RelativeLayout>

</io.adrop.ads.native.AdropNativeAdView>

전면 광고 (Kotlin)

import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import io.adrop.ads.interstitial.AdropInterstitialAd

class InterstitialActivity : AppCompatActivity() {
    private var interstitialAd: AdropInterstitialAd? = null
    private lateinit var showButton: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_interstitial)

        showButton = findViewById(R.id.show_interstitial_button)
        showButton.isEnabled = false

        // 전면 광고 로드
        loadInterstitialAd()

        showButton.setOnClickListener {
            showInterstitialAd()
        }
    }

    private fun loadInterstitialAd() {
        interstitialAd = AdropInterstitialAd(this, "YOUR_UNIT_ID")

        interstitialAd?.listener = object : AdropInterstitialAd.Listener {
            override fun onAdReceived(ad: AdropInterstitialAd) {
                // 광고 로드 완료 - 표시 가능
                showButton.isEnabled = true
            }

            override fun onAdFailedToReceive(ad: AdropInterstitialAd, errorCode: Int) {
                // 광고 로드 실패
                showButton.isEnabled = false
            }

            override fun onAdFailedToShow(ad: AdropInterstitialAd, errorCode: Int) {
                // 광고 표시 실패
            }

            override fun onAdDidPresentFullScreen(ad: AdropInterstitialAd) {
                // 전면 광고가 화면에 표시됨
            }

            override fun onAdDidDismissFullScreen(ad: AdropInterstitialAd) {
                // 전면 광고가 닫힘 - 새 광고 로드
                loadInterstitialAd()
            }

            override fun onAdClicked(ad: AdropInterstitialAd) {
                // 광고 클릭됨
            }
        }

        interstitialAd?.load()
    }

    private fun showInterstitialAd() {
        interstitialAd?.let { ad ->
            if (ad.isLoaded) {
                ad.show()
            }
        }
    }

    override fun onDestroy() {
        interstitialAd?.destroy()
        super.onDestroy()
    }
}

보상형 광고 (Kotlin)

import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import io.adrop.ads.rewarded.AdropRewardedAd

class RewardedAdActivity : AppCompatActivity() {
    private var rewardedAd: AdropRewardedAd? = null
    private lateinit var showButton: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_rewarded)

        showButton = findViewById(R.id.show_rewarded_button)
        showButton.isEnabled = false

        // 보상형 광고 로드
        loadRewardedAd()

        showButton.setOnClickListener {
            showRewardedAd()
        }
    }

    private fun loadRewardedAd() {
        rewardedAd = AdropRewardedAd(this, "YOUR_UNIT_ID")

        rewardedAd?.listener = object : AdropRewardedAd.Listener {
            override fun onAdReceived(ad: AdropRewardedAd) {
                // 광고 로드 완료 - 표시 가능
                showButton.isEnabled = true
            }

            override fun onAdFailedToReceive(ad: AdropRewardedAd, errorCode: Int) {
                // 광고 로드 실패
                showButton.isEnabled = false
            }

            override fun onAdFailedToShow(ad: AdropRewardedAd, errorCode: Int) {
                // 광고 표시 실패
            }

            override fun onAdDidPresentFullScreen(ad: AdropRewardedAd) {
                // 전면 광고가 화면에 표시됨
            }

            override fun onAdDidDismissFullScreen(ad: AdropRewardedAd) {
                // 광고가 닫힘 - 새 광고 로드
                loadRewardedAd()
            }

            override fun onAdClicked(ad: AdropRewardedAd) {
                // 광고 클릭됨
            }

            override fun onAdEarnRewardHandler(ad: AdropRewardedAd, type: Int, amount: Int) {
                // 보상 지급
                Toast.makeText(
                    this@RewardedAdActivity,
                    "보상 획득: $amount 개의 $type",
                    Toast.LENGTH_SHORT
                ).show()

                // 여기서 실제 보상 지급 로직 구현
                grantReward(type, amount)
            }
        }

        rewardedAd?.load()
    }

    private fun showRewardedAd() {
        rewardedAd?.let { ad ->
            if (ad.isLoaded) {
                ad.show()
            }
        }
    }

    private fun grantReward(type: Int, amount: Int) {
        // 사용자에게 보상 지급 로직
        // 예: 게임 코인, 라이프, 아이템 등
    }

    override fun onDestroy() {
        rewardedAd?.destroy()
        super.onDestroy()
    }
}

Java 예제

배너 광고 (Java)

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import io.adrop.ads.banner.AdropBanner;

public class BannerActivity extends AppCompatActivity {
    private AdropBanner adropBanner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_banner);

        // 배너 광고 초기화
        adropBanner = findViewById(R.id.adrop_banner);
        adropBanner.setUnitId("YOUR_UNIT_ID");

        // 광고 리스너 설정
        adropBanner.setListener(new AdropBanner.Listener() {
            @Override
            public void onAdReceived(AdropBanner banner) {
                // 광고 수신 성공
            }

            @Override
            public void onAdClicked(AdropBanner banner) {
                // 광고 클릭됨
            }

            @Override
            public void onAdFailedToReceive(AdropBanner banner, int errorCode) {
                // 광고 수신 실패
            }
        });

        // 광고 로드
        adropBanner.load();
    }
}

전면 광고 (Java)

import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import io.adrop.ads.interstitial.AdropInterstitialAd;

public class InterstitialActivity extends AppCompatActivity {
    private AdropInterstitialAd interstitialAd;
    private Button showButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_interstitial);

        showButton = findViewById(R.id.show_interstitial_button);
        showButton.setEnabled(false);

        loadInterstitialAd();

        showButton.setOnClickListener(v -> showInterstitialAd());
    }

    private void loadInterstitialAd() {
        interstitialAd = new AdropInterstitialAd(this, "YOUR_UNIT_ID");

        interstitialAd.setListener(new AdropInterstitialAd.Listener() {
            @Override
            public void onAdReceived(AdropInterstitialAd ad) {
                showButton.setEnabled(true);
            }

            @Override
            public void onAdFailedToReceive(AdropInterstitialAd ad, int errorCode) {
                showButton.setEnabled(false);
            }

            @Override
            public void onAdFailedToShow(AdropInterstitialAd ad, int errorCode) {
                // 광고 표시 실패
            }

            @Override
            public void onAdDidPresentFullScreen(AdropInterstitialAd ad) {
                // 광고 표시됨
            }

            @Override
            public void onAdDidDismissFullScreen(AdropInterstitialAd ad) {
                // 광고 닫힘 - 새 광고 로드
                loadInterstitialAd();
            }

            @Override
            public void onAdClicked(AdropInterstitialAd ad) {
                // 광고 클릭됨
            }
        });

        interstitialAd.load();
    }

    private void showInterstitialAd() {
        if (interstitialAd != null && interstitialAd.isLoaded()) {
            interstitialAd.show();
        }
    }

    @Override
    protected void onDestroy() {
        if (interstitialAd != null) {
            interstitialAd.destroy();
        }
        super.onDestroy();
    }
}

고급 예제

다크 모드 지원

import io.adrop.ads.AdropSDK

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 다크 모드 설정
        val isDarkMode = resources.configuration.uiMode and
            Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES

        AdropSDK.setDarkMode(isDarkMode)
    }
}

테스트 모드

import io.adrop.ads.AdropSDK

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        // 초기화
        AdropSDK.initialize(this, "YOUR_PRODUCTION_KEY")

        // 개발 중일 때만 테스트 모드 활성화
        if (BuildConfig.DEBUG) {
            AdropSDK.setTestMode(true)
        }
    }
}

관련 문서