github BlinkReceipt/blinkreceipt-android 2.3.1

3 hours ago

Recognizer SDK (2.3.1)

  • Updated Gson to 2.14.0. It is now declared explicitly by this module rather than inherited transitively, so the version no longer depends on another library's dependency graph.
  • Updated androidx.work to 2.11.2, which brings Room 2.7.0 and its corrected R8 keep rule, and published that rule alongside it. Under R8 full mode — the default for an app — the older rule let R8 drop the constructor WorkManager's generated database is created with, so an integrating app minifying in full mode could crash on launch with NoSuchMethodException: androidx.work.impl.WorkDatabase_Impl.<init> []. No integration changes are required.
  • Stability fixes and improvements

Account Linking SDK (2.3.1)

  • Hardened the published R8/ProGuard rules so the generic signatures Gson reads off TypeToken survive minification. Nothing changes for integrations; the rules keep Gson's type resolution correct under R8 full mode, which the SDK now builds with.
  • Updated Gson to 2.14.0. It is now declared explicitly by this module rather than inherited transitively, so the version no longer depends on another library's dependency graph.
  • Updated androidx.work to 2.11.2, which brings Room 2.7.0 and its corrected R8 keep rule, and published that rule alongside it. Under R8 full mode — the default for an app — the older rule let R8 drop the constructor WorkManager's generated database is created with, so an integrating app minifying in full mode could crash on launch with NoSuchMethodException: androidx.work.impl.WorkDatabase_Impl.<init> []. No integration changes are required.
  • Stability fixes and improvements

Camera SDK (2.3.1)

  • Stability fixes and improvements

Camera UI SDK (2.3.1)

  • Refreshed the Camera Preview UI/UX with a new one-time fullscreen guide shown before the camera opens on first launch, a new hint button with a "How to scan a receipt" dialog, and a refreshed default accent color, tooltip, and button styling.
    • BREAKING CHANGE: Several resources behind the previous camera UI were removed as part of the redesign — recognizer_receipt_edge, recognizer_camera_initial_instruction, recognizer_move_closer_suggestion, and recognizer_move_further_suggestion strings; the default_secondary_button_background, ic_torch_selector, primary_secondary_color_selector, and tooltip_secondary_action_button_selector drawables; and the BlinkTooltip declare-styleable (its attributes are now top-level <attr> elements, so R.styleable.BlinkTooltip no longer exists). Overrides of the removed strings/drawables no longer take effect, and direct references to the removed drawables or styleable will not compile.
  • Stability fixes and improvements

Core SDK (2.3.1)

  • Updated Gson to 2.14.0. It is now declared explicitly by this module rather than inherited transitively, so the version no longer depends on another library's dependency graph.
  • Updated androidx.work to 2.11.2, which brings Room 2.7.0 and its corrected R8 keep rule, and published that rule alongside it. Under R8 full mode — the default for an app — the older rule let R8 drop the constructor WorkManager's generated database is created with, so an integrating app minifying in full mode could crash on launch with NoSuchMethodException: androidx.work.impl.WorkDatabase_Impl.<init> []. No integration changes are required.
  • Stability fixes and improvements

Digital SDK (2.3.1)

  • Updated Gson to 2.14.0. It is now declared explicitly by this module rather than inherited transitively, so the version no longer depends on another library's dependency graph.
  • Fixed: calling an AutoScrapeClient companion member from Kotlin threw NoSuchFieldError at runtime. In the 2.3.0 AAR the companion object had been renamed while the field referencing it kept its original name, so AutoScrapeClient.clampInterval(), isAutoScrapeAccount(), decide() and aggregate() compiled cleanly and then failed the first time they ran. The DEFAULT_INTERVAL_HOURS and MIN_INTERVAL_HOURS constants were unaffected (the compiler inlines them), as were Java callers. No integration changes are required, the example in the Automated Scrape guide now works as written, and any local workaround that re-implemented the interval clamp can be replaced with the SDK call again.
  • Updated androidx.work to 2.11.2, which brings Room 2.7.0 and its corrected R8 keep rule, and published that rule alongside it. Under R8 full mode — the default for an app — the older rule let R8 drop the constructor WorkManager's generated database is created with, so an integrating app minifying in full mode could crash on launch with NoSuchMethodException: androidx.work.impl.WorkDatabase_Impl.<init> []. No integration changes are required.
  • Stability fixes and improvements

Digital Analytics SDK (2.3.1)

  • Updated Gson to 2.14.0. It is now declared explicitly by this module rather than inherited transitively, so the version no longer depends on another library's dependency graph.
  • Hardened the published R8/ProGuard rules so the WorkerService companion object keeps its name in the release AAR, matching the field that references it. Nothing was reachable through this in 2.3.0, so no integration changes are required.
  • Updated androidx.work to 2.11.2, which brings Room 2.7.0 and its corrected R8 keep rule, and published that rule alongside it. Under R8 full mode — the default for an app — the older rule let R8 drop the constructor WorkManager's generated database is created with, so an integrating app minifying in full mode could crash on launch with NoSuchMethodException: androidx.work.impl.WorkDatabase_Impl.<init> []. No integration changes are required.
  • Stability fixes and improvements

