跳到主内容
精选85RevenueCat 博客(RSS)产品与增长

无付费墙变现:用激励广告替代内购的完整配置指南

How (and why) I monetized a game with a rewarded ad and no paywall

原文
推荐理由

给做 App 或游戏的读者一套可直接照做的混合变现方案:从 AdMob 配置到 Entitlement 奖励设置,再到代码检查,步骤和参数齐全,今天就能动手试。

My wife knows very well that I’m someone who is determined to find the best parking spot in a lot. We started talking, as I circled parking lots, about some of my criteria for a great spot, and I thought: “This would make a great game.” So I built it. It's called Curb Appeal. You get 10 rounds, a parking lot, a timer, and one job: pick the best spot.

我妻子非常清楚,我是一个在停车场里非要找到最佳停车位的人。当我绕着停车场转圈时,我们开始聊起我对一个好车位的一些标准,我心想:“这可以做成一个很棒的游戏。”于是我就把它做出来了。它叫“路边吸引力”。你有10轮机会、一个停车场、一个计时器,以及一项任务:选出最佳车位。

But the interesting part isn't the game. It's how it makes money. There's no paywall, no subscription, no in-app purchase (IAP). There's one button that says 'Watch Ad to Play', and behind that button is RevenueCat Ads.

但有趣的部分不是游戏本身,而是它如何赚钱。没有付费墙、没有订阅、没有内购(IAP)。只有一个按钮写着“看广告来玩”,而这个按钮背后是RevenueCat Ads。

Keep in mind that although I used this to make a game, RevenueCat Ads can also work for an app you’re building, such as a Photo Editing app that lets you watch an ad to unlock a premium filter, or a Messaging app that unlocks premium sticker packs with ads.

请注意,虽然我用它做了一个游戏,但RevenueCat Ads也适用于你正在构建的应用,比如一个照片编辑应用,让用户看广告解锁高级滤镜,或者一个消息应用,用广告解锁高级贴纸包。

Watch on YouTube

在YouTube上观看

RevenueCat Ads does two things right now

RevenueCat Ads目前做两件事

Ad revenue tracking ties ad money to the same user as your purchases

广告收入跟踪将广告收入与你的购买用户关联起来

The obvious pitch is that you stop bouncing between AdMob and RevenueCat to figure out what your app actually made. True, and nice. But the better pitch is underneath that: your ad revenue gets tied to the same user as your subscription and IAP data.

显而易见的卖点是,你不再需要在AdMob和RevenueCat之间来回切换来弄清楚你的应用实际赚了多少钱。这确实不错。但更好的卖点在于其背后:你的广告收入会与订阅和IAP数据关联到同一个用户。

That means ad revenue folds into your revenue chart and into realized LTV. You get blended revenue per user instead of two disconnected numbers you're eyeballing across two tabs. There's also a dedicated ads section in RevenueCat Charts and an ads tab on individual customer profiles, so "is this free user actually worth anything?" becomes a question you can just look up.

这意味着广告收入会并入你的收入图表和已实现的LTV中。你得到的是每个用户的混合收入,而不是在两个标签页中盯着两个不相关的数字。RevenueCat Charts中还有一个专门的广告部分,以及单个客户资料上的广告标签,所以“这个免费用户到底有没有价值?”变成了一个你可以直接查询的问题。

Francie wrote the full breakdown of the tracking side when it went into public beta: every metric, what shows up where, and how the SDK integration works. If you're on AdMob, it's mostly swapping your ad loading calls for RevenueCat's loadAndTrack methods. Make sure to turn on ‘Impression-Level Ad Revenue’ for it to track correctly.

Francie在公开测试版发布时写了关于跟踪方面的完整解析:每个指标、显示在哪里,以及SDK集成如何工作。如果你在使用AdMob,主要是将你的广告加载调用替换为RevenueCat的loadAndTrack方法。确保开启“展示级广告收入”以便正确跟踪。

Start there if tracking is what you came for. The rest of this post is the other half.

如果你是为了跟踪而来,那就从那里开始。这篇文章的其余部分是另一半内容。

Ad rewards grant virtual currency or a timed Entitlement (this is new)

广告奖励授予虚拟货币或限时权益(这是新功能)

A user finishes a rewarded ad, AdMob fires a server-side verification (SSV) callback to RevenueCat, and RevenueCat verifies it and grants the reward. You don't build the verification layer. You don't build the granting layer. You just configure it in the dashboard.

用户看完奖励广告后,AdMob向RevenueCat发送服务器端验证(SSV)回调,RevenueCat验证并授予奖励。你不需要构建验证层,也不需要构建授予层。你只需在仪表板中配置即可。

Two kinds of rewards:

两种奖励类型:

  • Virtual currency: coins, credits, gems, tokens, whatever your economy uses
  • Entitlements: actual RevenueCat Entitlements, granted for a duration
  • 虚拟货币:金币、积分、宝石、代币,无论你的经济系统用什么
  • 权益:实际的RevenueCat权益,按持续时间授予

