Documentation
Testing a mobile integration
Prove that a click becomes an attributed sale, on a real device, before an ad ever runs.
What you are proving
One afternoon, one device, four facts:
- A tap on a link becomes an install row carrying that link's campaign.
- The install is signed and reports the SDK version you shipped.
- A test purchase becomes a conversion within seconds of the store's notification.
- That conversion is attributed to the campaign from step 1, and flagged as a test.
Every one of these can be checked on the app's Overview tab. Nothing here needs an engineer on our side.
The device rule
The same applies, less strictly, to iOS: a first install on a device is the clean case.
Also: a build installed with adb, Android Studio, Xcode or react-native run-android carries no referrer at all. It proves the SDK sends, and nothing about attribution. The attribution test needs an install from the store.
Android, step by step
- Upload the build to an internal testing track and add the tester's Google account. The tester must open the opt-in link and accept, and that account must be the *active* one in the Play Store app.
- Add the same account as a licence tester (Play Console → Setup → Licence testing). Purchases then show *"Test card, always approves"* and charge nothing. This setting is account-wide.
- Create a tracking link on the app's Install links tab, pointing at the Play listing. Add campaign parameters when you use it:
?utm_source=facebook&utm_campaign=my_test. One link serves every campaign. - On the device: make sure the app is not installed. Open the link (send it by chat, tap it on the phone). It must land in the Play Store app, not a web page; a browser that falls back to
play.google.comproduces a web install with no referrer. - Install from that Play page and open the app. Within seconds the Overview tab shows an
installwith the referrer containingrsclid=…and yourutm_campaign,signed = true, and the expectedsdk_version. - Make a purchase. Within seconds of Play's notification a conversion appears:
is_test = true, attributed to your campaign. If it is a subscription, leave it running: licence-tester plans renew every few minutes, and each renewal must book as its own conversion. That is the failure that looks fine on day one.
iOS, step by step
- Ship a TestFlight build, or run a development build with a Sandbox Apple ID signed in under Settings → App Store → Sandbox Account.
- Create a tracking link on the Install links tab, pointing at the App Store listing. iOS has no install referrer: a first install attributes deterministically only from an Apple Ads campaign (Apple Search Ads attribution), and from other channels only through the opt-in deferred match on the Attribution tab. What the link proves deterministically on iOS is re-engagement: a tap that opens the already-installed app through a universal link.
- Open the app once. The Overview tab shows an
installwithsigned = true. - Make a sandbox purchase. App Store Server Notifications fire for sandbox purchases too; the conversion arrives flagged as a test and carries the buyer via
appAccountToken. Sandbox subscriptions renew on an accelerated clock, so renewals can be checked the same afternoon.
Reading the result
| You see | It means |
|---|---|
Install with rsclid in the referrer, campaign filled in | Attribution is wired end to end. This is the goal. |
Install with utm_source=google-play&utm_medium=organic | Installed from the store, but not from your link. The tester searched for the app instead of tapping. |
Install with utm_source=(not set) | A reinstall on a device that had the app before, or an install from the Play *website*. See the device rule above. |
| Install with an empty referrer | Installed with adb or from the IDE. Not a store install. |
signed = false | The app secret did not reach the build. Each SDK page's secret section says why. |
Conversion booked, UNATTRIBUTED | The buyer field was not set on the purchase, or the install itself was unattributed (see above). The revenue is real; the link to the campaign is missing. |
| Purchase made, no conversion at all | The store's notification never arrived or could not be resolved. Google Play revenue and App Store revenue each end with a checklist. |

