Roll the backlog
Tonight's game, on the home screen too
Overview
The roll card on the Games tab asks one question: “What do you play tonight?”, with a count of games waiting and rolls left today. Tap Roll and covers shuffle for about two seconds, slowing down before they land on “Tonight you play”. Start moves the game to Playing and opens it; Roll again deals another. Free accounts get one roll a day. When it's used, the card offers two ways on: “Watch an ad for 1 roll”, or Go Pro for unlimited rolls. On the home screen, the same roll works from a widget without opening the app, next to a Release countdown and an Up next widget.
How it works
- 1
The pool is every game in your Backlog. The roll is a plain random pick, and with two or more games it never lands on the game it picked last time. With Reduce Motion on, the shuffle is skipped and the pick appears at once.
- 2
Roll counts are kept per device and reset each local day. Prysm Pro is read from the shared Pro store, so a subscriber never sees a limit.
- 3
The extra roll comes from the only rewarded ad in the app. Before it loads, the app asks RevenueCat for a reward verification token and hands it to AdMob. When the video completes, AdMob's server tells RevenueCat, not the app, and the app adds the roll only after RevenueCat confirms. A dismissed ad grants nothing, and at most one bonus roll can be banked.
- 4
Widgets read a snapshot that the app publishes half a second after any library, wishlist or sign-in change, and whenever it comes to the foreground.
- 5
On iPhone the three widgets are built with WidgetKit: Release countdown (small, medium and lock screen), Up next, and Roll the backlog, which rolls through an App Intent. The snapshot and the covers sit in a shared App Group.
- 6
On Android the same three widgets come in small and medium sizes, built with react-native-android-widget. They refresh every 30 minutes and whenever the app publishes. When the widget's free roll is used up, it opens the paywall.
Key decisions
One set of roll rules
The roll rules live in one TypeScript file. The Android widget imports it, and the iOS App Intent mirrors it line for line in Swift. The app, the Android widget and the iPhone widget cannot disagree about what a roll is. Duplicating the logic in Swift was the price of rolling without opening the app.
The widget keeps its own roll
A widget can't wait for the app to wake up, so its roll state is separate from the in-app roll. The trade-off is that a widget roll and an app roll are counted apart.
The rewarded roll is verified on the server
Granting the roll in the app when the ad's close callback fires would be simpler, and a modified app could fake it. The roll waits for RevenueCat's server-side confirmation, with no client-side fallback. An unconfirmed view shows “could not confirm” instead of a free roll.
Optional, one at a time
The ad is never automatic. It appears only when you are out of rolls, sits next to the Pro button rather than instead of it, and earns exactly one roll.
The research behind it
Decisions on this page that rest on RevenueCat's published data and guides.
Server-verified ad rewards
RevenueCat's docs on granting ad rewards verify each AdMob reward on the server before it is granted, and rule out a client-side grant as a fallback. Prysm's roll follows that flow step by step.
RevenueCat docs: Granting ad rewards