Changelog
New features, fixes and upgrade notes for the Flyy native SDKs and the rewards UI they host. Rewards UI changes reach users over the air; native changes ship as a new SDK version.
Android 2.2.0 · iOS 3.1.0
Your backend decides which build of your rewards UI each app runs — so publishing, promoting and rolling back happen in GameStudio, instantly, with no app release.
New
- Server-controlled UI version. The SDK follows the build your Flyy backend points it at (the
sdk_buildkey on app info). Staging apps follow your staging backend, production apps your production backend. - Instant rollout and rollback. A silent push tells running apps the moment a build is promoted or rolled back; they switch on the next screen opened.
- Immutable builds. Every build lives at its own versioned address and is checked file by file before it's used — a rollback reinstalls exactly what ran before.
Improved
- Apps subscribe to the silent config push whether or not floating widgets are on, so UI updates reach every app.
Behaviour changes
- A host that sets
sdkUrlkeeps exactly that origin; the backend's choice never overrides it.
Android 2.1.0 · iOS 3.0.0
The rebuilt Flyy SDK. One rewards UI on both platforms, a one-call integration, embeds, placements, theme matching and over-the-air updates. Drop-in compatible with v1.
Highlights
- One-call setup. On Android,
Flyy.start(this) { … }inMainActivityis the whole integration — noApplicationsubclass, no manifest entries, no ProGuard rules. Safe to call on everyonCreate. → Initialize - One rewards UI on Android and iOS. Every screen — offers, scratch cards, wallet, spin wheel, quiz, games, leaderboards, stamps, polls, surveys, trivia, gift cards, check-in — comes from one build, in six visual styles.
- Over-the-air updates. Ship the UI inside your app for an instant first open, and get newer builds on the next launch with no app release. Every file is checked by sha256, and a build older than yours is never installed. → OTA
- Looks like your app. The SDK reads your theme's colors, fonts, corner radius, button style, text size and dark mode at runtime. Contrast is checked automatically. → Theming
- Placements. Stories, banners, sheets, modals, toasts, a dynamic island, picture-in-picture, surveys, tooltips, spotlights, coachmarks and badges — created in GameStudio, shown without an app release. → Placements
- v1 code keeps compiling. Every v1 method exists under its old name and signature, and calls the same backend endpoint. → Android · iOS
New
- Embedded widgets — trail, milestones, milestone and offer cards, or any full screen, inside your own layouts. Auto-height, transparent, with
ready/empty/errorstates. Views, Compose, UIKit and SwiftUI. → Embeds com.theflyy:flyy-compose—FlyyEmbed,FlyySlot,FlyyStories,FlyyTarget, and an embed navigator that opens Flyy screens under your own top bar.- Floating widgets — a dashboard-configured bubble over your screens. Opt-in. → Floating widgets
- Zero-code targeting —
FlyyTarget/.flyyTargetwrap a section once so GameStudio can place content next to it. ComposetestTags, View ids and tags work as anchors automatically, and are reported to GameStudio as pickers. slot_target— on Android Views, a placement can insert itself before, after or inside an existing view, with no slot in your layout.- Live config — placements refresh on every foreground, after login, and immediately on a silent
config_refreshpush sent when GameStudio publishes. - Inbox —
Flyy.openInbox()and theINBOXscreen. - Anonymous visitors — events sent before login are kept and linked to the user when you identify them.
- iOS ships as a prebuilt XCFramework at a versioned CDN path — a pinned version always installs the same bytes, checked by sha256.
- Milestones and spin wheel built in — the separate leaderboard and spin-wheel web apps now run inside the SDK.
- Wallet redemption — cash redeems by bank or UPI transfer request (pre-filled from the last payout account, with KYC gate and PAN retry); other currencies redeem through gift cards.
- Popups in your theme — reward-won, scratch, in-app and actionable toast popups render in your UI style, with a built-in fallback card.
- Deep link takeover —
deeplinkListenerhands links to your own screens back to your router.
Improved
- Push on Android — notifications the system shows while the app is in the background are handled when tapped (click reported, deep link opened). The token is re-fetched after identify, so older installs register too.
- Push on iOS —
Flyy.handlePush(_:)handles silent and data-only pushes. The SDK reads the FCM token itself when FirebaseMessaging is linked. - Offline-safe — identity, profile writes and events are queued and retried. Config survives process death, so an SDK screen restored by the system no longer crashes.
- Instant opens — a prewarmed WebView, cached data repaint on reopen, and code-split screens.
- Native feel — safe areas, hardware and edge-swipe back, haptics, status bar sync and smooth route transitions.
- Font size — placement and gift-card text follow the system font scale. RTL and dark mode fixes across all variants.
- v1 UI flags now take effect — check-in button, referral code, scratch-card date/ref, expiry labels, gift-card copy, quiz and leaderboard chrome, confetti colors, RTL and custom fonts are honoured in every variant.
Fixed
- Game leaderboards showed another game's ranks — game and quiz boards are now separate.
- A game launched from some variants didn't register the play, so it scored zero.
- Past quizzes and bonanza history were empty in five of six variants.
- Requests without a GAID or user token sent the literal string
"undefined"as headers. - A push-delivered reward was revealed but never claimed.
- The glass variant's trivia never recorded answers.
- Points balances offered a rupee bank withdrawal.
setBaseFlyyDomain(Android) took a full URL instead of the v1 bare host, causing a silent retry loop. Both forms now work.- Scratch-card counts read the wrong response field and cached zeros.
- Profile writes and FCM registration hit the generic event endpoint instead of their own.
- A screen that failed to load app info showed a loading shimmer forever — it now offers retry.
- A crash in iOS overlay placements.
Behaviour changes
- Floating widgets and screen reporting are opt-in on Android (
floatingWidgets = falseby default). Turn them on to use dashboard-targeted bubbles. - iOS needs iOS 14+, and the pod is 3.x (CocoaPods trunk already holds v1 releases up to 2.0.5).
- iOS push must use the FCM token, not the APNs device token.
setCustomFont(Typeface…)and v1 custom-view styling setters compile but only log. UsesetCustomFontNameand the theme instead.
Upgrade
Android
implementation("com.theflyy:flyy:2.1.0") // + maven { url = uri("https://cdn.flyyx.in/maven") }
iOS
pod 'FlyyFramework', '~> 3.0' # platform :ios, '14.0'