Skip to content

feat(ads): add vanilla-ad-tracker-sample#3263

Merged
peterporfy merged 8 commits into
mainfrom
ads-127
Mar 23, 2026
Merged

feat(ads): add vanilla-ad-tracker-sample#3263
peterporfy merged 8 commits into
mainfrom
ads-127

Conversation

@peterporfy

@peterporfy peterporfy commented Mar 19, 2026

Copy link
Copy Markdown
Contributor

Adds a new examples/vanilla-ad-tracker-sample app demonstrating how to integrate RevenueCat ad tracking with AdMob without the feature:admob adapter — calling AdTracker APIs directly in AdMob callbacks. Intended as a reference for developers using other ad networks or who want explicit control over tracking. Based on existing admob-sample and the purchases-ios sample.

  • Card-menu UI: one item per ad format, navigates to a Load/Show detail screen
  • Covers all 8 ad formats: Banner, Interstitial, App Open, Rewarded, Rewarded Interstitial, Native, Native Video, Error Testing
  • Includes customer-facing README

Note

Low Risk
Adds a new example app and documentation only; no changes to the core SDK or production code paths.

Overview
Adds a new examples/vanilla-ad-tracker-sample Android app that demonstrates manual RevenueCat AdTracker event reporting from AdMob callbacks (without using the :feature:admob adapter), covering banner/interstitial/app-open/rewarded/rewarded-interstitial/native/native-video plus an error-trigger screen.

The sample includes a small Compose UI to select formats and load/show ads, AdMob + RevenueCat initialization, a precision mapping helper, native ad layout resources, and a README with setup instructions and guidance on using responseInfo.responseId as the impression ID. The module is wired into the build via settings.gradle.kts.

Written by Cursor Bugbot for commit 740f93c. This will update automatically on new commits. Configure here.

@peterporfy peterporfy requested a review from a team as a code owner March 19, 2026 14:43
@peterporfy peterporfy requested a review from polmiro March 19, 2026 14:43
@codecov

codecov Bot commented Mar 19, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.38%. Comparing base (c327050) to head (740f93c).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #3263   +/-   ##
=======================================
  Coverage   79.38%   79.38%           
=======================================
  Files         357      357           
  Lines       14347    14347           
  Branches     1959     1959           
=======================================
  Hits        11389    11389           
  Misses       2154     2154           
  Partials      804      804           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@polmiro polmiro left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested in Android Studio 👌🏻

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.


override fun onAdFailedToShowFullScreenContent(error: AdError) {
status = "Not Loaded"
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ad reference not cleared on show failure

Medium Severity

In all four fullscreen ad types, onAdFailedToShowFullScreenContent sets status to "Not Loaded" but does not null out the ad reference (e.g., interstitialAd, appOpenAd, rewardedAd, rewardedInterstitialAd). The "Show" button's enabled state is driven by the ad reference being non-null, so it stays enabled after a show failure even though the ad is consumed and unusable. Tapping "Show" again would silently fail. The onAdDismissedFullScreenContent handler correctly nulls the reference — the same pattern is needed here. Particularly important since this is a reference sample for developers.

Additional Locations (2)
Fix in Cursor Fix in Web

@peterporfy peterporfy added this pull request to the merge queue Mar 23, 2026
Merged via the queue into main with commit 8e3921e Mar 23, 2026
36 checks passed
@peterporfy peterporfy deleted the ads-127 branch March 23, 2026 09:39
github-merge-queue Bot pushed a commit that referenced this pull request Mar 26, 2026
**This is an automatic release.**

## RevenueCat SDK
### 🐞 Bugfixes
* [EXTERNAL] fix: ensure activity is attached before showing in-app
messages (#3274) contributed by @matteinn (#3275) via Toni Rico
(@tonidero)
* Ensure MediaPlayer has dedicated thread owner that is not the main
thread (#3148) via Jacob Rakidzich (@JZDesign)
* Fix heartbeat monitor and Slack notifications for nightly integration
tests (#3259) via Rick (@rickvdl)

## RevenueCatUI SDK
### Paywallv2
#### ✨ New Features
* Feat: Restore gating in paywalls UI (#3171) via Jacob Rakidzich
(@JZDesign)

### 🔄 Other Changes
* security: pin GitHub Actions to SHA hashes (#3272) via Alfonso
Embid-Desmet (@alfondotnet)
* Bump activesupport from 8.0.2 to 8.0.4.1 (#3270) via dependabot[bot]
(@dependabot[bot])
* Merge release PR after deploy (#3269) via Antonio Pallares
(@ajpallares)
* Require PR approval before release tagging (#3268) via Antonio
Pallares (@ajpallares)
* Bump json from 2.18.1 to 2.19.2 (#3261) via dependabot[bot]
(@dependabot[bot])
* feat(ads): update admob sample app (#3264) via Peter Porfy
(@peterporfy)
* feat(ads): add vanilla-ad-tracker-sample (#3263) via Peter Porfy
(@peterporfy)
* [Purchase Tester]: Persist appUserId on login screen across app
launches (#3266) via Will Taylor (@fire-at-will)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Mostly release automation and versioning changes, but it modifies
CI/orb references and deploy/merge automation, which could affect the
release pipeline if misconfigured.
> 
> **Overview**
> Cuts the `9.28.0` release by removing `-SNAPSHOT` across version
sources (`.version`, `gradle.properties`, `Config.frameworkVersion`) and
updating sample/test-app dependency pins to `9.28.0`.
> 
> Updates release documentation: publishes Dokka docs to the `9.28.0` S3
path, updates `docs/index.html` redirect to `9.28.0`, and rolls
`CHANGELOG.latest.md` into a new `9.28.0` section in `CHANGELOG.md`.
> 
> Tweaks release tooling/CI: pins `fastlane-plugin-revenuecat_internal`
to a specific git ref (and bumps a few Ruby deps), switches the CircleCI
`revenuecat/sdks-common-config` orb to a dev commit, and adds a
temporary `test_merge_queue` workflow to exercise
`revenuecat/merge-release-pr` with `use_merge_queue: true`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
5050888. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants