iOS 14 SKAdNetwork Support for DSPs

With Apple’s announcement on 24th June 2020, DSPs will need to start utilizing Apple’s privacy conscious SKAdNetwork framework for install and conversion tracking on iOS14+ devices. Smaato is adding support for SKAdNetwork attribution into its SDK along with necessary bid request/response signals. For display, we support <a href>, mraid.open(), window.open() & window.location click redirect methods. The click redirects (ex, HTTP status 3xx) will be followed in the methods mentioned above for display, native and video Ad formats.

What should DSPs do to enable SKAdNetwork attribution with Smaato?

  • DSPs should register as an Ad Network to Apple’s SKAdNetwork API. Click here to register.
  • Supply your public key to Apple and set your postback urls.
  • Provide your SKAdNetwork ID to your Smaato Account Manager.
  • Smaato will get your SKAdNetwork ID(s) added to publishers’ info.plist.
  • DSPs should be able to ingest the list of SKAdNetwork ID(s), version, and source bundle ID information in BidRequest.imp.ext.skadn object of the bid request.
  • If the DSP is responding with a SKAdNetwork enabled campaign, it should respond with SKAdNetwork ID and all relevant fields in the bid response.
  • Advertiser app should be registering its new users to SkAdNetwork via registerAppForAdNetworkAttribution()
  • DSPs should have an install tracking service to handle install data and signature from the SKAdNetwork postback.

SKAdNetwork Attribution Workflow

Bid Request

Object: BidRequest.imp.ext.skadn

This object will be populated if all conditions below are met:

  • The DSP has at least one SKAdNetwork ID registered in the publisher’s info.plist
  • The user’s device is operating on iOS14 or above.
  • The Application is integrated with Smaato via a SKAdNetwork supported version.
  • The DSP is on Smaato’s OpenRTB 2.4 and above spec.
Attribute Description Type Example
versions Array of strings containing the supported skadnetwork versions. Always “2.0” or higher. Dependent on both the OS version and the SDK version. array of strings “versions”: [“2.0”, “2.1”, “2.2”, “3.0”, “4.0”]
version Version of skadnetwork supported. Always “2.0” or higher. Dependent on both the OS version and the SDK version.

Note: With the release of SKAdNetwork 2.1, this field is deprecated in favor of the   BidRequest.imp.ext.skadn.versions  to support an array of version numbers.
string “version”: “2.0”
sourceapp ID of publisher app in Apple’s App Store. Should match   app.bundle  in OpenRTB 2.x and   app.storeid  in AdCOM 1.x string “sourceapp”: “880047117”
skadnetids A subset of SKAdNetworkItem entries in the publisher app’s Info.plist,   expressed as lowercase strings, that are relevant to the bid request. Recommended that this list not exceed 10.

Note: BidRequest.imp.ext.skadn.skadnetlist.addl  is the preferred method to express raw SKAdNetwork IDs.
array of strings “skadnetids”: [“cdkw7geqsh.skadnetwork”, “qyjfv329m4.skadnetwork”]
skadnetlist Object containing the IABTL list definition object “skadnetlist”: { “max”:306, “excl”:[2,8,10,55] }
productpage Custom Product Page support. See Apple’s   Custom Product Page  doc for details. integer “productpage”: 1
ext Placeholder for exchange-specific extensions to OpenRTB. object “ext”: {}

Object:   BidRequest.imp.ext.skadn.skadnetlist

IABTL skadnetwork object list attributes.

Attribute Description Type Example
max IABTL list containing the max entry ID of SKAdNetwork ID. Format will be: “max entity ID” where 306 in the example on the right will be all SKAdNetwork IDs entry number 306 and below. integer “max”:306
excl Comma separated list of integer IABTL registration IDs to be excluded from IABTL shared list. array of integers “excl”: [44,14,18]
addl Comma separated list of string SKAdNetwork IDs,   expressed as lowercase strings, not included in the IABTL shared list. The intention of addl is to be the permanent home for raw SKAdNetwork IDs, migrating away from   BidRequest.imp.ext.skadn.skadnetids. Recommended that this list not exceed 10. array of strings “addl”: [“cdkw7geqsh.skadnetwork”, “qyjfv329m4.skadnetwork”]
ext Placeholder for exchange-specific extensions to OpenRTB. object “ext”:{}

Example

Used for direct SSP to DSP connections where a DSP wants to only consume their own relevant SKAdNetwork IDs.

