激励广告(SwiftUI)

激励广告是一种受欢迎的全屏广告格式,用户观看广告后会获得奖励。

这种广告类型的显示由用户激活,例如,为了在游戏中获得奖励或额外生命。

高度的用户积极性使得这种广告格式成为免费应用中最受欢迎和最具盈利性的广告格式。

外观

本指南介绍如何在 iOS 应用中使用 SwiftUI 集成激励广告。除代码示例外,还包含格式使用建议及其他资源链接。

前提条件

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

实施

在 SwiftUI 中集成激励广告的主要步骤:

  • 附加 .rewardedAd(isPresented:request:onEvent:) 修饰符。
  • 通过 Binding<AdRequest?> 控制加载,通过 Binding<Bool> 控制展示。
  • onEvent 中处理 RewardedAdEvent
  • .didReward 事件中向用户发放奖励。

激励广告集成说明

  1. 强烈不建议在 .didFailToLoad 后立即加载新广告。若必须在错误处理中重试,请限制次数,以免因网络限制导致连续失败请求。

  2. 请将修饰符挂在在整个展示流程中持续存在的视图上。

加载广告

要向 .rewardedAd 传入的绑定中设置非 nilAdRequest 以加载激励广告。

使用 onEventRewardedAdEvent 接收加载成功/失败及其他阶段通知。

import SwiftUI
import YandexMobileAds

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

    var body: some View {
        VStack {
            Button("加载并展示") {
                adRequest = AdRequest(adUnitID: "R-M-XXXXX-YY")
            }
        }
        .rewardedAd(isPresented: $isPresented, request: $adRequest) { event in
            switch event {
            case .didLoad:
                isPresented = true
            case .didDismiss, .didFailToShow, .didFailToLoad:
                adRequest = nil
            default:
                break
            }
        }
    }
}

需要您在 Yandex Advertising Network 中获取的广告位 ID(adUnitId)。

可通过 AdRequest 传入用户兴趣、页面上下文、位置等数据。详见广告定向

展示广告

激励广告是一种基于激励的广告格式,允许用户因观看广告而获得奖励。奖励可能是额外的生命或在游戏中晋级到下一个级别。激励广告是在应用级别确定的。

加载成功后会收到 .didLoad — 将 isPresented = true 以展示广告(或提前设置展示标志;若尚未加载完成,展示会延后)。

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

    var body: some View {
        ContentView()
            .rewardedAd(isPresented: $isPresented, request: $adRequest) { event in
                switch event {
                case .didLoad:
                    isPresented = true
                case .didDismiss, .didFailToShow, .didFailToLoad:
                    adRequest = nil
                default:
                    break
                }
            }
    }
}

发放奖励

若展示成功计为有效展示,onEvent 会收到 .didReward(Reward)。请在此向用户发放奖励;应在 .didReward 中处理,不要仅依赖 .didDismiss

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

    var body: some View {
        ContentView()
            .rewardedAd(isPresented: $isPresented, request: $adRequest) { event in
                switch event {
                case .didReward(let reward):
                    sendReward(reward)
                case .didDismiss, .didFailToShow, .didFailToLoad:
                    adRequest = nil
                default:
                    break
                }
            }
    }

    private func sendReward(_ reward: Reward) {
        // 发放奖励
    }
}

测试激励广告集成

使用演示广告位测试

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

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

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

重要

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

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

验证广告集成是否正确

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

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

YMAMobileAds.enableLogging()

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

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

其他资源

上一篇
下一篇