什么是SKAdNetwork?
SKAdNetwork是苹果公司推出的一种广告跟踪解决方案。它是一种基于隐私保护的广告转化跟踪方式,旨在保护用户的隐私,同时仍然允许广告主获得有关其广告活动的有用数据。
使用SKAdNetwork,广告主可以通过苹果服务器获取有关其广告活动的数据,而无需直接访问用户的设备或隐私数据。此外,SKAdNetwork还可以帮助广告主遵守不同国家和地区的隐私保护法规,例如欧盟的GDPR和加拿大的PIPEDA。
另外,SKAdNetwork归因还可以帮助应用开发者更好地了解他们的广告系列效果,尤其是在iOS 14及以上版本中,因为苹果公司已经限制了第三方跟踪和数据收集。通过使用SKAdNetwork归因,应用开发者可以获取应用的安装和转化数据,而无需使用设备标识符或其他敏感信息。这可以帮助他们更好地优化广告系列,并提高广告投资的回报率。
SKAdNetwork适用于iOS 14.0以上系统版本,低于iOS 14.0的版本可以考虑使用其他广告归因解决方案,例如IDFA或设备ID。
归因的流程
SKAdNetwork归因的整个流程的简单流程图如下:
lua
+-----------------+ +---------------+ +--------------+
| | | | | |
| Advertiser App +--->--+ Ad Network SDK+--->+ Apple Store |
| | | | | |
+-----------------+ +---------------+ +--------------+
| |
| |
| |
| |
+---------------+ +--------------+
| | | |
| Ad Network API+<-----+Apple Search Ads|
| | | |
+---------------+ +--------------+
| |
| |
| |
| |
+---------------+ +--------------+
| | | |
| Ad Server +<-----+ Install |
| | | Validation |
+---------------+ +--------------+
该流程的主要步骤如下:
-
Advertiser App中嵌入Ad Network SDK,向用户展示广告,当用户点击广告时,SDK将获取有关广告的信息并提交给Ad Network API。
-
Ad Network API将广告数据发送到Apple Search Ads,若广告被识别为带有SKAdNetwork ID的广告,则Apple Search Ads将返回一个带有SKAdNetwork ID的响应。
-
Ad Network SDK将SKAdNetwork ID和其他广告数据存储在设备上,并将这些信息发送回Ad Server。
-
Ad Server将使用SKAdNetwork ID和其他广告数据来验证应用安装并报告转化事件。
请注意,该流程提供了有限的归因数据,例如应用安装数量、广告系列ID和转化事件。该流程仅适用于使用SKAdNetwork归因的广告,而不适用于传统的广告追踪方法。由于SKAdNetwork归因不收集个人身份信息,因此无法进行准确的用户跟踪和定向。 虽然它提供了有限的归因数据,但它可以帮助应用开发者更好地了解他们的广告系列效果,并一定程度上提高广告投资的回报率。
SKAdNetwork的使用
要使用SKAdNetwork,需要在以下几个方面进行设置和配置:
- 在Xcode中添加SKAdNetwork框架。
- 在应用程序中实现SKAdNetwork接口,以便在应用程序发生广告转化时报告数据。
- 在苹果开发者账户中注册SKAdNetwork ID,并在info.plist文件中添加SKAdNetworkItems数组来包含注册的ID。
- 后端需要存储广告主的SKAdNetwork ID和相关数据,处理应用程序报告的广告转化数据,向苹果服务器请求广告数据,以及管理应用程序的SKAdNetwork配置。
- 为了获得广告数据和SKAdNetwork数据,可以使用Apple Search Ads API,需要在苹果开发者账户中注册,并在注册后获得API密钥和访问令牌。
以下是使用SKAdNetwork的示例代码:
在应用程序中实现SKAdNetwork接口
需要在应用程序中实现SKAdNetwork接口,以便在应用程序发生广告转化时报告数据。以下是一个示例:
swift
import StoreKit
class MyViewController: UIViewController, SKAdNetworkDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Set the SKAdNetwork delegate
SKAdNetwork.registerAppForAdNetworkAttribution()
SKAdNetwork.registerAppForAdNetworkAttribution(self)
}
func updateConversionValue() {
// Get the current conversion value
var conversionValue = SKAdNetwork.conversionValue
// Update the conversion value
conversionValue += 1
// Set the new conversion value
SKAdNetwork.updateConversionValue(conversionValue)
}
// SKAdNetworkDelegate methods
func networkDidBecomeActive() {
// This method is called when the SKAdNetwork framework becomes active.
}
func didUpdateConversionValue(_ conversionValue: Int, for adNetwork: SKAdNetwork) {
// This method is called when the conversion value is updated.
}
func didFailWithError(_ error: Error, for adNetwork: SKAdNetwork) {
// This method is called when an error occurs.
}
}
在此示例中,我们创建了一个名为MyViewController
的视图控制器,并将其设置为SKAdNetwork的委托。此外,我们还实现了updateConversionValue()
方法,该方法用于更新广告转化值。
在viewDidLoad()
方法中,我们调用了registerAppForAdNetworkAttribution()
方法,以便将应用程序注册到SKAdNetwork。我们还将self
作为SKAdNetwork的委托对象,以便在广告转化事件发生时接收通知。
在updateConversionValue()
方法中,我们获取当前的广告转化值,并将其增加1。然后,我们使用updateConversionValue()
方法将新的广告转化值设置回SKAdNetwork。
使用Server-to-Server的API获取广告数据
以下是使用Apple Search Ads API获取广告数据和SKAdNetwork数据的PHP示例代码:
php
<?php
// 设置授权信息
$access_token = "Your access token";
$header = array(
"Authorization: Bearer " . $access_token,
"Content-Type: application/json"
);
// 设置请求参数
$data = array(
"startTime" => "2023-07-20T00:00:00Z",
"endTime" => "2023-07-26T00:00:00Z",
"selector" => array(
"orderBy" => array(
array(
"field" => "date",
"sortOrder" => "ASCENDING"
)
),
"groupBy" => array(
"field" => "campaignId"
),
"conditions" => array(
array(
"field" => "countryCode",
"operator" => "EQUALS",
"values" => array("US")
)
)
),
"reportType" => "SA_APP_INSTALLS"
);
// 发送API请求
$url = "https://api.searchads.apple.com/api/v6/reports";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// 解析API响应
$result = json_decode($response, true);
if (!empty($result['data'])) {
foreach ($result['data'] as $row) {
// 处理每一行数据
$date = $row['metadata']['date'];
$campaign_id = $row['metadata']['campaignId'];
$installs = $row['metrics']['installs'];
$skadnetwork_data = $row['skadNetworkData'];
// 处理SKAdNetwork数据
if (!empty($skadnetwork_data)) {
foreach ($skadnetwork_data as $network) {
$skadnetwork_id = $network['skadNetworkIdentifier'];
$skad_version = $network['version'];
$conversions = $network['conversions'];
// 处理每个SKAdNetwork的数据
}
}
}
}
以上代码演示如何使用PHP发送API请求以获取指定日期范围内的广告数据和SKAdNetwork数据。将Your access token
替换为自己的访问令牌,并根据需求修改请求参数。
该接口返回的元数据包含有关请求和响应的信息,例如请求的时间范围、请求的字段和筛选条件等。实际的广告数据包含所请求的广告系列、广告组和广告的详细数据,例如展示量、点击量、转化事件、花费、收入等指标。
以下是一个示例API响应的JSON格式:
ruby
{
"version": "4.0", // SKAdNetwork版本号
"ad-network-id": "com.example", // 广告平台ID
"source-identifier": "xx", // 取代 campaign-id 的分层来源标识符。此字符串表示原始值的两位数、三位数或四位数。
"app-id": xxxxxx, // 投放广告的 App Store App ID
"transaction-id": "xxxxxxxxxxxxxxxx", // 用于转化验证,去重安装验证回传。
"redownload": false, // 是否重复下载
"source-domain": "example.com", // 仅适用于 Web 广告。SKAdNetwork for Web Ads 投放广告的来源域名,字段值与 source-app-id 是对立,两者只会返回其一。
"fidelity-type": 1, // 值为 0 表示页面展示类型的广告;值为 1 表示 StoreKit 渲染的广告或 SKAdNetwork 归因的 Web 广告。
"did-win": true, // 如果广告网络赢得归因,则为 true,如果回传代表没有赢得归因的合格广告效果,则为 false。(注意:只有为 ture 时,才会包含字段 source-app-id 和值。)
"conversion-value":66, // 转化值。只有当已安装的 app 提供转换值,并且提供参数满足苹果的隐私阈值时,conversion-value 才会出现在回传中。
"coarse-conversion-value": "high", // 粗粒度的转换值,可能的值为字符串 "low"、"medium" 和 "high"。系统在较低的回传数据层以及第二次和第三次回传中发送该值,且不会返回转化值(conversion-value)。
"postback-sequence-index": 0, // 可能的整数值 0、1 和 2。分别表示由三个转换窗口产生的回传顺序
"attribution-signature": "xxxxxxxxxxxxxxxxxxx" // 需要验证的 Apple 的归因签名。
}
在实践中,开发者需要思考调用的时机,并且对conversion-value
数值做良好的定义,就能达到衡量广告用户质量的目的。
后端需要做些什么
在使用SKAdNetwork时,后端需要做以下工作:
- 在服务器上存储广告主的SKAdNetwork ID和相关数据。当应用程序报告广告转化时,后端需要检查报告中的SKAdNetwork ID是否与服务器上存储的ID匹配,以确保报告来自有效的广告主。
- 处理应用程序报告的广告转化数据。当应用程序报告广告转化时,后端需要处理报告中的转化数据,并将其存储在服务器上。然后,后端可以使用这些数据来分析广告转化和用户行为。
- 向苹果服务器请求广告数据。广告主可以向苹果服务器请求广告数据,以了解其广告在应用程序中的效果。后端需要负责向苹果服务器发送请求,并将响应数据返回给广告主。
- 管理应用程序的SKAdNetwork配置。后端需要确保应用程序的SKAdNetwork配置与服务器上存储的配置匹配。如果配置不匹配,后端需要通知广告主,以便其更新其应用程序的配置。