设置 Google 移动广告 SDK

要展示广告并赚取收入,第一步是将 Google Mobile Ads SDK 集成到应用中。集成该 SDK 后,您就可以实施一种或多种支持的广告格式

前提条件

  • 使用 Xcode 16.0 或更高版本
  • 以 iOS 13.0 或更高版本为目标平台

导入 Google Mobile Ads SDK

使用以下方法之一导入 Google Mobile Ads SDK

Swift Package Manager

若要向项目添加软件包依赖项,请按照以下步骤操作:

  1. 在 Xcode 中,依次前往 “File”(文件)>“Add Package Dependencies…”(添加软件包依赖项…),安装 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(更新至下一主要版本前的最新版)规则。

CocoaPods

在继续之前,请参阅使用 CocoaPods,了解如何创建和使用 Podfile。

如需使用 CocoaPods,请按照以下步骤操作:

  1. 打开项目的 Podfile,并将下面这行代码添加到应用的 target build 配置中:

    pod 'Google-Mobile-Ads-SDK'
  2. 在终端运行:

    pod install --repo-update

手动下载

  1. 下载 Google Mobile Ads SDK,并对以下框架执行 Embed & Sign 操作,将其纳入您的 Xcode 项目:

    • GoogleMobileAds.xcframework
    • UserMessagingPlatform.xcframework
  2. 在项目的 build 设置中:

    • /usr/lib/swift 路径添加到 Runpath Search Paths(Runpath 搜索路径)。
    • -ObjC 链接器标志添加到 Other Linker Flags(其他链接器标志)。

更新您的 Info.plist

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

  1. 一个 GADApplicationIdentifier 键,其字符串值为您的 Ad Manager 应用 ID(可在 Ad Manager 界面中找到)且格式为 ca-app-pub-################~##########

  2. 一个 SKAdNetworkItems 键,其 SKAdNetworkIdentifier 值对应于 Google (cstr6suwn9.skadnetwork) 以及向 Google 提供了这些值的特定第三方买家

完整代码段

<key>GADApplicationIdentif<ier/ke<y>
!-- Sample Ad Manager app ID: ca-app-pub-3940256099942544~1458002>5<11 --
string>SAMP<LE_APP_ID</string>
key>S<KAdNet<workItems</key>
a<rray>
  dict>
    k<ey>SKAd<NetworkIdentifier/key>
   < string><cstr6suwn<9.skadnetw<ork/string>
  /dict><;
  dict&g<t;
    key>SKAdNetworkIden<tifier/key&<gt;
    s<tring>4<fzdc2evr5.skadnetwork/str<ing>
  </dict>
  dict>
    key&<gt;SKAdNetw<orkIdenti<fier/key&g<t;
    string>2fnua5td<w4.skadnet<work/string>
  /dict>
 < dict>
 <   key><;SKAdNetwo<rkIdentifier/key>
    <string><ydx93a7ass.skadnetwork/string<>
  /dic<t>
  d<ict>
  <  key>SKAdNetworkIdent<ifier/key&<gt;
    string>p78axxw29g.<skadnetwork</string&g<t;
  /dict<>
  dict>
    key&g<t;SKAdNetw<orkIdentifier/key>
    str<ing>v72q<ych5uu.sk<adnetwork/<string>
  /dict>
  <dict>
 <   key>SKAdNetworkIdentifi<er/key>
<    strin<g>ludvb<6z3bs.skadnetwork/string&<gt;
  /dic<t>
  dict>
    key>S<KAdNetworkI<dentifier</key>
 <   string>cp8zw746q7.s<kadnetwork</string>
  /dict>
  dic<t>
    k<ey>SKA<dNetworkId<entifier/key>
    stri<ng>3sh4<2y64q3.skadnetwork/string><
  /dict><;
  dict&<gt;
    ke<y>;SKAdNetworkIdentifie<r/key>
