iOS Getting Started - adxcorp/ADXLibrary_Integration GitHub Wiki

Getting started with ADXLibrary

๊ฐ€์ž…์„ ์›ํ•˜์‹œ๋ฉด [email protected]๋กœ ์—ฐ๋ฝ ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

0) Latest ADXLibrary

Version : 1.9.1

Release Date : 2021/06/22

1) Using Cocoapods

Podfile

- ADXLibrary

  source 'https://github.com/adxcorp/AdxLibrary_iOS_Release.git'
  source 'https://github.com/CocoaPods/Specs.git'      

  # ๋ฐฐ๋„ˆ, ๋„ค์ดํ‹ฐ๋ธŒ, ์ „๋ฉด
  pod 'ADXLibrary', '1.9.1'
  pod 'ADXLibrary-FBAudienceNetwork', '1.9.1'
  pod 'ADXLibrary-Cauly', '1.9.1'
  pod 'ADXLibrary-Pangle', '1.9.1'
  pod 'ADXLibrary-Vungle', '1.9.1'

  # ๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ์‚ฌ์šฉ ์‹œ ์ถ”๊ฐ€
  pod 'ADXLibrary-UnityAds', '1.9.1'

2) Project Setting

Info.plist

    <key>NSAppTransportSecurity</key>
    <dict>
            <key>NSAllowsArbitraryLoads</key>
            <true/>
    </dict>

    <key>GADApplicationIdentifier</key>
    <string>YOUR APP ID</string>

Build Settings

    Enable Bitcode = NO

3) iOS 14 ๋Œ€์‘

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

4) Initialize

AppDelegate์—์„œ ๊ด‘๊ณ  ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „, ๋ฐœ๊ธ‰๋ฐ›์œผ์‹  Ad Unit ID ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜์—ฌ initialize ํ•ด์ฃผ์‹œ๊ณ , showADXConsent ๋˜๋Š” setConsentState๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. completion block์ด ํ˜ธ์ถœ๋œ ํ›„ ๊ด‘๊ณ  ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์‹œ๊ณ , initialize ๋ฐ showADXConsent๋Š” ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

EU ํŠธ๋ž˜ํ”ฝ์ด ์—†์œผ์‹  ๊ฒฝ์šฐ์—๋Š” setConsentState๋ฅผ ์ด์šฉํ•˜์—ฌ ADXConsentStateNotRequired๋กœ ๋™์˜ ์—ฌ๋ถ€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์‹œ๊ณ  showADXConsent ํ˜ธ์ถœ ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ƒ์„ธํ•œ ๋‚ด์šฉ์€ ํ•˜๋‹จ์˜ GDPR ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    MPMoPubConfiguration *sdkConfig = [[MPMoPubConfiguration alloc] initWithAdUnitIdForAppInitialization:<YOUR AD UNIT ID>];
    [[MoPub sharedInstance] initializeSdkWithConfiguration:sdkConfig
                                                completion:^{
         [ADXGDPR.sharedInstance showADXConsent:^(ADXConsentState consentState, BOOL success) {
         
          }];
    }];
    return YES;
}

5) Rewarded Video ์—ฐ๋™ ์„ ํƒ

MoPub/AdMob ์—ฐ๋™ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์ •์ƒ์ ์œผ๋กœ delegate method ํ˜ธ์ถœ์ด ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ์—ฐ๋™ ์ฝ”๋“œ๋งŒ ์‚ฌ์šฉํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6) Add test device

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

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

- iOS

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

์ด device ID๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๋””๋ฐ”์ด์Šค๋กœ ๋“ฑ๋กํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @[ @"aa20271272d6558e1bff61b329dd436c" ];

GDPR Guide

  • GDPR ๊ทœ์ •์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด ADXGDPR class ์—์„œ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ function์„ ์‚ฌ์šฉํ•˜์‹ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
// ADXGDPR instance return
+ (ADXGDPR *)sharedInstance;

// GDPR ๊ทœ์ •์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๊ธฐ์กด ๋™์˜ ์—ฌ๋ถ€, EU ์‚ฌ์šฉ์ž ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ง‘ ๋ฐ ์ด์šฉ์— ๋Œ€ํ•œ ๋™์˜ ํ™”๋ฉด์„ ๋…ธ์ถœํ•˜์—ฌ ๋™์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
- (void)showADXConsent:(ADXConsentCompletionBlock)completionBlock;

