Docs
Install Trust for Android
Install
implementation("io.adhedge:install-trust:1.0.0")
No init call. Your coding agent can add it for you. Then link a Cloud project to your app in Play Console. We walk you through it.
Verdicts
| Verdict | Meaning | Billed |
|---|---|---|
| TRUSTED | Passed every check. | Yes |
| UNVERIFIED | Couldn't be confirmed. | No |
| SUSPECT | Two or more red flags. | No |
Verdicts update as behavior comes in. Rooted phones and Play Games on PC are never blocked.
Reason codes
Two negative codes from different checks make a SUSPECT.
| Code | Meaning | Negative |
|---|---|---|
| PI_NO_DEVICE_INTEGRITY | No device integrity from Play. | Yes |
| PI_VIRTUAL_DEVICE | Play Games on PC. | No |
| PI_UNRECOGNIZED_VERSION | Play doesn't recognize the app binary. | Yes |
| PI_UNLICENSED | No Play license for the install. | Yes |
| PI_ACCESS_RISK_CONTROLLING | Another app can control the screen. | Yes |
| INSTALLER_NOT_PLAY | Not installed by Play. | Yes |
| CERT_UNKNOWN | Unknown signing certificate. | Yes |
| VERSION_NOT_PLAY_SERVED | A build Play isn't serving. | Yes |
| ADB_ENABLED | USB debugging on. | Yes |
| TEST_KEYS | Test-keys system build. | Yes |
| EMULATOR_HEURISTIC | Looks like an emulator. | Yes |
| ROOT_HEURISTIC | Signs of root. | Yes |
| NO_INTERACTION_D0 | No taps on install day. | Yes |
| LOW_INPUT_ENTROPY | Taps too regular to be human. | Yes |
| REINSTALL_90D | Reinstall within 90 days. | Yes |
| LEGACY_COHORT | Installed before the SDK. | No |
| SAMPLED_OUT | Not sampled for attestation. | No |
| LABEL_REAL_USER | Your app labeled it real_user. | Real user |
Conversion events
verified_installfires for new TRUSTED installs.unverified_installfires for the rest. Blocking mode turns it off.- Existing users fire neither.
- Both reach Firebase, AppsFlyer, Adjust, Meta, or TikTok if your app has it. Set
verified_installas your primary conversion.
Label real users
Call InstallTrust.label("real_user") when a user hits a milestone only people reach, like finishing onboarding.
Ad request gate
On Pro, call InstallTrust.shouldRequestAds() before loading an ad. It answers on the device, instantly.
Reconciliation
Upload any network's install report. We compare it with the first opens the SDK saw.
| Column | Accepted headers | Required |
|---|---|---|
| Date | Day, Date, Event date | Yes |
| Installs | Installs, App installs, Conversions, Conv., All conv. | Yes |
| Campaign | Campaign, Campaign name, Source / medium | No |
| Cost | Any header starting with Cost | No |
What the SDK sends
- Install ID and Play App Set ID.
- Installer, install time, build, signing certificate, install referrer.
- Debug flags, emulator and root checks, network type, battery, uptime.
- One Play Integrity token per install.
- Tap counts and timing. No coordinates or screen content.
What we never collect: data safety.
License
The SDK, its wrappers, and the wire schema are Apache-2.0. Scoring runs on our side.