{
  "imp": [
    {
      "ext": {
        "skadn": {
          "versions": ["2.0", "2.1", "2.2", "3.0", "4.0"],
          "sourceapp": "880047117",
          "productpage": 1,
          "skadnetlist":{
              "max":306,
              "excl":[2,8,10,55],
              "addl": [
                "cdkw7geqsh.skadnetwork",
                "qyJfv329m4.skadnetwork"
              ]
          }
        }
      }
    }
  ]
}

Changes in Bid Request Device Object

If the user does not give permission through the AppTrackingTransparency framework for targeting, IDFA field will not be passed. Smaato will offer IDFV and an exchange based device identifier. These two identifiers can be used for fraud prevention and frequency capping, not for targeted advertising or advertising measurement purposes.

Attribute
Description
Type
Example
BidRequest.device.ifa IDFA will only be passed if the user gives the permission through the AppTrackingTransparency framework. string “ifa”:”F52329FE-DAB6-11EA-87D0-0242AC130003”
BidRequest.device.ext.ifv An alphanumeric string that uniquely identifies a device to the publisher. string “ifv”:”A9F6BDD8-3343-4E6D-A283-F98986880335”
BidRequest.device.ext.atts (iOS 14+ only) An integer passed to represent the app’s app tracking authorization status, where
0 = not determined
1 = restricted
2 = denied
3 = authorized
integer “atts”:3
BidRequest.user.id Exchange defined user identifier which will be consistent up to 24 hours within the same application. string “id”:”F4EE2B2D-1B0E-4BA9-8471-28E9ED8FB95C”

Bid Response

Object: BidResponse.seatbid.bid.ext.skadn

For bid requests with SKAdnetwork extension object, the DSP can return a bid response which includes the following fields to enable SKAdNetwork install and conversion attribution. Smaato will validate SKAdNetwork ID, bundle ID fields in the response, and call loadProduct() with appropriate values.

Attribute Description Type Example
version Version of SKAdNetwork desired. Must be 2.0 or above. string “version”: “4.0”
network Ad network identifier used in signature. Should match one of the items in the skadnetids array in the request string “network”: “cdkw7geqsh.skadnetwork”
sourceidentifier A four-digit integer that ad networks define to represent the ad campaign. Used in SKAdNetwork 4.0+, replaces Campaign ID `campaign`. DSPs must generate signatures in 4.0+ using the Source Identifier. Please refer to the   SKAdNetwork 4 release notes  for more details. string “sourceidentifier”: “4321”
campaign Campaign ID compatible with Apple’s spec. As of 2.0, should be an integer between 1 and 100, expressed as a string.

Note: Used in SKAdNetwork 3.0 and below. Replaced by Source Identifier   sourceidentifier  in 4.0 and above
string “campaign”: “45”
itunesitem ID of advertiser’s app in Apple’s app store. Should match   BidResponse.seatbid.bid.bundle string “itunesitem”: “123456789”
productpageid Custom Product Page ID (UUID) string “productpageid”: “45812c9b-c296-43d3-c6a0-c5a02f74bf6e”
fidelities Supports multiple fidelity types introduced in SKAdNetwork v2.2 object array “fidelities”: [ { “fidelity”: 0, “signature”: “MEQCIEQlmZRNfYzK…”, “nonce”: “473b1a16…”, “timestamp”: “1594406341” } ]
nonce An id unique to each ad response. Refer to Apple’s documentation for the   proper UUID format requirements

Note: With the release of SKAdNetwork v2.2, this field is deprecated in favor of the   BidResponse.seatbid.bid.ext.skadn.fidelities.nonce  to support multiple fidelity-types.
string “nonce”: “473b1a16-b4ef-43ad-9591-fcf3aefa82a7”
sourceapp ID of publisher’s app in Apple’s app store. Should match   BidRequest.imp.ext.skad.sourceapp string “sourceapp”: “880047117”
timestamp Unix time in millis string used at the time of signature

Note: With the release of SKAdNetwork 2.2, this field is deprecated in favor of the   BidResponse.seatbid.bid.ext.skadn.fidelities.timestamp  to support multiple fidelity-types.
string “timestamp”: “1594406341232”
signature SKAdNetwork signature as specified by Apple

Note: Apple requires that both the ad network nonce and ad network identifier be lowercase when signing for either fidelity type (impressions or clicks), as per SKAdNetwork specifications.

Note: With the release of SKAdNetwork 2.2, this field is deprecated in favor of the   BidResponse.seatbid.bid.ext.skadn.fidelities.signature  to support multiple fidelity-types.
string “signature”: “MEQCIEQlmZRNfYzK…”
ext Placeholder for exchange-specific extensions to OpenRTB. object “ext”: {}

