ADXUnity - adxcorp/ADXLibrary_Integration GitHub Wiki

Getting started with the ADXLibrary

Latest ADXLibrary

Version : 1.10.1

Release Date : 2021/07/01

์ „์ฒด

๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ์ „์šฉ

Notice

  • ์ƒˆ๋กœ์šด ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ์‹œ ADX ๊ด€๋ จ Library๋ฅผ ๋ชจ๋‘ ์ง€์šฐ๊ณ  ์ƒˆ๋กœ import ํ•ด์ฃผ์„ธ์š”.
  • GooglePlayServiceResolver๊ฐ€ ์ด๋ฏธ ํฌํ•จ๋˜์–ด์žˆ์œผ์‹œ๋‹ค๋ฉด ์ €ํฌ ํŒจํ‚ค์ง€์—์„œ PlayServicesResolver๋ฅผ ์ œ์™ธํ•˜์‹  ํ›„ import ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • GoogleMobileAdsSettings์— ์ž…๋ ฅํ•œ App ID๊ฐ€ ์‚ญ์ œ๋˜๋Š” ๊ฒฝ์šฐ Unity > Assets > Google Mobile Ads > Settings์—์„œ Delay app measure๋ฅผ ์ฒดํฌ ํ–ˆ๋‹ค๊ฐ€ ํ•ด์ œํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค
  • 1.9.0 ์ดํ›„ ๋ฒ„์ „ ์—ฐ๋™ ์‹œ, build.gradle์— compileOption์ด ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
android {
    compileOptions {
       sourceCompatibility 1.8
       targetCompatibility 1.8
    }
}
  • Children's Online Privacy Protection Act (COPPA) ์„ค์ •์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ด‘๊ณ  ๋กœ๋“œ์‹œ์— TagForChildDirectedTreatment๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
AdRequest request = new AdRequest.Builder()
        .TagForChildDirectedTreatment(true)
        .Build();
  • iOS build run ์‹œ์— ์•„๋ž˜์™€ ๊ฐ™์ด MoPubSDKFramework๋ฅผ ๋กœ๋“œํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”, Project > General > Embedded Binaries์— MoPubSDKFramework๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
dyld: Library not loaded: @rpath/MoPubSDKFramework.framework/MoPubSDKFramework
  • (์ฃผ์˜) MoPub/AdMob ์—ฐ๋™ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์ •์ƒ์ ์œผ๋กœ delegate method ํ˜ธ์ถœ์ด ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ์—ฐ๋™ ์ฝ”๋“œ๋งŒ ์‚ฌ์šฉํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

iOS 14 ๋Œ€์‘

- 2021๋…„ 4์›” 27์ผ ์ƒˆ๋ฒฝ, ๊ฐœ์ธ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ๊ฐ•ํ™”ํ•˜๋Š” iOS14.5๊ฐ€ ๋ฐฐํฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ์•„๋ž˜ ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด ์—ฐ๋™ ์ง„ํ–‰ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

(์ฃผ์˜) Add Test Device

๊ฐœ๋ฐœ์ค‘ ๋ฐ˜๋“œ์‹œ ์•„๋ž˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๋””๋ฐ”์ด์Šค๋ฅผ ๋“ฑ๋ก ํ›„ ์‚ฌ์šฉํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๋””๋ฐ”์ด์Šค ๋ฏธ๋“ฑ๋ก ์ƒํƒœ๋กœ ํ…Œ์ŠคํŠธํ•  ๊ฒฝ์šฐ ๊ณ„์ •์ด ์ •์ง€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ADXLibrary๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ด‘๊ณ ๋ฅผ ๋กœ๋“œํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์‚ฝ์ž… ๋œ ์ƒํƒœ๋กœ run ํ•ด์ฃผ์‹œ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- Android

 I/Ads: Use AdRequest.Builder.addTestDevice("33BE2250B43518CCDA7DE426D04EE232")
 to get test ads on this device.

- iOS

 <Google> To get test ads on this device, set: 
 GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @[ @"aa20271272d6558e1bff61b329dd436c" ];

