ADX Library
  • ADXLibrary
  • Android
    • Integrate
    • SDK Integration
      • Initialize
      • Ad Formats
        • Banner Ad
        • Interstitial Ad
        • Native Ad
        • Rewarded Ad
          • AD(X)
          • AdMob
      • Ad Error
      • Ad Revenue
        • Banner Ad
        • Interstitial Ad
        • Native Ad
        • Rewarded Ad
      • Sample Application
    • Targeting Android 12
    • Change log
  • iOS
    • Integrate
    • SDK Integration
      • Initialize
      • Ad Formats
        • Banner Ad
        • Interstitial Ad
        • Native Ad
        • Rewarded Ad
          • AD(X)
          • AdMob
      • Ad Error
      • Ad Revenue
        • Banner Ad
        • Interstitial Ad
        • Native Ad
        • Rewarded Ad
      • Sample Application
    • Supporting iOS 14+
      • App Tracking Transparency
      • SKAdNetwork ID List
    • Change log
  • Unity
    • Integrate
    • SDK Integration
      • Initialize
      • Ad Formats
        • Banner Ad
        • Interstitial Ad
        • Rewarded Ad
          • AD(X)
          • AdMob (ADX v2.4.0 미만)
          • AdMob (ADX v2.4.0 이상)
      • Ad Error
      • Ad Revenue
        • Banner Ad
        • Interstitial Ad
        • Rewarded Ad
      • Sample Application
    • Change log
  • Flutter
    • Integrate
    • SDK Integration
      • Initialize
      • Ad Formats
        • Banner Ad
        • Interstitial Ad
        • Rewarded Ad
      • Sample Application
    • Change log
  • Appendix
    • SSV Callback (Server-Side Verification)
    • UMP (User Messaging Platform)
Powered by GitBook
On this page
  • 1. 기본 요건
  • 2. 구현
  • 3. Callback
  • 4. 테스트 기기 등록

Was this helpful?

  1. iOS
  2. SDK Integration
  3. Ad Formats
  4. Rewarded Ad

AdMob

PreviousAD(X)NextAd Error

Last updated 8 months ago

Was this helpful?

1. 기본 요건

  • 를 프로젝트에 추가합니다.

  • Rewarded Ad용으로 발급받은 AdMob Ad Unit ID를 사용합니다.

  • 광고를 요청하기 전에 를 먼저 진행해야 합니다.

    • SDK 초기화는 앱 실행 시 한 번만 호출하여 주시고, 광고 요청은 초기화가 완료된 후에 이뤄져야 합니다.

    • iOS 14 이상 지원하는 경우, 권한 요청 완료 후 광고를 요청해주세요.

  • Info.plist 파일에 GADApplicationIdentifier 키와 발급된 AdMob APP ID를 추가합니다.

    GADApplicationIdentifier를 추가하지 않으면 다음 메시지가 표시되며 앱이 비정상 종료됩니다.The Google Mobile Ads SDK was initialized incorrectly.


    <key>GADApplicationIdentifier</key>
    <string>ADMOB_APP_ID</string>

2. 구현

Rewarded Ad load에 시간이 걸릴 수 있으니, 미리 load 해두신 다음 사용하시는 것을 권장드립니다.

  1. GADRequest를 생성합니다.

    • GDPR 관련 규정을 준수하는 경우, 사용자가 개인정보 활용 및 수집을 거부한 상태(ADXConsentStateDenied)일 때 npa를 1로 추가합니다.

  2. GADRewardedAd 의 loadWithAdUnitID:request:completionHandler: 메서드로 광고를 로드합니다.

  3. 광고 로드가 완료되면 GADFullScreenContentDelegate callback을 등록합니다.

  4. GADRewardedAd 의 presentFromRootViewController:userDidEarnRewardHandler:로 광고를 표시합니다.

  5. 광고 시청을 모두 완료하면 GADUserDidEarnRewardHandler 객체에서 보상을 지급하도록 처리합니다.

#import <ADXLibrary/ADXGdprManager.h>
@import GoogleMobileAds;

@interface AdMobRewardViewController () <GADFullScreenContentDelegate>