<    string>c6k4g5qg8m.skad<network/str<ing>
 < /dict><
  dict>
    key>SK<AdNetworkI<dentifier/key>
    string&<gt;s39g8k73<mm.skadne<twork/stri<ng&gt;
  /dict>
  dict<>
    k<ey>SKAdNetworkIdentifier/k<ey>
    <string><;wg4vff78z<m.skadnetwork/string>
<  /dict><;
  dict>
    key>SKAdN<etworkIdent<ifier/key<>
    s<tring>3qy4746246.skadn<etwork/str<ing>
  /dict>
  dict><;
    key&g<t;SKAdNet<workIdenti<fier/key>
    string&g<t;f38h382j<lk.skadnetwork/string>
  /<dict>
  <dict>
<    key><;SKAdNetworkIdentifier/ke<y>
    <string>hs6bdukanm.skadnetw<ork/string&<gt;
  /di<ct>
  d<ict&gt;
    key>SKAdNe<tworkIdent<ifier/key>
    string>m<lmmfzh3r3.s<kadnetwor<k/string&g<t;
  /dict>
  dict><
    key&g<t;SKAdNetworkIdentifier/key&g<t;
    stri<ng>v4n<xqhlyqp.sk<adnetwork/string>
  /d<ict>
  <dict>
    key>SKAdNetwo<rkIdentifie<r/key><
    strin<g>;wzmmz9fp6w.skadnetwo<rk/string&<gt;
  /dict>
  dict>
  <  key>SK<AdNetwork<Identifier</key>
    string>su<67r6k2v3.s<kadnetwork/string>
  /dict<>
  dict<>
    <key>SKA<dNetworkIdentifier/key><;
    stri<ng>yclnxrl5pm.skadnetwork/<string>
<  /dict&g<t;
  dict&<gt;
    key>SKAdNetwor<kIdentifie<r/key>
    string>t38b2<kh725.skadn<etwork/st<ring>
 < /dict>
  dict>
   < key>SK<AdNetworkIdentifier/key>
 <   string&g<t;7ug5zh2<4hu.skadne<twork/string>
  /dict&<gt;
  dict<>
    key>SKAdNetworkId<entifier/ke<y>
   < string><;gta9lk7p23.skadnetwork/s<tring>
<  /dict>
  dict>
    ke<y>SKAdNe<tworkIden<tifier/key<>
    string>vutu7a<keur.skadn<etwork/string>
  /dict><
  dict><
    key&<gt;SKAdNet<workIdentifier/key>
  <  string&g<t;y5ghdn5j9k.skadnetwork/stri<ng>
  /d<ict>
 < dict>
<    key>SKAdNetworkIde<ntifier/ke<y>
    string>v9wttpbfk<9.skadnetwo<rk/string<>
  /di<ct&gt;
  dict>
    key<>SKAdNe<tworkIdentifier/key>
    s<tring>n3<8lu8286q.<skadnetwor<k/string>
  /dict>
<  dict><
    key>SKAdNetworkIdenti<fier/key><;
    str<ing>47v<hws6wlr.skadnetwork/strin<g>
  /d<ict>
  dict>
    key><;SKAdNetwor<kIdentifi<er/key><
    string>kbd757ywx3<.skadnetwo<rk/string>
  /dict>
  d<ict>
   < key>S<KAdNetwork<Identifier/key>
    st<ring>9t<245vhmpl.skadnetwork/string&g<t;
  /dict&<gt;
  dic<t>
    <key&gt;SKAdNetworkIdentif<ier/key><;
    string>a2p9lx4jpn.sk<adnetwork/s<tring><
  /dict&g<t;
  dict>
    key><SKAdNetwor<kIdentifier/key>
    strin<g>22mmun<2rn5.skad<network/st<ring>
  /dict>
  di<ct>
   < key>SKAdNetworkIdentifier</key>
  <  string&<gt;44jx675<5aq.skadnetwork/string><;
  /dict&<gt;
  dict>
    key>SKA<dNetworkIde<ntifier/k<ey>
   < string>k674qkevps.ska<dnetwork/s<tring>
  /dict>
  dict&<gt;
    key<>SKAdN<etworkIden<tifier/key>
    string<>4468km<3ulz.skadnetwork/string>
 < /dict>
