# SKAdNetwork 和 iOS 14 点击逻辑

> 请查看 iOS 14+ 的 SKAdNetwork 点击逻辑，确保在 Apple 隐私框架下准确归因和广告系列衡量。

## 流程图##flowchart

1. ironSource SDK 从发布者 app 的 Info.plist 读取 SKAdNetworkItem。
2. ironSource 出价请求将包含发布者 app 的 Info.plist 中包含的 DSP 的`imp.ext.skadn`对象。
3. 如果广告系列需要 SKAdNetwork 支持，DSP 应在广告响应中包含`seatbid.bid.ext.skadn`。
4. 如果显示了展示量并进行了用户点击，Apple 会考虑将该 app 进行安装归因。
5. 如果 SKAdNetwork 确定 DSP 的点击导致了安装，Apple 会将回传数据直接发发送 DSP。

## 出价请求##bid-request

如果 DSP SKAdNetworkItem 出现在发布者 app 的 Info.plist 中，IronSource 将在广告请求中包含一个新对象，该对象为创建签名提供必要的信息。

仅当 ironSource SDK 版本和操作系统版本都支持 SKAdNetwork 时，此对象才会存在。

### Imp.ext.skadn##imp.ext.skadn

| **属性**       | **描述**                                                                                                                             | **Type（类型）** | **示例**                                                               |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------- |
| `version`    | 支持的 skadnetwork 版本。始终为“2.0”或更高版本。取决于操作系统版本和 SDK 版本。注意：随着 SKAdNetwork 2.1 的发布，此字段已弃用，改用 BidRequest.imp.ext.skadn.versions 以支持版本号数组。 | 字符串          | "version" :"2.0"                                                     |
| `versions`   | 包含支持的 skadnetwork 版本的字符串数组。始终为“2.0”或更高版本。取决于操作系统版本和 SDK 版本。                                                                        | 字符串数组        | "versions": `["2.0", "2.1"]`                                         |
| `sourceapp`  | Apple App Store 中发布者应用的 ID。应与 OpenRTB 2.x 中的 app 匹配                                                                                | 字符串          | "sourceapp":"880047117"                                              |
| `skadnetids` | 发布者 app 的 Info.plist 中与广告请求相关的 SKAdNetworkItem 条目的子集，以小写字符串表示。                                                                     | 字符串数组        | "skadnetids": `["cdkw7geqsh.skadnetwork", "qyjfv329m4.skadnetwork"]` |
| `ext`        | 用于 OpenRTB 特定于交换的扩展的占位符。                                                                                                           | 对象           | "ext" : {}                                                           |

#### 请求 SKAN 对象示例##request-skan-object-example

```json
{
    imp: \[
    {
        ext: { }
        skadn: {
        version："2.0",
        sourceapp："880047117",
        skadnetids：\[
                    "cdkw7geqsh.skadnetwork",
                    "qyjfv329m4.skadnetwork"
                \]
            }
        }
    }
\]
}
```

## 出价响应##bid-response

如果广告请求包含 BidRequest.imp.ext.skadn 对象，则 DSP 可以选择将以下对象添加到其广告响应中。如果响应中包含该对象（需要所有参数），IronSource 会将点击数据和签名提交到 productView 以进行 iOS SKAdNetwork 归因。

### seatbid.bid.ext.skadn##seatbid.bid.ext.skadn

| **属性**       | **描述**                                                               | **Type（类型）** | **示例**                                         |
| ------------ | -------------------------------------------------------------------- | ------------ | ---------------------------------------------- |
| `version`    | SKAdNetwork 的版本。必须为 2.0 或更高版本。                                       | 字符串          | "version" :"2.0"                               |
| `network`    | 签名中使用的广告网络标识符。必须与请求中 skadnetids 数组的一项匹配                              | 字符串          | "network": "cdkw7geqsh.skadnetwork"            |
| `campaign`   | 与 Apple 规范兼容的广告系列 ID。从 2.0 开始，应为 1 到 100 之间的整数，以字符串表示                | 字符串          | "campaign":"45"                                |
| `itunesitem` | 广告主 app 在 Apple app Store 中的 ID。应与 BidResponse.seatbid.bid.bundle 匹配 | 字符串数组        | "itunesitem":"123456789                        |
| `nonce`      | 每个广告响应唯一的 ID。请参阅 Apple 的文档以了解正确的 UUID 格式要求。                          | 字符串          | "nonce":"473b1a16-b4ef-43ad-9591-fcf3aefa82a7" |
| `sourceapp`  | Apple App Store 中发布者应用的 ID。应与 BidRequest.imp.ext.skad.sourceapp 匹配   | 字符串          | "sourceapp":"880047117"                        |
| `timestamp`  | 签名时间使用的 Unix 时间（以毫秒字字符串为单位）                                          | 字符串          | "timestamp":"1594406341232"                    |
| `signature`  | Apple 指定的 SKAdNetwork 签名                                             | 字符串          | "signature":"MEQCIEQlmZRNfYzK…"                |

### Response SKAN 对象示例##response-skan-object-example

```json
{
    seatbid：\[
    {
        bid: \[
        {
            ext: { }
            skadn: {
                version："2.0",
                network: "cdkw7geqsh.skadnetwork",
                Campaign:"45",
                itunesitem："123456789",
                "nonce:""473b1a16-b4ef-43ad-9591-fcf3aefa82a7",
                sourceapp："880047117",
                timestamp:"1603246928149",
                签名："MEQCIEQlmZRNfYzKBSE8QnhLTIHZZZWCFgZpRqRxHss65KoFAiAJgJKjdrWdkLUOCCjuEx2RmFS7daRzSVZRVZ8RyMyUXg=="
                    }
                }
            }
        \]
    }
\]
}
```

## iOS 14.5 点击逻辑##ios-14.5-click-logic

### 视频##video

如果 DSP 返回具有有效`itunesitem`的 `BidResponse.seatbid.bid.ext.skadn` 对象：

* 对于 VAST 2.0 视频：
  * 仅当 `<ClickThrough>` 元素登陆 Apple App Store 时，才会启动 SKAdNetwork 归因（目前不支持重定向链接）。
  * IronSource 支持通过 VAST `<ClickTracking>` 元素进行点击跟踪。
* 对于 VAST 2.0 CompanionAds：
  * 仅当 `<CompanionClickThrough>` 元素登陆 Apple App Store 时，才会启动 SKAdNetwork 归因（目前不支持重定向链接）。
  * IronSource 支持通过 VAST `<CompanionClickTracking>` 元素进行点击跟踪。

### 显示##display

如果 DSP 返回具有有效`itunesitem`的 `BidResponse.seatbid.bid.ext.skadn` 对象：

* 展示广告素材必须通过调用 `mraid.open()` 来实现点击。
* 用户单击后，IronSource 将根据广告响应中收到的 itunesitem（捆绑包）显示 iOS StoreKit。

> **Note:**
>
> 任何其他 MRAID 方法（例如 `window.open`、`window.location`）都将导致点击跟踪差异。
