시작하기

광고를 게재하고 수익을 올리려면 먼저 Google 모바일 광고 SDK를 앱에 통합해야 합니다. SDK를 통합하면 지원되는 광고 형식을 하나 이상 구현할 수 있습니다.

기본 요건

  • Xcode 15.3 이상 사용
  • iOS 12.0 이상 타겟팅

모바일 광고 SDK 가져오기

다음 방법 중 하나를 사용하여 Google 모바일 광고 SDK를 가져옵니다.

CocoaPods (권장)

SDK를 iOS 프로젝트로 가져오는 가장 간단한 방법은 CocoaPods를 사용하는 것입니다. 프로젝트의 Podfile을 열고 다음 행을 앱의 타겟에 추가하세요.

pod 'Google-Mobile-Ads-SDK'

그런 다음 명령줄에서 다음을 실행합니다.

pod install --repo-update

CocoaPods를 처음 사용하는 경우에는 Podfile을 만들고 사용하는 방법에 대한 공식 문서를 참고하세요.

Swift Package Manager

Google 모바일 광고 SDK는 버전 9.0.0부터 Swift Package Manager를 지원합니다. Swift 패키지를 가져오려면 다음 단계를 따르세요.

  1. Xcode에서 File(파일) > Add Packages(패키지 추가)...로 이동하여 Google 모바일 광고 Swift 패키지를 설치합니다.

  2. 표시되는 메시지에서 다음 Google 모바일 광고 Swift 패키지 GitHub 저장소를 검색합니다.

    https://github.com/googleads/swift-package-manager-google-mobile-ads.git
    
  3. 사용할 Google 모바일 광고 Swift 패키지의 버전을 선택합니다. 새 프로젝트의 경우 Up to Next Major Version(최대 다음 메이저 버전)을 사용하는 것이 좋습니다.

작업을 완료하면 Xcode에서 패키지 종속 항목을 확인하고 백그라운드에서 다운로드하기 시작합니다. 패키지 종속 항목을 추가하는 방법에 관한 자세한 내용은 Apple 도움말을 참고하세요.

수동 다운로드

  1. Google 모바일 광고 SDK를 다운로드하고 다음 프레임워크를 Xcode 프로젝트에 Embed & Sign합니다.

    • GoogleMobileAds.xcframework
    • UserMessagingPlatform.xcframework
  2. 프로젝트의 빌드 설정에서 다음을 실행합니다.

    • /usr/lib/swift 경로를 Runpath Search Paths에 추가합니다.
    • -ObjC 링커 플래그를 Other Linker Flags(기타 링커 플래그)에 추가합니다.

Info.plist 업데이트

앱의 Info.plist 파일을 업데이트하여 다음과 같은 키 2개를 추가합니다.

  1. Ad Manager app ID found in the Ad Manager UI and of the form ca-app-pub-################~##########의 문자열 값이 포함된 GADApplicationIdentifier

  2. Google(cstr6suwn9.skadnetwork)용 SKAdNetworkIdentifier 값이 포함된 SKAdNetworkItems 키를 추가하고 이러한 값을 Google에 제공한 서드 파티 구매자 선택

완성된 스니펫

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>SKAdNetworkItems</key>
<array>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cstr6suwn9.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4fzdc2evr5.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>2fnua5tdw4.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ydx93a7ass.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>p78axxw29g.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v72qych5uu.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ludvb6z3bs.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cp8zw746q7.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3sh42y64q3.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>c6k4g5qg8m.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>s39g8k73mm.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3qy4746246.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>hs6bdukanm.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>mlmmfzh3r3.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v4nxqhlyqp.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>wzmmz9fp6w.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>su67r6k2v3.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>yclnxrl5pm.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>7ug5zh24hu.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>gta9lk7p23.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>vutu7akeur.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>y5ghdn5j9k.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v9wttpbfk9.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>n38lu8286q.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>47vhws6wlr.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>kbd757ywx3.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>9t245vhmpl.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>a2p9lx4jpn.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>22mmun2rn5.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4468km3ulz.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>2u9pt9hc89.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>8s468mfl3y.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ppxm28t8ap.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>uw77j35x4d.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>pwa73g5rt2.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>578prtvx9j.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4dzt52r2t5.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>tl55sbb4fm.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>e5fvkxwrpn.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>8c4e2ghe7u.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3rd42ekr43.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3qcr597p9d.skadnetwork</string>
  </dict>
</array>

초기화를 가장 효과적으로 진행하기 위해서는 수익 그룹이 사용되는 특정 앱과 이러한 수익 그룹을 연결하는 것이 중요합니다. iOS를 타겟팅하고 특정 앱과 연결되지 않은 수익 그룹 구성이 내 계정의 모든 iOS 앱으로 전송되므로 초기화하는 데 필요한 시간이 길어질 수 있습니다.

실제 앱에서는 샘플 앱 ID를 실제Ad Manager 앱 ID로 바꿉니다. Hello World 앱에서 SDK를 실험하는 경우 샘플 ID를 사용할 수 있습니다.