์ถœ๋ ฅ ๋œ Device ID๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด AdRequest์—์„œ AddTestDevice๋ฅผ call ํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์ฃผ์„ธ์š”.

AdRequest request = new AdRequest.Builder()
    .AddTestDevice("2077ef9a63d2b398840261c8221a0c9b")
    .Build();

Rewarded Video Targeting

https://developers.google.com/admob/unity/targeting

- COPPA

AdRequest request = new AdRequest.Builder()
        .TagForChildDirectedTreatment(true)
        .Build();

https://support.google.com/admob/answer/7562142

- Ad content filtering

AdRequest request = new AdRequest.Builder()
        .AddExtra("max_ad_content_rating", "G")
        .Build();

Integration

1) Install git-lfs

1) git-lfs install
brew install git-lfs

2) please put this command
sudo git lfs install --system

2) Initialize ADXLibrary and GDPR

  • ๋ฐœ๊ธ‰๋ฐ›์œผ์‹  Ad Unit ID ์ค‘ ์ž„์˜์˜ 1๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Initialize ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • OnADXConsentCompleted callback์„ ๋ฐ›์€ ๋’ค ๊ด‘๊ณ  ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
1) ์‚ฌ์šฉ์ž์˜ ์œ„์น˜ ๋ฐ ๋™์˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ ๋™์˜ UI ๋…ธ์ถœ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
์œ ๋Ÿฝ ์™ธ ์ง€์—ญ์—์„œ Consent UI๋ฅผ ํ™•์ธํ•˜์‹œ๊ณ ์ž ํ•  ๊ฒฝ์šฐ์—๋Š” debugState๋ฅผ 1๋กœ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.
// debugState 0 : DEFAULT
// debugState 1 : DEBUG (InEEA)
ADXGDPRManager.InitializeWithShowADXConsent ("MOPUB AD UNIT ID or EMPTY STRING", debugState);
ADXGDPR.OnADXConsentCompleted += onADXConsentCompleted;
2) ์ง์ ‘ ๋™์˜ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•˜์‹œ๋Š” ๊ฒฝ์šฐ
// consentState 0 : ๋™์˜์—ฌ๋ถ€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ
// consentState 1 : ๋™์˜์—ฌ๋ถ€๊ฐ€ ํ•„์š”์—†๋Š” ์ง€์—ญ
// consentState 2 : ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ์ธ์ •๋ณด ํ™œ์šฉ ๋ฐ ์ˆ˜์ง‘์„ ๊ฑฐ๋ถ€ํ•œ ์ƒํƒœ
// consentState 3 : ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ์ธ์ •๋ณด ํ™œ์šฉ ๋ฐ ์ˆ˜์ง‘์„ ๋™์˜ํ•œ ์ƒํƒœ
ADXGDPRManager.InitializeWithSetConsentState ("MOPUB AD UNIT ID or EMPTY STRING", consentState);
ADXGDPR.OnADXConsentCompleted += onADXConsentCompleted;
  • ๋™์˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ/๋ณ€๊ฒฝ ํ•˜์‹œ๋Š” ๊ฒฝ์šฐ ์•„๋ž˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
// 0 : ๋™์˜์—ฌ๋ถ€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ
// 1 : ๋™์˜์—ฌ๋ถ€๊ฐ€ ํ•„์š”์—†๋Š” ์ง€์—ญ
// 2 : ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ์ธ์ •๋ณด ํ™œ์šฉ ๋ฐ ์ˆ˜์ง‘์„ ๊ฑฐ๋ถ€ํ•œ ์ƒํƒœ
// 3 : ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ์ธ์ •๋ณด ํ™œ์šฉ ๋ฐ ์ˆ˜์ง‘์„ ๋™์˜ํ•œ ์ƒํƒœ
ADXGDPRManager.SetConsentState();
ADXGDPRManager.GetConsentState();
  • AD(x)์˜ Privacy Policy ๋ฌธ์„œ URL์€ ์•„๋ž˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ADXGDPRManager.GetPrivacyPolicyURL();
  • Rewarded Video๋ฅผ Request ํ•˜์‹ค ๋•Œ์—๋Š” ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. GDPR ๊ทœ์ •์„ ์ค€์ˆ˜ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ์…”๋„ ๋ฉ๋‹ˆ๋‹ค.