That second one is the interesting part. An Entitlement is just a level of access. Normally you get one by paying, but now, you can earn one by watching an ad. Same Entitlement check in your code either way.

第二个是有趣的部分。Entitlement 只是一个访问级别。通常你通过付费获得,但现在,你可以通过观看广告来赚取。无论哪种方式,你的代码中的 Entitlement 检查都是相同的。

Before you start: what you need in place

开始之前:你需要准备什么

Three prerequisites:

三个前提条件:

  • An AdMob account with a rewarded ad unit, connected to your RevenueCat project so your ad units sync to the dashboard.
  • Server-side verification enabled on that ad unit in the AdMob console, pointing at RevenueCat's SSV callback URL. It's one shared endpoint for every ad unit, and RevenueCat works out which unit and which user from what the SDK attaches at show time.
  • The RevenueCat SDK (purchases-ios 5.80.3 or later (iOS 15+), or purchases-android 10.12.0 or later).
  • 一个 AdMob 账户,带有奖励广告单元,并连接到你的 RevenueCat 项目,以便你的广告单元同步到仪表板。
  • 在 AdMob 控制台中对该广告单元启用服务器端验证,指向 RevenueCat 的 SSV 回调 URL。这是所有广告单元共享的一个端点,RevenueCat 根据 SDK 在展示时附加的信息来确定是哪个单元和哪个用户。
  • RevenueCat SDK(purchases-ios 5.80.3 或更高版本(iOS 15+),或 purchases-android 10.12.0 或更高版本)。

The AdMob adapter that makes this a two-line change is iOS and Android only. On Flutter, React Native, Unity, or Kotlin Multiplatform, you take the manual path: generate a verification token, attach it to your ad's SSV options, then poll for the result. That needs purchases_flutter 10.6.0+, react-native-purchases 10.5.0+, purchases-unity 9.8.0+, or purchases-kmp 3.5.0+.

使这变成两行更改的 AdMob 适配器仅适用于 iOS 和 Android。在 Flutter、React Native、Unity 或 Kotlin Multiplatform 上,你走手动路径:生成验证令牌,将其附加到广告的 SSV 选项,然后轮询结果。这需要 purchases_flutter 10.6.0+、react-native-purchases 10.5.0+、purchases-unity 9.8.0+ 或 purchases-kmp 3.5.0+。

Ad revenue also doesn't count toward Monthly Tracked Revenue right now, which means the feature is free to use.

广告收入目前也不计入月度跟踪收入,这意味着该功能是免费使用的。

The ad monetization docs walk through every step. Point your agent at them: it can read the docs, do the implementation, and debug it when something's off (that’s what I did!).

广告变现文档逐步介绍了每个步骤。让你的代理参考它们:它可以阅读文档、实施,并在出错时进行调试(我就是这么做的!)。

How to set up RevenueCat Ads Entitlements in your dashboard

如何在你的仪表板中设置 RevenueCat 广告 Entitlement

1. Create the Entitlement: Product catalog → Entitlements → new Entitlement. I called mine play_game, because that's what it does.

1. 创建 Entitlement:产品目录 → Entitlements → 新建 Entitlement。我将其命名为 play_game,因为这就是它的作用。

One thing worth knowing: you do not need to attach a product to that Entitlement for ad rewards to work. But you also don't have to choose between ads and purchases for the same Entitlement — you can attach both. A user gets access either by subscribing or by watching an ad, and your code only ever checks one thing: is play_game active.

有一点值得了解:你不需要为广告奖励将产品附加到该 Entitlement 上。但你不必在广告和购买之间为同一个 Entitlement 做选择——你可以同时附加两者。用户要么通过订阅,要么通过观看广告获得访问权限,而你的代码只检查一件事:play_game 是否激活。

Say you're running a Pro tier that gates your whole app behind a subscription. Attach an ad reward to that same pro Entitlement, and now a non-payer can earn Pro access for 30 minutes by watching an ad, on the exact same Entitlement your subscribers already have.

假设你运行一个 Pro 层级,将整个应用置于订阅之后。将广告奖励附加到同一个 pro Entitlement 上,现在非付费用户可以通过观看广告获得 30 分钟的 Pro 访问权限,使用与你订阅用户完全相同的 Entitlement。

For an ads-only Entitlement with no purchase path at all, you can skip the product entirely.

对于仅广告、没有购买路径的 Entitlement,你可以完全跳过产品。

2. Create the reward: Ads → Rewards → 'Add entitlement reward'. Pick your synced rewarded ad unit, pick the Entitlement, set a duration.

2. 创建奖励:广告 → 奖励 → '添加 Entitlement 奖励'。选择你同步的奖励广告单元,选择 Entitlement,设置持续时间。

I went with 30 minutes, which is the lowest amount of time allowed. Watch one ad, play for the next half hour.

我选择了30分钟,这是允许的最短时间。观看一个广告,接下来半小时就能玩。