Earnings SDK (2.3.1)

  • Stability fixes and improvements

Logcat SDK (2.3.1)

  • Hardened the published R8/ProGuard rules so the LogEvent companion object keeps its name in the release AAR, matching the field that references it. Nothing was reachable through this in 2.3.0 — LogEvent.NONE is a @JvmField member resolved on the outer class — so no integration changes are required.
  • Stability fixes and improvements

Security SDK (2.3.1)

  • Hardened the published R8/ProGuard rules so the Crypto and License companion objects keep their names in the release AAR, matching the field that references them. Nothing was reachable through this in 2.3.0 — Crypto.NONE and License.NONE are @JvmField members resolved on the outer class — so no integration changes are required.
  • Stability fixes and improvements

Surveys SDK (2.3.1)

  • Updated Gson to 2.14.0. It is now declared explicitly by this module rather than inherited transitively, so the version no longer depends on another library's dependency graph.
  • Updated androidx.work to 2.11.2, which brings Room 2.7.0 and its corrected R8 keep rule, and published that rule alongside it. Under R8 full mode — the default for an app — the older rule let R8 drop the constructor WorkManager's generated database is created with, so an integrating app minifying in full mode could crash on launch with NoSuchMethodException: androidx.work.impl.WorkDatabase_Impl.<init> []. No integration changes are required.
  • Stability fixes and improvements

Activation SDK 1.1.2

This update gives you a reliable signal for SDK registration, lets rewarded ads pay out in apps that use real money, makes Boost ads open instantly, and carries more receipt detail through to your backend — along with a round of visual and reward-display fixes.

Upgrade Notes

  • Test Mode is now a single switch. TestOptions.Ads has been removed. TestOptions.Test now also registers the running device as a Google Ad Manager test device, so your ad units serve test creatives instead of production ads. The old blanket test-ads header is gone, and no separate flag is needed.
  • ScanResults and DuplicateDetection gained new parameters in the middle of their constructors. Code that builds these types by position no longer lines up — use named arguments.

What's New & Improved

  • You can now observe registration. ActivationClient.registrationState is a StateFlow<RegistrationState> covering Idle, Registering, Registered, and Exception, alongside a synchronous isRegistered. Gate your offers wall on a successful registration instead of guessing — and catch the case where identity was set from a screen scope that navigation cancelled, which previously showed an empty wall with no error. Only real failures surface as errors; the normal pre-login states are reported separately and aren't worth showing to shoppers.
  • Rewarded ads now work for apps that pay in real money. Where Google's rewarded-ad policy forbids paying out cash on the spot, Boost rewards are banked and settled on the shopper's next scan. Two reward types split the halves — one when the ad completes and the credit is banked, another when banked credit lands on a later receipt. This is enabled per app by a BlinkEngage admin with no work on your side; CPA boosts are unaffected and keep paying out immediately.
  • Boost and inline rewarded ads open instantly. Both are preloaded as soon as Receipt Summary appears, so there's no load step when a shopper taps Boost. The Boost button stays hidden until its ad is actually ready, and if a preload fails the boost is dropped quietly rather than reporting an error against something the shopper never touched.
  • More receipt detail passed through. Scan results now carry trip and item confidence scores, plus authorization ID, auth code, purchase country, and time.
  • Clearer duplicate-detection results. Duplicate detection now reports the specific duplicate receipt IDs, whether the receipt was too old, and — when a shopper hits a submission limit — which limit was hit and at what value.
  • Reward icon inline in offer amounts. Offers configured to show a currency image now render that icon directly inside the "Earn" label next to the amount, instead of dropping it.
  • Refreshed receipt camera experience. The scanning camera now uses a single, consistent capture UI, with updated customization and theming documentation.

Bug Fixes

  • Fixed the "Offer Clipped" confirmation not appearing on the offer detail screen, including when the offer was opened from a Store or Category screen.
  • Fixed the "points" currency label going missing from reward amounts.
  • Fixed the Boost button showing the pre-payout amount rather than the amount the shopper actually receives.
  • Fixed the "Watch & Earn" reward showing an error message instead of opening an ad; when no ad is available the option is now hidden rather than failing.
  • Fixed the clip and clipped icons on the offers wall and offer detail screen drawing their checkmark and plus marks as transparent holes, letting the card background show through. Both now render as solid fills.

Don't miss a new blinkreceipt-android release

NewReleases is sending notifications on new releases.