시작하기

광고를 게재하고 수익을 올리려면 먼저 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. 프로젝트의 빌드 설정에서 -ObjC 링커 플래그를 기타 링커 플래그에 추가합니다.

Info.plist 업데이트

앱의 Info.plist 파일을 업데이트하여 키 두 개를 추가합니다.

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

  2. Google(cstr6suwn9.skadnetwork) 및 Google에 이러한 값을 제공한 일부 서드 파티 구매자SKAdNetworkIdentifier 값이 포함된 SKAdNetworkItems

전체 스니펫

<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>4pfyvq9l8r.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>5a6flpkh64.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>f38h382jlk.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>hs6bdukanm.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>yclnxrl5pm.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>t38b2kh725.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>n6fk4nfna4.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>eh6m2bh4zr.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>klf5c3l5u5.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ppxm28t8ap.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ecpz2srf59.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>mlmmfzh3r3.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>e5fvkxwrpn.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>8c4e2ghe7u.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>zq492l623r.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에서는 네이티브 광고를 구현하는 두 가지 방법, 즉 네이티브 스타일과 맞춤 렌더링을 통한 표준 네이티브 광고를 제공합니다.

네이티브 스타일은 네이티브 광고의 구현을 간소화하도록 설계되었으므로, 네이티브 광고를 처음 사용하는 경우 이 스타일을 선택하는 것이 좋습니다. 맞춤 렌더링은 최대한 자유롭게 프레젠테이션을 만들 수 있도록 설계되었습니다.

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

리워드 제공됨

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

보상형 광고 구현

보상형 전면 광고

보상형 전면 광고는 자연스러운 앱 전환 중에 자동으로 게재되는 광고에 대해 코인이나 추가 생명 등의 보상을 제공할 수 있는 새로운 유형의 인센티브형 광고 형식입니다.

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

보상형 전면 광고에는 보상형 광고의 수신 동의 메시지 대신 리워드를 알리고 사용자가 거부할 수 있는 인트로 화면이 필요합니다.

보상형 전면 광고 구현

앱 오프닝 광고

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

앱 오프닝 광고 구현