插屏广告 (SwiftUI)

插屏广告是一种全屏广告格式,嵌入在应用内容中,在自然暂停时显示,例如在游戏关卡之间过渡或完成目标操作时。

当应用展示插屏广告时,用户可以选择:点击广告并前往广告主的网站,或关闭广告并返回应用。

插屏广告吸引了用户对广告的全部注意力,这便是其 CPM 更高的原因。

外观

本指南展示了如何使用 SwiftUI 将开屏广告集成到 iOS 应用中。 除了代码示例和说明之外,它还提供使用此广告格式的建议和其他资源的链接。

前提条件

  1. 请按照 快速入门 中描述的 SDK 集成步骤进行操作。
  2. 提前 初始化 您的广告 SDK。
  3. 确保您运行的是最新的 Yandex Mobile Ads SDK 版本。如果您使用聚合,请同时确保您运行的是最新版本的 统一构建

实施

在 SwiftUI 中集成插屏广告的关键步骤:

  • .interstitialAd(isPresented:request:onEvent:) 修饰符附加到根(或相关)View
  • 通过 Binding<AdRequest?> 控制加载:非 nil 值将开始加载。
  • 通过 Binding<Bool> 控制展示:值为 true 时展示已加载的广告(如果加载仍在进行中,展示将延迟至加载完成)。
  • 如果您通过 Adfox 工作(通过 AdRequest 参数),请传递其他设置
  • onEvent 闭包中处理生命周期 (InterstitialAdEvent)。

插屏广告集成说明

  1. 强烈建议在 .didFailToLoad 事件回调中收到错误时不要尝试加载新广告。 如果需要从错误处理程序中重试加载,请限制重新加载尝试次数,以避免在网络连接受限的情况下广告请求连续失败。

  2. 将修饰符保留在整个展示场景中一直存在的视图上(例如,在某个屏幕或导航根视图上),以避免丢失加载状态。

加载并展示广告

对于 SwiftUI 中的插屏广告,使用包含广告单元 ID 和两个状态的 AdRequest:可选请求和展示标记。

要接收有关加载成功或失败、展示、关闭和错误的通知,请将 onEvent 闭包与 InterstitialAdEvent 枚举一起使用。

import SwiftUI
import YandexMobileAds

struct InterstitialView: View {
    @State private var adRequest: AdRequest?
    @State private var isPresented = false

    var body: some View {
        VStack {
            Button("Load and show") {
                adRequest = AdRequest(adUnitID: "R-M-XXXXX-YY")
            }
        }
        .interstitialAd(isPresented: $isPresented, request: $adRequest) { event in
            switch event {
            case .didLoad:
                isPresented = true
            case .didDismiss, .didFailToShow, .didFailToLoad:
                adRequest = nil
            default:
                break
            }
        }
    }
}

广告单元 ID (adUnitId) 从 Yandex Advertising Network 界面获取。

您可以通过 AdRequest 在初始化器中传递用户兴趣数据、页面上下文数据、位置或其他附加数据来扩展广告请求参数。 请求中的附加上下文数据可以显著提高广告质量。 有关更多信息,请参阅广告定位

示例:单独启动加载,然后在准备就绪时展示广告:

struct InterstitialView: View {
    @State private var adRequest: AdRequest?
    @State private var isPresented = false

    func loadAd() {
        adRequest = AdRequest(adUnitID: "R-M-XXXXX-YY")
    }

    func showAd() {
        isPresented = true
    }

    var body: some View {
        VStack {
            Button("Load", action: loadAd)
            Button("Show", action: showAd)
        }
        .interstitialAd(isPresented: $isPresented, request: $adRequest) { event in
            if case .didLoad = event {
                // 您可以调用 showAd() 或设置 isPresented = true
            }
        }
    }
}

如果在加载完成前设置 isPresented = true,则在成功加载后会自动执行展示。

展示广告

插屏广告应在应用使用的自然暂停期间展示。 一个很好的例子是在游戏关卡间或完成目标操作后,例如在文件下载完成后。

加载成功后,将触发 .didLoad 事件 — 设置 isPresented = true 以展示广告(或提前设置展示标记,请参见上文)。

广告关闭、展示错误发生或加载错误发生后,isPresented 标记将被重置为 false

测试插屏广告集成

使用演示版位进行广告测试

我们建议使用测试广告来测试您的广告集成和应用本身。

为了保证为每个广告请求返回测试广告,我们创建了一个特殊的演示广告版位 ID。用它来检查您的广告集成。

演示广告单元 ID:demo-interstitial-yandex

重要

在商店中发布您的应用程序之前,确保将演示版位 ID 替换为您在 Yandex Advertising Network 界面中获得的真实 ID。

您可以在 用于测试的演示广告单元 部分找到可用的演示广告版位 ID 列表。

验证广告集成的正确性

您可以使用本机控制台工具测试广告集成。

要查看详细日志,请调用 YMAMobileAds 类的 enableLogging 方法。

YMAMobileAds.enableLogging()

要查看 SDK 日志,请前往控制台工具并设置 Subsystem = com.mobile.ads.ads.sdk。您还可以按类别和错误级别过滤日志。

如果您在集成广告时遇到问题,您将获得有关问题的详细报告以及如何解决这些问题的建议。

其他资源