3. Wire up verification, then check the Entitlement: On the ad itself you call enableRewardVerification() after it loads, then present it with a rewardVerificationCompleted callback. That callback is where you react to the verified reward. The rewards docs have the full Swift and Kotlin versions.

3. 连接验证,然后检查权益:在广告本身,加载后调用enableRewardVerification(),然后通过rewardVerificationCompleted回调呈现它。该回调是您对已验证奖励做出反应的地方。奖励文档中有完整的Swift和Kotlin版本。

Gating the game is the same check you'd write for a subscription:

游戏的门控与您为订阅编写的检查相同:

let customerInfo = try await Purchases.shared.customerInfo()

let customerInfo = try await Purchases.shared.customerInfo()

let canPlay = customerInfo.entitlements["play_game"]?.isActive == true

let canPlay = customerInfo.entitlements["play_game"]?.isActive == true

You don't have to refresh anything yourself. Before it hands you the result, the SDK already refreshes customer info for an Entitlement reward and invalidates the virtual currencies cache for a currency reward. We’ll just want to make sure we check this value each time before we allow the user into the game.

您无需自己刷新任何内容。在向您提供结果之前,SDK已经为权益奖励刷新了客户信息,并为货币奖励使虚拟货币缓存失效。我们只需要确保每次允许用户进入游戏之前检查这个值。

That's it! Watch ad → Entitlement active → button goes live → 30 minutes of aggressive parking decisions.

就这样!观看广告 → 权益激活 → 按钮变为可用 → 30分钟的激进停车决策。

Or, grant virtual currency instead of a timed Entitlement

或者,授予虚拟货币而不是限时权益

Duration-based isn't always the right shape. If 30 minutes of access doesn't map to how your app works, use virtual currency instead: 10 coins per ad, 10 coins per game. Users can stack up a balance, spend it how they want, and you're not fighting a timer to model something that isn't time-based.

基于时长并不总是合适的。如果30分钟的访问权限与您的应用工作方式不符,请改用虚拟货币:每个广告10个硬币,每场游戏10个硬币。用户可以积累余额,按自己的意愿花费,而您不必为了模拟非基于时间的场景而与计时器作斗争。

An ad unit can have one virtual currency reward and multiple Entitlement rewards at the same time, and completing the ad grants all of them together. So you can hand out coins and open up access from a single view if that's your design.

一个广告单元可以同时拥有一个虚拟货币奖励和多个权益奖励,完成广告会同时授予所有这些奖励。因此,如果您的设计如此,您可以从单个视图发放硬币并开放访问权限。

When rewarded ads are the wrong call

当奖励广告是错误的选择时

A rewarded ad only helps you if it's not replacing a sale you'd have made anyway. If someone would have subscribed or paid specifically for the perk behind the ad, don't let them earn that same perk for free by watching thirty seconds of video. However, a subscriber who watches an ad for something extra — bonus currency, a one-time boost, a perk they wouldn't otherwise pay for, is pure upside. More engagement, more ad revenue, nothing cannibalized.

奖励广告只有在不替代您本来会获得的销售时才对您有帮助。如果有人本来会订阅或付费以获得广告背后的特权,不要让他们通过观看三十秒视频免费获得同样的特权。然而,订阅者观看广告以获得额外的东西——奖励货币、一次性提升、他们本来不会付费的特权——是纯粹的增益。更多的参与度,更多的广告收入,没有任何蚕食。

RevenueCat's State of Subscription Apps 2026 found only about 10% of apps run a true hybrid monetization model that mixes IAP, ads, and subscriptions, and it's concentrated in gaming at roughly 4x the average. That's where adoption is today, not where it has to stay. The rewarded ad pattern maps cleanly into non-gaming apps too, and most haven't tried yet. This gap is an opportunity.

RevenueCat的《2026年订阅应用状况》发现,只有约10%的应用运行真正的混合变现模式,即结合了内购、广告和订阅,并且主要集中在游戏领域,约为平均水平的4倍。这是目前的采用情况,而不是必须保持的现状。奖励广告模式也能很好地映射到非游戏应用中,而大多数应用尚未尝试。这一差距是一个机会。

Execution is what decides whether it pays off. The reward has to be valuable: earn something people actually want. It has to be discoverable: if it's buried two menus deep nobody finds it. And it has to be repeatable: a reward users come back for compounds, which is where you find the incremental dollars.

执行才是决定其是否值得的关键。奖励必须有价值:赚取人们真正想要的东西。它必须可被发现:如果埋藏在两级菜单之下,没人能找到。它还必须可重复:用户会回来获取的奖励会累积,这正是你找到增量收入的地方。

Quick tangent… enter Shipaton to win the Catvertising Award!

快速插一句……参加Shipaton,赢取Catvertising大奖!

更进一步:量化金融体系

看懂新闻只是起点——沿量化金融路径,把它变成能交付的工程能力

进入量化体系 →

相似阅读

另一事件,读法相近