Object:   BidResponse.seatbid.bid.ext.skadn.fidelities

Fields that should have different values for the different fidelity types (e.g.   fidelity,   nonce,   signature) are wrapped into an array of objects.

Note:  Adding   timestamp  to this list allows bidders to parallelize the cryptography portions of creating their bid response when supporting multiple fidelities. The same timestamp can be used across fidelities if desired but this move provides bidders with greater implementation flexiblity.

Attribute Description Type Example
fidelity The fidelity-type of the attribution to track integer “fidelity”: 0
nonce An id unique to each ad response. Refer to Apple’s documentation for the   proper UUID format requirements string “nonce”: “473b1a16-b4ef-43ad-9591-fcf3aefa82a7”
timestamp Unix time in millis string used at the time of signature string “timestamp”: “1594406341”
signature SKAdNetwork signature as specified by Apple string “signature”: “MEQCIEQlmZRNfYzK…”
ext Placeholder for exchange-specific extensions to OpenRTB. object “ext”: {}

Example v4.0

{
  "seatbid": [
    {
      "bid": [
        {
          "ext": {
            "skadn": {
              "version": "4.0",
              "network": "cdkw7geqsh.skadnetwork",
              "sourceidentifier": "4321",
              "itunesitem": "123456789",
              "sourceapp": "880047117",
              "productpageid": "45812c9b-c296-43d3-c6a0-c5a02f74bf6e",
              "fidelities": [
                {
                  "fidelity": 0,
                  "signature": "TUVRQ0lFUWxtWlJOZll6S0JTRThRbmhMVElIWlpaV0NGZ1pwUnFSeEhzczY1S29GQWlBSmdKS2pkcldka0xVT0NDanVFeDJS==",
                  "nonce": "473b1a16-b4ef-43ad-9591-fcf3aefa82a7",
                  "timestamp": "1594406341"
                },
                {
                  "fidelity": 1,
                  "signature": "VFVWUlEwbEZVV3h0V2xKT1psbDZTMEpUUlRoUmJtaE1WRWxJV2xwYVYwTkdaMXB3VW5GU2VFaHpjelkxUzI5R1FXbEJTbDBG==",
                  "nonce": "e650de09-2a9f-4dc3-a4d1-544c402e9095",
                  "timestamp": "1594406342"
                }
              ]
            }
          }
        }
      ]
    }
  ]
}

Example v2.2

{
  "seatbid": [
    {
      "bid": [
        {
          "ext": {
            "skadn": {
              "version": "2.2",
              "network": "cdkw7geqsh.skadnetwork",
              "campaign": "45",
              "itunesitem": "123456789",
              "sourceapp": "880047117",
              "productpageid": "45812c9b-c296-43d3-c6a0-c5a02f74bf6e",
              "fidelities": [
                {
                  "fidelity": 0,
                  "signature": "MEQCIEQlmZRNfYzKBSE8QnhLTIHZZZWCFgZpRqRxHss65KoFAiAJgJKjdrWdkLUOCCjuEx2RmFS7daRzSVZRVZ8RyMyUXg==",
                  "nonce": "473b1a16-b4ef-43ad-9591-fcf3aefa82a7",
                  "timestamp": "1594406341"
                },
                {
                  "fidelity": 1,
                  "signature": "GRlMDktMmE5Zi00ZGMzLWE0ZDEtNTQ0YzQwMmU5MDk1IiwKICAgICAgICAgICAgICAgICAgInRpbWVzdGTk0NDA2MzQyIg==",
                  "nonce": "e650de09-2a9f-4dc3-a4d1-544c402e9095",
                  "timestamp": "1594406342"
                }
              ]
            }
          }
        }
      ]
    }
  ]
}

Example v2.0

{
  "seatbid": [
    {
      "bid": [
        {
          "ext": {
            "skadn": {
              "version": "2.0",
              "network": "cdkw7geqsh.skadnetwork",
              "campaign": "45",
              "itunesitem": "123456789",
              "nonce": "473b1a16-b4ef-43ad-9591-fcf3aefa82a7",
              "sourceapp": "880047117",
              "timestamp": "1594406341232",
              "signature": "MEQCIEQlmZRNfYzKBSE8QnhLTIHZZZWCFgZpRqRxHss65KoFAiAJgJKjdrWdkLUOCCjuEx2RmFS7daRzSVZRVZ8RyMyUXg=="
            }
          }
        }
      ]
    }
  ]
}
Doc Feedback Product Feedback

Last Modified: April 21, 2023 at 4:13 pm