Başla

本指南适用于希望借助 AdMob 通过 iOS 应用创收但不使用 Firebase 的发布商。如果您计划在应用中添加 Firebase(或正考虑使用),请改为参阅本指南的搭配使用 AdMob 版本。

要展示广告并赚取收入,第一步是将 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. 在项目的 build 设置中,将 -ObjC 链接器标志添加到 Other Linker Flags

更新您的 Info.plist

更新应用的 Info.plist 文件以添加两个键:

  1. 字符串值为AdMob app ID found in the AdMob UIGADApplicationIdentifier 键。

  2. 一个 SKAdNetworkItems 键,其中包含 SKAdNetworkIdentifier 值,适用于 Google (cstr6suwn9.skadnetwork) 以及已向 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>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>

如果您尚未创建 AdMob 帐号注册应用,正好可借此机会完成这两项任务。

在真实应用中,将示例应用 ID 替换为您的实际AdMob 应用 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 现已导入并初始化,您随时可以植入广告了。 AdMob 提供了许多不同的广告格式,您可以根据您应用的用户体验选择最适合的一种。

对于 SwiftUI 开发者,请按照我们的 SwiftUI 指南操作。

横幅广告单元展示会占用应用部分布局的矩形广告。它们可以在设定的一段时间后自动刷新。这意味着,用户会定期查看新广告,即使他们停留在您的应用中的同一个屏幕上也可以。此类广告也是最容易植入的广告格式。

植入横幅广告

插页式广告

插页式广告单元会在您的应用中展示全屏广告。请在应用界面中的自然停顿点和过渡点展示这些广告,例如在游戏应用中通过关卡后。

植入插页式广告

原生

在原生广告中,您可以自定义素材资源(例如标题和号召性用语)在应用中的呈现方式。通过自行设置广告样式,您可以呈现出自然、不突兀的广告展示效果,从而使用户体验更加丰富。

植入原生广告

已奖励

激励广告单元让用户能够通过玩游戏、参与问卷调查或观看视频来获得应用内奖励,例如金币、额外的生命或积分。您可以为不同的广告单元设置不同的奖励,并指定用户获得的奖励价值和奖品。

植入激励广告

插页式激励广告

插页式激励广告是一种激励用户的新型广告格式,借助这种格式,您可以通过在应用中的自然过渡点自动展示的广告向用户提供奖励,比如金币或额外的生命值。

与激励广告不同,用户无需自行选择即可观看插页式激励广告。

与激励广告中的“选择观看”提示不同,插页式激励广告需要一个介绍画面,在其中公布奖励,并让用户有机会自主选择退出观看。

植入插页式激励广告

开屏广告

开屏广告是一种会在用户打开或切换回您的应用时显示的广告格式。这种广告会叠加在加载屏幕上。

植入开屏广告