You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Recognizer SDK (2.3.0)
Resolved an issue where ScanResults.retailerId could disagree with ScanResults.merchantName when the merchant was identified late in the scan. The retailer id now reflects the final detected merchant, and merchant-dependent results (products, promotions, loyalty, duplicate detection, and trip/item confidence) are consistent with it.
Improved merchant detection consistency by waiting for all merchant lookups to finish before the winning merchant is selected, making repeat scans of the same receipt more deterministic.
Resolved a RecognizerNotInitializedException crash in RecognizerView.preliminaryResults() that could occur when a stale RecognizerView terminated the shared recognizer session while a scan was still in flight, such as on screen re-entry. An empty preliminary result is now delivered instead of throwing, matching the existing behavior when finishing a scan.
Added RecognizerView.initialized() so integrators can check whether a view's recognizer session is still live before calling takePicture(), confirmPicture(), preliminaryResults() or finishedScanning(), instead of relying on catching exceptions.
RecognizerView.confirmPicture() now reports a terminated session through CameraRecognizerCallback.onException() rather than throwing, so a capture callback that arrives after teardown no longer crashes.
RecognizerView.terminate() now clears the view's scan options, so calls made on a terminated view fail consistently instead of depending on shared session state that another view instance may have already changed.
Stability fixes and improvements
Account Linking SDK (2.3.0)
Stability fixes and improvements
Camera SDK (2.3.0)
Stability fixes and improvements
Camera UI SDK (2.3.0)
Stability fixes and improvements
Core SDK (2.3.0)
Stability fixes and improvements
Digital SDK (2.3.0)
New: Automated Scrape (AutoScrapeClient) — keep a linked inbox producing receipts without the user reopening your app. Arm the feature once per launch and the SDK schedules a periodic background scrape for you; each run submits the user's linked accounts through the same server-side path as ImapClient.remoteMessages(), and the backend parses the receipts and POSTs them to your configured client endpoint.
Two-line integration. Create an AutoScrapeClient in your Application and call begin(success, failure) with the callbacks you want the results delivered to — the same Credentials.Password + JobResults pair the manual remote scrape delivers. No new manifest entries, permissions, or R8/ProGuard rules; WorkManager is bundled and configured by the SDK.
Opt-in and off by default. Nothing is scheduled until you call begin(). Consent is intentionally not persisted by the SDK, so re-arm from Application.onCreate() (gated on your own user preference) — scheduled runs that find no armed client are skipped without disturbing the cadence.
Scheduling follows the user's sign-in state. The periodic work starts when an in-scope account is linked and is cancelled when the last one signs out, so a signed-out user's timer never keeps ticking. All scheduling funnels through a single unique work name, so overlapping runs are impossible no matter how often you arm or reconfigure.
Configurable cadence and overrides.intervalHours defaults to 24 hours with a 12-hour floor and no upper limit; overrideEndpoint, overrideDateTime, and countryCode mirror their ImapClient counterparts and are re-applied to the schedule the moment you change them.
Predictable teardown.cancel() unsubscribes your callbacks and stops the schedule while leaving the client re-armable; close() releases it for good. Scope the client to your Application — closing it cancels the schedule.
Initial provider scope: Gmail IMAP accounts with a non-empty username. Check any account with AutoScrapeClient.isAutoScrapeAccount(credentials).
See the Automated Scrape guide for setup, Kotlin and Java samples, best practices, and troubleshooting.