Appearance
Set up SKAN
Configure SKAdNetwork for the Linkrunner SDK and your ad networks to enable privacy-preserving iOS attribution
SKAdNetwork (SKAN) is Apple's privacy-preserving framework for iOS attribution. With Linkrunner, SKAN setup happens in three places:
- Your app: update the SDK and add the SKAN keys to
Info.plist - Linkrunner: configure the SKAN schema (events, priority, ranges)
- Your ad networks: complete the Google Ads and Meta Ads specific steps
This page covers the first two, which are shared across all networks. Then follow the network guide for each platform you advertise on.
New to SKAN? Watch the 85-second explainer with sound on.
1. Prepare Your App
Minimum SDK Versions
Make sure your app is using at least these SDK versions before enabling SKAN. Linkrunner uses the SDK to update conversion values as users perform events.
Native iOS
linkrunner-ios >=4.3.2
React Native
rn-linkrunner >=3.4.2
Flutter
linkrunner >=4.4.2
Expo
expo-linkrunner >=3.6.5
Capacitor, Cordova, and Unity apps use the native iOS SDK (LinkrunnerKit) under the hood, so the linkrunner-ios >=4.3.2 requirement applies to them as well (capacitor-linkrunner >=2.4.2, cordova-linkrunner >=1.5.4). Older versions leave the conversion value empty on SKAdNetwork postbacks from devices on iOS 17.4 and above.
How the SDK updates conversion values
You don't need to call any SKAN APIs yourself. On first launch the SDK registers an initial conversion value (0/low), and every trackEvent (including payments) and signup call returns the updated conversion value from Linkrunner, which the SDK applies automatically. On iOS 17.4+ the SDK updates both AdAttributionKit and SKAdNetwork, so networks on either framework (Meta and Google sign with SKAdNetwork) receive the value. On iOS 14.0 to 17.3 it uses SKAdNetwork.
Add Ad Network Identifiers
Apple only generates SKAN postbacks for ad networks listed under SKAdNetworkItems in your app's Info.plist. Add the identifiers for the networks you run campaigns on:
xml
<key>SKAdNetworkItems</key>
<array>
<!-- Google Ads -->
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<!-- Meta Ads -->
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n38lu8286q.skadnetwork</string>
</dict>
</array>Without these entries, Apple never sends SKAN postbacks for those networks, even if everything else is configured correctly. Identifiers are lowercase and must end in .skadnetwork.
If you run campaigns on other networks, add their identifiers too. Each network publishes its own list (for example, Google and Meta).
On Expo, add these under ios.infoPlist.SKAdNetworkItems in your app.json instead of editing Info.plist directly.
Configure Postback Copies to Linkrunner
To receive SKAdNetwork postback copies, configure NSAdvertisingAttributionReportEndpoint and AttributionCopyEndpoint in your app's Info.plist:
Native iOS, Flutter, and React Native
- Open
Info.plistin Xcode - Add a new key
NSAdvertisingAttributionReportEndpoint(typeString) with valuehttps://linkrunner-skan.com - Add a new key
AttributionCopyEndpoint(typeString) with valuehttps://linkrunner-skan.com
xml
<key>NSAdvertisingAttributionReportEndpoint</key>
<string>https://linkrunner-skan.com</string>
<key>AttributionCopyEndpoint</key>
<string>https://linkrunner-skan.com</string>Expo
The Linkrunner Expo plugin adds this configuration automatically. No additional setup required.
These keys tell Apple to send copies of SKAdNetwork postbacks to Linkrunner alongside the ad network, enabling accurate attribution and reporting in your Linkrunner dashboard.
2. Configure the SKAN Schema
Linkrunner converts your event list into SKAN conversion values (0–63). The order you put events in determines their priority. Higher-priority events overwrite lower-priority ones in the same measurement window.
- Go to Settings → SKAN Setup → Events Setup in the Linkrunner Dashboard
- Add the events that matter for optimization (e.g.,
Purchase,Subscription Started,Onboarding Complete) - Drag rows to set priority (the topmost event has the highest priority)
- For revenue events, set a min and max range. For other events, click Add Average to track how often the event happens. Without an average, Linkrunner only records whether the event happened.
- Click Next: Generate SKAN Mapping to produce the fine and coarse conversion values
- Turn the switch at the top of Settings → SKAN Setup to Enabled. Linkrunner does not send conversion values to your app while SKAN is disabled.
Apple's SKAN allows up to 64 conversion values total. Next: Generate SKAN Mapping stays disabled while your configuration would exceed the limit. Remove an event or an average until it becomes available.
The schema is configured once and shared. Linkrunner automatically generates the fine and coarse conversion values from it for both Google and Meta.
For background on how this maps to SKAN 4.0, see Conversion Values in SKAdNetwork.
3. Complete Your Ad Network Setup
Follow the dedicated guide for each network you advertise on:
Google Ads SKAN Setup
iOS link ID, account connection, and event mapping to conversion actions.
Meta SKAN Setup
Conversion values in Events Manager and the Facebook SDK toggle.
Once postbacks start flowing, view them in the SKAN dashboard.
Support
For SKAN integration support, contact us at support@linkrunner.io.