if (ADXGDPRManager.GetConsentState () == 2) {
     AdRequest request = new AdRequest.Builder ()
                                      .AddExtra ("npa", "1")
                                      .Build ();
     rewardedVideo.LoadAd (request, admobRvAdUnitID);
}

3) Initialize AD

- Banner, Interstitial

#if UNITY_ANDROID

var allBannerAdUnits = new string[] { "<ANDROID_BANNER_ADUNIT_ID>" };
var allInterstitialAdUnits = new string[] { "<ANDROID_INTERSTITIAL_ADUNIT_ID>" };

MoPub.LoadBannerPluginsForAdUnits(allBannerAdUnits);
MoPub.LoadInterstitialPluginsForAdUnits(allInterstitialAdUnits);

#elif UNITY_IPHONE

var allBannerAdUnits = new string[] { "<IOS_BANNER_ADUNIT_ID>" };
var allInterstitialAdUnits = new string[] { "<IOS_INTERSTITIAL_ADUNIT_ID>" };

MoPub.LoadBannerPluginsForAdUnits(allBannerAdUnits);
MoPub.LoadInterstitialPluginsForAdUnits(allInterstitialAdUnits);

#endif  

- RewardedVideo

MobileAds.Initialize(initStatus => {
    Debug.Log("MobileAds Initialize Completed");
});

Banner

MoPub.RequestBanner ("<BANNER_ADUNIT_ID>", MoPub.AdPosition.BottomCenter, MoPub.MaxAdSize.ScreenWidthHeight50); 

Interstitial

1) ์ „๋ฉด ๊ด‘๊ณ  ๋กœ๋”ฉ

MoPub.RequestInterstitialAd ("<INTERSTITIAL_ADUNIT_ID>");  

2) ์ „๋ฉด ๊ด‘๊ณ  ์ถœ๋ ฅ

MoPub.ShowInterstitialAd ("<INTERSTITIAL_ADUNIT_ID>");  

Rewarded Video

1) App ID ์„ค์ •

  • Unity > Assets > Google Mobile Ads > Settings๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ฐ ํ•„๋“œ์— Android ๋ฐ iOS App ID๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

2) ๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ์ดˆ๊ธฐํ™”

public void onADXConsentCompleted(string s) {
    MobileAds.Initialize(initStatus => {
       Debug.Log("MobileAds Initialize Completed");
    });
}

3) ๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ๋กœ๋”ฉ

#if UNITY_ANDROID
string adUnitId = "<REWARDEDVIDEO_ADUNIT_ID>";
#elif UNITY_IPHONE
string adUnitId = "<REWARDEDVIDEO_ADUNIT_ID>";
#else
string adUnitId = "unexpected_platform";
#endif

public void LoadAdMobRV() {
    rewardedAd = new RewardedAd(adUnitId);

    rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
    rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
    rewardedAd.OnAdOpening += HandleRewardedAdOpening;
    rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
    rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
    rewardedAd.OnAdClosed += HandleRewardedAdClosed;

    if (ADXGDPRManager.GetConsentState() == 2) {
         // Create an empty ad request.
         AdRequest request = new AdRequest.Builder()
                                 .AddExtra("npa", "1")
                                 .Build();
         rewardedAd.LoadAd(request);
    } else {
         // Create an empty ad request.
         AdRequest request = new AdRequest.Builder()
                                 .Build();
         rewardedAd.LoadAd(request);
    }
}

4) ๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ์žฌ์ƒ

public showRV() {
    if (rewardedAd.IsLoaded()) {
         rewardedAd.Show();
    }
}

CallBack

- Banner

// Fired when an ad loads in the banner. Includes the ad height.
public static event Action<string, float> OnAdLoadedEvent;

// Fired when an ad fails to load for the banner
public static event Action<string, string> OnAdFailedEvent;

// Android only. Fired when a banner ad is clicked
public static event Action<string> OnAdClickedEvent;

// Android only. Fired when a banner ad expands to encompass a greater portion of the screen
public static event Action<string> OnAdExpandedEvent;

// Android only. Fired when a banner ad collapses back to its initial size
public static event Action<string> OnAdCollapsedEvent;