<  dict><;
    key&<gt;SKAdNetworkIdentifier/<key>
  <  string>2u9pt9hc89.skadne<twork/strin<g>
  /<dict>
 < dict>
    key>SKAd<NetworkIde<ntifier/key>
    string><;8s468mfl3y<.skadnetw<ork/string<>
  /dict>
  dict&g<t;
    key<>SKAdNetworkIdentifier/key<>
    st<ring>k<lf5c3l5u5.<skadnetwork/string>
  </dict>
<  dict>
    key>SKAdNet<workIdentif<ier/key&g<t;
    str<ing&gt;ppxm28t8ap.skadnet<work/strin<g>
  /dict>
  dict>
<    key><SKAdNetwo<rkIdentifi<er/key>
    string><kbmxgpxpgc<.skadnetwork/string>
  /di<ct>
  di<ct>
  <  key>S<KAdNetworkIdentifier/key&<gt;
    st<ring>uw77j35x4d.skadnetwor<k/string><;
  /dict<>
  dic<t>;
    key>SKAdNetw<orkIdentif<ier/key>
    string>578<prtvx9j.ska<dnetwor<k/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>c3frkrj4fj.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>97r2b46745.skadnetwork/string>
  /dict>
  dict>
    key>SKAdNetworkIdentifier/key>
    string>3qcr597p9d.skadnetwork/string>
  /dict>
/array>

SAMPLE_APP_ID 替换为您的 Ad Manager 应用 ID。在测试期间,请使用上例中显示的示例应用 ID。

为获得最佳初始化效果,请务必将您的收益组与使用这些收益组的特定应用关联起来。凡是定位到 iOS 且未与任何特定应用关联的收益组配置,都会发送到您账号中的所有 iOS 应用中,因而可能会延长初始化所需的时间。

初始化 Google Mobile Ads SDK

加载广告之前,应先调用 GADMobileAds.sharedInstancestart() 方法,该方法将初始化相应 SDK,并在初始化完成后或 30 秒超时后回调完成处理程序。应尽早调用 start()

Swift

// Initialize the Google Mobile Ads SDK.
MobileAds.shared.start()

SwiftUI

// Initialize the Google Mobile Ads SDK.
MobileAds.shared.start()

Objective-C

// Initialize the Google Mobile Ads SDK.
[GADMobileAds.sharedInstance startWithCompletionHandler:nil];

选择一种广告格式

Google Mobile Ads SDK 现已导入并初始化,您随时可以植入广告了。Ad Manager 提供了许多不同的广告格式,以便您从中选择一种与您的应用的用户体验最契合的广告格式。

横幅广告单元将展示占用应用部分版面的矩形广告。这种广告可在设定好的一段时间后自动刷新。也就是说,即使用户停留在应用中的同一个屏幕上,他们也会每隔一段时间就看到新广告。此种广告格式也是最容易植入的。

植入横幅广告

插页式广告

插页式广告单元用于在您的应用中展示全屏广告。请将这些广告单元放置在应用界面中的自然间歇点和过渡点,比如在游戏应用中过关后。

植入插页式广告

原生广告

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

Google Ad Manager 提供了两种植入原生广告的方法:原生样式和通过自定义呈现实现的标准原生广告。

原生样式旨在简化原生广告的植入过程。如果您刚接触这种格式的广告,那么这种方法是不错的选择。自定义呈现旨在为您提供尽可能大的自由发挥空间来设计广告展示效果。

实现原生样式 实现原生广告(自定义呈现)

激励广告

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

植入激励广告

插页式激励广告

插页式激励广告是一种激励用户的新型广告格式,采用这种格式时,您可以在应用中的自然过渡点自动展示广告,并向选择观看这些广告的用户提供奖励,如金币或额外生命。

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

与激励广告中提供选择观看提示不同,插页式激励广告需要提供一个介绍画面来告知用户提供何种奖励,并让用户可以自主选择退出广告。

植入插页式激励广告

开屏广告

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

植入开屏广告