What Rinne provides at launch
When your integration is approved for launch, Rinne provides:- The production artifact,
rinne-sdk-checkout-production, on the same version as the sandbox artifact you tested with. - A production API key for your backend, with the
tap_on_phone.*permission. - A merchant enabled for contactless capture in production.
getReady with TAP_ON_PHONE_NOT_ENABLED or ACCESS_TOKEN_REJECTED, and your app never reaches a card.
Switch the environment
Replace the artifact and the environment. The production artifact reaches production only, and the sandbox artifact cannot reach it: asking a sandbox build forEnvironment.PRODUCTION throws IllegalStateException at getReady, which is a build misconfiguration to fix, not an error to handle.
https://api.rinne.com.br/core/v1/terminal/token with the production key. Keep the sandbox and production keys on separate backend configurations so a sandbox key never reaches a production build.
Install source and device integrity
Production enforces the integrity check the sandbox relaxes. Before every transaction the card reader verifies the device and the app that runs it:- Install from Google Play. The production build must be installed from Google Play; the internal testing track is fine. A sideloaded APK fails the install-source check unless you name its installer package in
installerPackageNamesongetReady, which is meant for managed-device deployments, not for testing. - Device integrity. The device must pass Play Integrity at
MEETS_DEVICE_INTEGRITYor better;MEETS_STRONG_INTEGRITYis recommended for financial use. Rooted devices, unlocked bootloaders, custom ROMs and emulators are refused withATTESTATION_FAILED. - Signing. Sign the app with APK signature scheme v2 or newer, which Play App Signing already does. A build signed only with the legacy v1 scheme fails attestation.
Keys and tokens
- The Rinne API key stays on your backend. The app only ever holds a token minted at
POST /v1/terminal/token, valid for fifteen minutes and useless on any other endpoint. - The SDK asks your
accessTokenProviderfor a fresh token on every handshake and never stores one, so there is no refresh loop to run. - Revoking the key stops minting immediately; tokens already minted expire on their own within fifteen minutes.
Release builds and R8
The SDK ships consumer keep rules that protect its public API and the enum constant names it matches at runtime. A release build with R8 needs nothing more. Run your production test on the minified build, not only on debug: R8 removing something reachable only at runtime shows up nowhere else.Permissions and the Play Console questionnaire
Your merged manifest carries nine permissions after adding the SDK. Four come from the SDK and five from the certified card-reader library, which every host receives.
Confirm the list against a real build before filling in the questionnaire:
What the SDK sends
Besides the transaction itself, the SDK reports its own reliability to Rinne: which stage a payment reached, which error code ended it, timings, the device model and OS version, a random per-run session id and the merchant id. It exists for the failures the backend can never see, such as attestation failures and network faults before a transaction is registered. It never includes cardholder data, it persists nothing on the device, and it cannot fail a sale. For the data-safety form, treat it as diagnostic data tied to the merchant account, never to the cardholder or the operator; when the merchant is an individual (a CPF account), that account identifies a person, so classify it according to your own data practices. The card reader also keeps its own logs on the device for support triage. They never leave the phone.Versions
Pin the SDK version Rinne names for your launch, and upgrade only to versions Rinne announces as live. A new card-reader version needs its card configuration published on Rinne’s side first; a build on a version without one fails atgetReady with EMV_CONFIG_UNAVAILABLE.
Go-live checklist
- The production artifact on the version Rinne named.
environment = Environment.PRODUCTIONin the production build only.- Production API key on the backend; the token endpoint called on
api.rinne.com.br. - A production sale, a PIN sale, a declined sale and a refund verified on a phone installed from the internal testing track.
- The minified build tested end to end.
- The Play Console questionnaire answered with the nine permissions and the diagnostic data above.
ATTESTATION_FAILED,TAP_ON_PHONE_NOT_ENABLEDandACCESS_TOKEN_REJECTEDhandled with the right message for each, as in Results and errors.- Reconciliation by
requestIdin place for process deaths.