// ADX์—์„œ ์ œ๊ณตํ•˜๋Š” ๋™์˜ ํ™”๋ฉด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ์‹ค ๊ฒฝ์šฐ, ์•„๋ž˜ function์„ ์ด์šฉํ•˜์—ฌ ์ง์ ‘ ๋™์˜ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•˜์‹ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- (void)setConsentState:(ADXConsentState)state;

// ADXGDPR์— ์„ค์ •๋œ ์‚ฌ์šฉ์ž์˜ ๋™์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- (ADXConsentState)getConsentState;

// ADX์˜ Privacy Policy URL์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- (NSURL *)getPrivacyPolicyURL;
  • ADXConsentState๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ 4๊ฐ€์ง€ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
// ์•„์ง ๋™์˜ ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž๋กœ ์„ค์น˜ ํ›„ setConsentState๋‚˜ showADXConsent๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธํ™” ๊ด‘๊ณ ๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ADXConsentStateUnknown
// EU๋‚ด์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋™์˜์—ฌ๋ถ€๊ฐ€ ๋ถˆํ•„์š”ํ•œ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธํ™” ๊ด‘๊ณ ๊ฐ€ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
ADXConsentStateNotRequired
// ๊ฐœ์ธ์ •๋ณด ํ™œ์šฉ ๋™์˜ ํ™”๋ฉด์—์„œ ๊ฑฐ์ ˆ์„ ์„ ํƒํ•œ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธํ™” ๊ด‘๊ณ ๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ADXConsentStateDenied
// ๊ฐœ์ธ์ •๋ณด ํ™œ์šฉ ๋™์˜ ํ™”๋ฉด์—์„œ ์Šน์ธ์„ ์„ ํƒํ•œ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธํ™” ๊ด‘๊ณ ๊ฐ€ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
ADXConsentStateConfirm
  • Application ์‹คํ–‰์‹œ AppDelegate์—์„œ 1ํšŒ showADXConsent๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ฃผ์‹œ๊ฑฐ๋‚˜, setConsentState๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์˜ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • EU ํŠธ๋ž˜ํ”ฝ์ด ์—†์œผ์‹  ๊ฒฝ์šฐ์—๋Š” setConsentState๋ฅผ ์ด์šฉํ•˜์—ฌ ADXConsentStateNotRequired๋กœ ๋™์˜ ์—ฌ๋ถ€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์‹œ๊ณ  showADXConsent ํ˜ธ์ถœ ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค.
  • ๊ด‘๊ณ  ๊ด€๋ จ ์ฝ”๋“œ๋Š” showADXConsent์˜ completion block์ด ํ˜ธ์ถœ๋œ ํ›„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์„ธ์š”.
  • AD Unit ID๋Š” ๋ฐœ๊ธ‰๋ฐ›์œผ์‹  ๊ฒƒ๋“ค ์ค‘ ์ž„์˜์˜ ๊ฒƒ์„ ํ•˜๋‚˜ ์‚ฌ์šฉํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    MPMoPubConfiguration *sdkConfig = [[MPMoPubConfiguration alloc] initWithAdUnitIdForAppInitialization:<YOUR AD UNIT ID>];
    [[MoPub sharedInstance] initializeSdkWithConfiguration:sdkConfig
                                                completion:^{
         [ADXGDPR.sharedInstance showADXConsent:^(ADXConsentState consentState, BOOL success) {
         //*** success๊ฐ€ ํ˜ธ์ถœ ๋œ ํ›„ ๊ด‘๊ณ  ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
          }];
    }];
    return YES;
}
  • ADXGDPR์˜ debugState๋ฅผ ADXDebugLocateInEEA๋กœ ์„ค์ •ํ•˜๊ณ  showADXConsent๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ์‹œ๋ฉด EU ๋‚ด์—์„œ ๋…ธ์ถœ๋˜๋Š” Consent UI๋ฅผ ํ™•์ธํ•˜์‹ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
[ADXGDPR.sharedInstance setDebugState:ADXDebugLocateInEEA];
  • AdMob Rewarded Video๋ฅผ ์‚ฌ์šฉํ•˜์‹ค ๊ฒฝ์šฐ AdRequest์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด extra data๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
 GADRequest *request = [GADRequest request];
    
    //*** GDPR
    if ([ADXGDPR.sharedInstance getConsentState] == ADXConsentStateDenied) {
        GADExtras *extras = [[GADExtras alloc] init];
        extras.additionalParameters = @{@"npa": @"1"};
        [request registerAdNetworkExtras:extras];
    }
โš ๏ธ **GitHub.com Fallback** โš ๏ธ