@property (nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation AdMobRewardViewController

- (void)viewDidLoad {
    [super viewDidLoad];
 
    [self createAndLoadRewardedAd];
}

- (void)createAndLoadRewardedAd {                   
    GADRequest *request = [GADRequest request];
    //*** GDPR
    if ([ADXGdprManager sharedInstance].consentState == ADXConsentStateDenied) {
        GADExtras *extras = [[GADExtras alloc] init];
        extras.additionalParameters = @{@"npa": @"1"};
        [request registerAdNetworkExtras:extras];
    }
  
    [GADRewardedAd loadWithAdUnitID:@"<ADMOB_REWARD_AD_UNIT_ID>" request:request completionHandler:^(GADRewardedAd *rewardedAd, NSError *error) {
        if (error) {
            // Handle ad failed to load case.
        } else {
            // Ad successfully loaded.
            self.rewardedAd = rewardedAd;
            self.rewardedAd.fullScreenContentDelegate = self;
        }
    }]; 
}

- (IBAction)selectShowAd:(id)sender {
    if (self.rewardedAd) {
        [self.rewardedAd presentFromRootViewController:self userDidEarnRewardHandler:^{
            GADAdReward *reward = self.rewardedAd.adReward;
            // TODO: Reward the uesr!
        }];
    } else {
        NSLog(@"Ad wasn't ready");
        [self createAndLoadRewardedAd];
    }
}

#pragma mark - GADFullScreenContentDelegate

- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
    [self createAndLoadRewardedAd];
}

@end
import UIKit

import ADXLibrary
import GoogleMobileAds

class AdMobRewardViewController: UIViewController {
    var rewardedAd: GADRewardedAd?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        createAndLoadRewardedAd()
    }
    
    func createAndLoadRewardedAd() {
        let request = GADRequest()
        //*** GDPR
        if ADXGdprManager.sharedInstance().consentState == .denied {
            let extras = GADExtras()
            extras.additionalParameters = ["npa": "1"]
            request.register(extras)
        }
        
        GADRewardedAd.load(withAdUnitID: "<ADMOB_REWARD_AD_UNIT_ID>", request: request) { (rewardedAd, error) in
            if let error = error {
                print("Loading failed: \(error)")
            } else {
                print("Loading Succeeded")
                self.rewardedAd = rewardedAd;
                self.rewardedAd?.fullScreenContentDelegate = self;
            }
        }
    }
    
    @IBAction func selectShowAd(_ sender: Any) {
        if (rewardedAd != nil) {
            rewardedAd?.present(fromRootViewController: self, userDidEarnRewardHandler: {
                if let reward = self.rewardedAd?.adReward {
                    print("Reward received with currency: \(reward.type), amount \(reward.amount).")
                }
            })
        } else {
            createAndLoadRewardedAd()
        }
    }
}

// MARK: - GADFullScreenContentDelegate
extension AdMobRewardViewController: GADFullScreenContentDelegate {

    func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        print("Rewarded ad dismissed.")
        createAndLoadRewardedAd()
    }
}

3. Callback

GADFullScreenContentDelegate를 설정하여 특정 이벤트를 수신할 수 있습니다. 필요에 따라 구현해주세요.

GADRewardedAd는 일회용 객체로 보상형 광고가 표시된 후에는 다시 표시되지 않습니다.

이전 광고가 닫힌 직후 다음 보상형 광고가 로드될 수 있도록 adDidDismissFullScreenContent: 에 다른 보상형 광고를 로드하는 것이 좋습니다.

#pragma mark - GADFullScreenContentDelegate

/// Tells the delegate that an impression has been recorded for the ad.
- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad;

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(id<GADFullScreenPresentingAd>)ad didFailToPresentFullScreenContentWithError:(NSError *)error;

/// Tells the delegate that the ad presented full screen content.
- (void)adDidPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad;

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad;

4. 테스트 기기 등록

개발 중 상용 광고 키로 광고를 테스트하려는 경우 아래 단계에 따라 테스트 기기를 등록 후 사용해주시기 바랍니다.

테스트 기기 미등록 상태로 테스트할 경우 계정이 정지될 수 있습니다.

1) ADXLibrary를 적용 후 광고를 로드하는 코드가 삽입된 상태로 실행해주시면 콘솔에서 해당 로그를 확인하실 수 있습니다.

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

2) 출력된 Device ID를 복사하여 아래와 같이 testDeviceIdentifiers를 통해 테스트 기기를 등록해주시면 됩니다.

앱을 출시하기 전에 이러한 테스트 기기를 설정하는 코드를 반드시 삭제하세요.

GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @[ @"aa2027
ATT(App Tracking Transparency)
SDK 초기화
ADX iOS SDK