- Interstitial

// Fired when an interstitial ad is loaded and ready to be shown
public static event Action<string> OnInterstitialLoadedEvent;

// Fired when an interstitial ad fails to load
public static event Action<string, string> OnInterstitialFailedEvent;

// Fired when an interstitial ad is dismissed
public static event Action<string> OnInterstitialDismissedEvent;

// iOS only. Fired when an interstitial ad expires
public static event Action<string> OnInterstitialExpiredEvent;

// Android only. Fired when an interstitial ad is displayed
public static event Action<string> OnInterstitialShownEvent;

// Android only. Fired when an interstitial ad is clicked
public static event Action<string> OnInterstitialClickedEvent;

- Rewarded Video

// Ad event fired when the reward video ad has been received.
event EventHandler<EventArgs> OnAdLoaded;

// Ad event fired when the reward video ad has failed to load.
event EventHandler<AdFailedToLoadEventArgs> OnAdFailedToLoad;

// Ad event fired when the reward video ad is opened.
event EventHandler<EventArgs> OnAdOpening;

// Ad event fired when the reward video ad has failed to show.
event EventHandler<AdFailedToLoadEventArgs> OnAdFailedToShow;

// Ad event fired when the reward video ad has rewarded the user.
event EventHandler<Reward> OnUserEarnedReward;

// Ad event fired when the reward video ad is closed.
event EventHandler<EventArgs> OnAdClosed;

์ƒ์„ธ ๊ฐ€์ด๋“œ

Banner : https://developers.mopub.com/publishers/unity/banner

Interstitial : https://developers.mopub.com/publishers/unity/interstitial

Rewarded Video : https://developers.google.com/admob/unity/rewarded-ads

MoPub Rewarded Video

1) ๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ์ดˆ๊ธฐํ™”

#if UNITY_ANDROID
var allRewardedAdUnits = new string[] { "<YOUR_ANDROID_AD_UNIT_ID>" };
MoPub.LoadRewardedVideoPluginsForAdUnits(allRewardedAdUnits);
#elif UNITY_IPHONE
var allRewardedAdUnits = new string[] { "<YOUR_IOS_AD_UNIT_ID>" };
MoPub.LoadRewardedVideoPluginsForAdUnits(allRewardedAdUnits);
#endif

2) ๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ๋กœ๋“œ

#if UNITY_ANDROID
MoPub.RequestRewardedVideo ("<YOUR_ANDROID_AD_UNIT_ID>"); 
#elif UNITY_IPHONE
MoPub.RequestRewardedVideo ("<YOUR_IOS_AD_UNIT_ID>"); 
#endif

2) ๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ์žฌ์ƒ

#if UNITY_ANDROID
MoPub.ShowRewardedVideo ("<YOUR_ANDROID_AD_UNIT_ID>"); 
#elif UNITY_IPHONE
MoPub.ShowRewardedVideo ("<YOUR_IOS_AD_UNIT_ID>"); 
#endif

3) callback

// Fired when a rewarded video finishes loading and is ready to be displayed
public static event Action<string> OnRewardedVideoLoadedEvent;

// Fired when a rewarded video fails to load. Includes the error message.
public static event Action<string, string> OnRewardedVideoFailedEvent;

// iOS only. Fired when a rewarded video expires
public static event Action<string> OnRewardedVideoExpiredEvent;

// Fired when an rewarded video is displayed
public static event Action<string> OnRewardedVideoShownEvent;

// Fired when an rewarded video is clicked
public static event Action<string> OnRewardedVideoClickedEvent;

// Fired when a rewarded video fails to play. Includes the error message.
public static event Action<string, string> OnRewardedVideoFailedToPlayEvent;

// Fired when a rewarded video completes. Includes all the data available about the reward.
public static event Action<string, string, float> OnRewardedVideoReceivedRewardEvent;

// Fired when a rewarded video closes
public static event Action<string> OnRewardedVideoClosedEvent;

// iOS only. Fired when a rewarded video event causes another application to open
public static event Action<string> OnRewardedVideoLeavingApplicationEvent;
โš ๏ธ **GitHub.com Fallback** โš ๏ธ