8 guides · Mobile and MMP
The MMP endpoint is a contract
App install is not session is not in-app purchase. SKAN is a conversion value, not a click id. IDFA needs ATT. These pages are the identifier you are still allowed to send.
Validate a pixel or CAPI All docs
The MMP endpoint is a contract, not fire-and-forget
Adjust, AppsFlyer, and Branch S2S endpoints are contracts: required tokens, device ids, clocks, and unhashed IP. A 200 from the MMP does not mean the event was recorded. Validate the body before you retry. Pixellint packs encode the documented fields, not SKAN postbacks.
SKAN is a conversion value, not a click id
SKAdNetwork attributes iOS campaigns with a conversion value and a delayed Apple postback. It is not a click id, not an MMP device id, and not a replacement for S2S in-app events. Map values on purpose or the postback is a coin flip. Pixellint does not validate SKAN postbacks.
Install is not session is not in-app purchase
Install, first open, session, and in-app purchase are different MMP events. Firing purchase on first open inflates ROAS. Firing install on every session inflates CPI. Name the event the vendor catalog uses, then S2S it once. Adjust tokens are opaque. AppsFlyer eventName is a string. Branch distinguishes standard and custom endpoints.
The install happened after the click
A deferred deep link sends the user to the store, then into the app on first open with the click context. If the MMP cannot stitch the click to the install, they land on home and you lost the campaign creative's promise. Deferred is an MMP feature, not an OS feature.
The click was on the web. The conversion was in the app.
A paid click on the web that converts in the app needs a bridge: MMP, Meta app events, or SKAN. The web pixel alone stops at the store page. Store the web click id before the user leaves for the store. action_source=app on CAPI. Do not fire website Purchase when the charge happened in IAP.
IDFA and GAID are advertising ids. IDFV is not.
IDFA vs GAID: IDFA is iOS advertising, gated by ATT. GAID is Android advertising (gps_adid, aaid, advertising_id). IDFV is per-vendor on iOS, not an ads cookie. Sending the wrong one in the wrong MMP field looks populated and matches nobody. Zeros means denied.
Store receipts are the source of truth
Store receipts are the source of truth for IAP. SDK-observed purchases can fire twice, fire on restore, or fire before charge. Validate with Apple or Google, then S2S to the MMP with the real value and ISO currency. Restores are not purchases. A 200 from the MMP does not prove the revenue dashboard moved.
Device graphs got worse. Probabilistic got noisier.
Probabilistic matching (IP, user-agent, time) filled gaps when IDFA was everywhere. After ATT it is noisier. SKAN, consented IDFA, and deterministic MMP clicks are the planned replacements, not a better fingerprint. Do not hash IP. Pixellint flags hashed IP on Adjust and AppsFlyer. It will not tell you the unhashed IP was CGNAT.