iOS14 and SKAdNetwork Support
Last updated on September 1, 2020
OpenX is dedicated in providing solutions that help both publishers and buyers adjust to new market changes. This is no exception with Apple’s recent announcement of iOS14, which will be released in mid-September 2020 and will change how ad tech companies can target iOS users.
In short term, OpenX is adding support for Apple’s SKAdNetwork version 2.0 to help advertisers attribute conversions for app installation campaigns on iOS14+. OpenX is going to comply with a IAB Tech Lab solution supporting extensions for SKAdNetwork in bid response and bid requests. In addition, OpenX is committed to support advertisers in keeping the control over frequency capping and fraud detection. This will help publishers to enrich their requests and provide more valuable traffic to the buyers.
As a long term solution, OpenX is looking for integrating identity solutions like OpenAudience, LiveRamp, and other identity providers to enable email/hashed email targeting for in-app traffic.
NOTE
Please note that new objects in bid requests and bid responses are a work in progress.
Bid Request Information
BidRequest.imp.ext.skadn
If a DSP has at least one SKAdNetworkItem in the publisher app’s Info.plist sent in bid request, OpenX will include a new object in the bid request BidRequest.imp.ext.skadn
that includes signals necessary for creating a signature. If there are no SKADNetworkItems in ad requests sent to OpenX, the object is not attached to the bid request.
Object | Type | Description |
---|---|---|
version | string | Version of skadnetwork supported. Always “2.0” or higher. Dependent on both the OS version and the SDK version. For example: "version":"2.0" |
sourceapp | string | ID of publisher app in Apple’s App Store. Should match BidRequest.app.bundle For example: "sourceapp":"850519046" |
skadnetids | array | A subset of SKAdNetworkIdentifier entries in the publisher app’s info.plist that are relevant to the DSP. The list is filtered per DSP (DSP receives only IDs relevant to it). For example: "skadnetids": ["XCLNXRM7PM.skadnetwork"]["dsp1.skadnetwork"] |
ext | object | Placeholder for exchange-specific extensions to OpenRTB. For example: "ext": {} |
Bid Response Information
BidResponse.seatbid.bid.ext.skadn
If a bid request contained SKAdNetworkItem than DSP is required to provide the following information in the bid response:
Object | Type | Description |
---|---|---|
version | string | Version of SKAdNetwork desired. Must be 2.0 or above. For example: "version":"2.0" |
network | string | Ad network identifier used in signature. Should match one of the items in the skadnetids array in the request.For example: "network": “XCLNXRM7PM.skadnetwork" |
campaign | string | Campaign ID compatible with Apple’s spec. As of 2.0, should be an integer between 1 and 100 , expressed as a string.For example: "campaign":"11" |
itunesitem | string | ID of advertiser’s app in Apple’s app store. Should match BidResponse.bid.bundle .For example: "itunesitem":"850519046" |
nonce | string | An id unique to each ad response (GUID/UUID). For example: "nonce": "cefed72f-a2re-01224544" |
sourceapp | string | ID of publisher’s app in Apple’s app store. Should match BidRequest.imp.ext.skad.sourceapp .For example: "sourceapp":"987654321" |
timestamp | string | Unix time in millis string used at the time of signature. For example: "timestamp": "987654321" |
signature | string | SKAdNetwork signature as specified by Apple. For example: "signature": "LOWQAKZJKEaNuWPl==" |
ext | object | Placeholder for exchange-specific extensions to OpenRTB. For example: "ext": {} |
Additional Fields to Bid Requests
If there is no IDFA in the AdRequest publisher/bidout partner may choose to send the following information to OpenX in order to help demand partners make informed decisions and keep control of frequency capping and fraud detection.
Object | Type | Description |
---|---|---|
ext.idfv | object: Device, string | A persistent unique identifier for each app on a device that identifies the device to the app’s vendor. The value of this property is the same for apps that come from the same vendor running on the same device. A different value is returned for apps on the same device that come from different vendors, and for apps on different devices regardless of vendor. |
ext.devuserid | object: App, string | A developer’s own persistent unique user identifier. |
ext.impdepth | object: User, integer | The count of impressions for a specific placement type in a given app session. The impression depth is reset once the session ends. |
ext.sessionduration | object: User, integer | The total duration of time a user has spent so far in a specific app session expressed in seconds. For example, a user has been playing Word Game for 45 seconds. |