모바일 광고 SDK 초기화

광고를 로드하기 전에 GADMobileAds.sharedInstance에서 startWithCompletionHandler: 메서드를 호출합니다. 이렇게 하면 SDK가 초기화되고 초기화가 완료된 후 (또는 30초의 제한 시간이 경과한 후에) 완료 핸들러를 다시 호출합니다. 이 작업은 앱 실행 시 한 번만 하면 됩니다. startWithCompletionHandler:를 최대한 빨리 호출해야 합니다.

다음은 AppDelegate에서 startWithCompletionHandler: 메서드를 호출하는 방법을 보여주는 예시입니다.

AppDelegate 예시 (발췌)

Swift

import GoogleMobileAds

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  func application(_ application: UIApplication,
      didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    GADMobileAds.sharedInstance().start(completionHandler: nil)

    return true
  }
}

SwiftUI

import GoogleMobileAds

class AppDelegate: UIResponder, UIApplicationDelegate {

  func application(_ application: UIApplication,
      didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    GADMobileAds.sharedInstance().start(completionHandler: nil)

    return true
  }
}

@main
struct YourApp: App {
  // To handle app delegate callbacks in an app that uses the SwiftUI lifecycle,
  // you must create an application delegate and attach it to your `App` struct
  // using `UIApplicationDelegateAdaptor`.
  @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

  var body: some Scene {
    WindowGroup {
      NavigationView {
        ContentView()
      }
    }
  }
}

Objective-C

@import GoogleMobileAds;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  [GADMobileAds.sharedInstance startWithCompletionHandler:nil];
  return YES;
}

@end

광고 형식 선택

이제 모바일 광고 SDK를 가져와서 초기화했으므로 광고를 구현할 준비가 되었습니다. Ad Manager 에서는 다양한 광고 형식을 제공하므로 앱의 사용자 환경에 가장 적합한 형식을 선택할 수 있습니다.

SwiftUI 개발자의 경우 SwiftUI 가이드를 따르세요.

배너 광고 단위에는 앱 레이아웃의 일부를 차지하는 직사각형 광고가 게재됩니다. 이 광고는 일정 기간 후 자동으로 새로고침됩니다. 즉 사용자가 앱에서 같은 화면에 머물러 있어도 정기적으로 새 광고가 게재됩니다. 또한 가장 구현하기 간단한 광고 형식이기도 합니다.

배너 광고 구현

전면 광고

전면 광고 단위는 앱에서 페이지 전체를 채우는 광고입니다. 게임 앱의 레벨 완료 후와 같이 앱 인터페이스에서 자연스럽게 멈추거나 전환하는 시점에 전면 광고를 게재하세요.

전면 광고 구현

네이티브

네이티브 광고는 광고 제목, 클릭 유도 문구와 같은 애셋이 앱에 표시되는 방식을 맞춤설정할 수 있는 광고입니다. 광고에 직접 스타일을 지정하여 사용자 환경을 더욱 풍부하게 만드는 자연스럽고 방해가 되지 않는 광고를 표시할 수 있습니다.

Google Ad Manager에서는 네이티브 광고를 구현하는 두 가지 방법인 네이티브 스타일과 맞춤 렌더링을 통한 표준 네이티브 광고를 제공합니다.

네이티브 스타일은 네이티브 광고의 구현을 간소화하도록 설계되었으며, 네이티브 광고 형식이 처음이라면 네이티브 스타일을 선택하는 것이 좋습니다. 맞춤 렌더링은 최대한 자유롭게 표현할 수 있도록 설계되었습니다.

네이티브 스타일 구현 네이티브 광고 구현 (맞춤 렌더링)

리워드 제공됨

보상형 광고 단위에서는 사용자가 게임을 하거나 설문조사에 참여하거나 동영상을 시청하면 코인, 추가 생명, 포인트와 같은 인앱 리워드를 제공합니다. 광고 단위별로 보상을 다르게 설정할 수 있고 사용자가 받게 될 보상 가치와 항목을 지정할 수 있습니다.

보상형 광고 구현

보상형 전면 광고

보상형 전면 광고는 자연스러운 앱 전환 시 자동으로 게재되는 광고를 통해 코인이나 추가 생명 아이템 등의 리워드를 제공할 수 있는 새로운 보상형 광고 형식입니다.

보상형 광고와 달리 사용자는 수신 동의하지 않고도 보상형 전면 광고를 볼 수 있습니다.

보상형 전면 광고에는 보상형 광고에 표시되는 수신 동의 메시지 대신 리워드를 공지하고 사용자가 원할 경우 수신 해제할 수 있는 시작 화면이 필요합니다.

보상형 전면 광고 구현

앱 오프닝 광고

앱 오프닝은 사용자가 앱을 열거나 앱으로 다시 전환할 때 표시되는 광고 형식입니다. 광고가 로드 화면을 오버레이합니다.

앱 오프닝 광고 구현