使用 SKAdNetwork 的方法详解
什么是 SKAdNetwork?
SKAdNetwork 是苹果推出的一种隐私友好型框架,旨在帮助应用开发者在 iOS 设备上测量广告活动的有效性。它特别适用于广告归因和转换跟踪,符合苹果的隐私政策,如 App Tracking Transparency(ATT),确保用户数据安全。
CoarseConversionValue 的详细解读
CoarseConversionValue
是一个从 iOS 16.1 开始支持的结构,定义了转换值的分类:high
、medium
和 low
。
- 意义:通过分类转换值,SKAdNetwork 避免精确跟踪个人数据,保护用户隐私。广告网络可根据这些分类分析总体转换趋势,而非个体行为。
- 使用场景:在报告转换值时,与
fineValue
(精确值)一起使用,适合需要分组分析的场景。例如,电商应用可将高价值购买标记为high
,普通购买为medium
。 - 代码示例与注解:
// 示例:设置粗糙转换值
let coarseValue = SKAdNetwork.CoarseConversionValue.medium
print("Coarse value set to: \(coarseValue)") // 输出:Coarse value set to: medium
// 注解:这里选择 medium 作为分类,适合中等价值的转换,如普通商品购买。
startImpression 和 endImpression 的详细解读
这些方法由源应用(展示广告的应用)使用,报告广告展示的开始和结束。
- startImpression:
- 意义:当广告开始显示时调用,传入
SKAdImpression
对象,包含广告网络标识符(adNetworkIdentifier
)、活动标识符(campaignIdentifier
)等信息。 - 使用场景:适合广告网络跟踪广告曝光时间,优化投放策略。
- 意义:当广告开始显示时调用,传入
- endImpression:
- 意义:当广告隐藏或用户离开时调用,报告展示结束,帮助计算广告展示时长。
- 使用场景:与
startImpression
配合,测量广告有效曝光时间。
- 代码示例与注解:
let impression = SKAdImpression(adNetworkIdentifier: "network_id", campaignIdentifier: 12345, sourceIdentifier: "source_app", timestamp: Date().timeIntervalSince1970, nonce: NSUUID().uuidString, signature: "signature")
SKAdNetwork.startImpression(impression) { error in
if let error = error {
print("Error starting impression: \(error.localizedDescription)")
} else {
print("Impression started successfully")
}
}
// 注解:这里创建 SKAdImpression 对象,包含必要参数,调用 startImpression 开始跟踪。
SKAdNetwork.endImpression(impression) { error in
if let error = error {
print("Error ending impression: \(error.localizedDescription)")
} else {
print("Impression ended successfully")
}
}
// 注解:当广告隐藏时调用,结束跟踪,适合用户关闭广告或导航离开。
updatePostbackConversionValue 的详细解读
由目标应用(用户安装或交互的应用)使用,报告转换值回传给广告网络。
- 基本方法:
updatePostbackConversionValue(_ conversionValue: Int, completionHandler: ((Error?) -> Void)? = nil)
- 意义:报告单一整数转换值,适合简单场景。
- 使用场景:如用户完成一次购买,报告购买金额对应的值。
- 高级方法(iOS 16.1+):
updatePostbackConversionValue(_ fineValue: Int, coarseValue: SKAdNetwork.CoarseConversionValue, completionHandler: ((Error?) -> Void)? = nil)
- 意义:同时报告精确值(
fineValue
)和分类值(coarseValue
),增强隐私保护。 - 使用场景:适合需要分组分析的场景,如高价值购买标记为
high
。 lockWindow
参数:锁定窗口后,转换值不可更改,适合最终确认转换。
- 代码示例与注解:
// 基本用法:报告单一转换值
SKAdNetwork.updatePostbackConversionValue(10) { error in
if let error = error {
print("Error updating conversion value: \(error.localizedDescription)")
} else {
print("Conversion value updated successfully with value 10")
}
}
// 注解:这里报告值为 10,可能对应用户购买 10 美元的商品。
// 高级用法:报告细粒度和粗糙值
SKAdNetwork.updatePostbackConversionValue(fineValue: 10, coarseValue: .medium) { error in
if let error = error {
print("Error: \(error.localizedDescription)")
} else {
print("Conversion value updated with fine value 10 and coarse value medium")
}
}
// 注解:fineValue 为 10,coarseValue 为 medium,适合中等价值转换。
// 锁定窗口
SKAdNetwork.updatePostbackConversionValue(fineValue: 10, coarseValue: .medium, lockWindow: true) { error in
if let error = error {
print("Error: \(error.localizedDescription)")
} else {
print("Conversion value updated and window locked")
}
}
// 注解:锁定窗口后,值不可更改,适合最终确认。
SKStoreProductViewController 常量的详细解读
这些常量用于源应用在用户点击广告时,向目标应用传递归因参数,配合 SKStoreProductViewController
使用。
- 常量列表:
SKStoreProductParameterAdNetworkAttributionSignature
:广告网络的加密签名。SKStoreProductParameterAdNetworkCampaignIdentifier
:广告活动标识符。SKStoreProductParameterAdNetworkSourceIdentifier
:广告来源标识符(iOS 16.1+)。SKStoreProductParameterAdNetworkIdentifier
:广告网络标识符。SKStoreProductParameterAdNetworkNonce
:随机熵值,用于安全。SKStoreProductParameterAdNetworkTimestamp
:广告展示时间戳。SKStoreProductParameterAdNetworkSourceAppStoreIdentifier
:源应用 App Store 标识符。SKStoreProductParameterAdNetworkVersion
:广告网络版本。
- 意义:这些参数传递广告归因信息,确保目标应用能正确关联安装或打开行为。
- 使用场景:当用户点击广告,源应用打开目标应用产品页面,传递这些参数以便归因。
- 代码示例与注解:
let params: [String: Any] = [
SKStoreProductParameterAdNetworkIdentifier: "network_id",
SKStoreProductParameterAdNetworkCampaignIdentifier: 12345,
SKStoreProductParameterAdNetworkAttributionSignature: "signature",
SKStoreProductParameterAdNetworkNonce: NSUUID().uuidString,
SKStoreProductParameterAdNetworkTimestamp: Date().timeIntervalSince1970,
SKStoreProductParameterAdNetworkSourceAppStoreIdentifier: 123456789
]
let vc = SKStoreProductViewController()
vc.loadProduct(withParameters: params) { success, error in
if success {
self.present(vc, animated: true, completion: nil)
} else {
print("Error loading product: \(error?.localizedDescription ?? "Unknown error")")
}
}
// 注解:这里传递广告网络标识符、活动标识符等信息,确保归因准确。
注意事项与最佳实践
- 隐私合规:确保遵守苹果的 ATT 政策,获取用户跟踪许可,特别是在 iOS 14.5+。
- 数据准确性:定期验证 SKAdNetwork 数据,确保无重复或遗漏事件。
- 技术门槛:SKAdNetwork 实现可能复杂,建议使用 Firebase 或 Google Tag Manager 简化。
- 广告网络合作:与广告网络密切合作,确保正确传递标识符和参数。
表格:SKAdNetwork 方法总结
方法 | 用途 | 可用版本 | 备注 |
---|---|---|---|
startImpression | 报告广告展示开始 | iOS 14.5+ | 源应用使用,配合 SKAdImpression |
endImpression | 报告广告展示结束 | iOS 14.5+ | 源应用使用,测量展示时长 |
updatePostbackConversionValue (基本) | 报告单一转换值 | iOS 15.4+ | 目标应用使用,简单场景 |
updatePostbackConversionValue (高级) | 报告细粒度和粗糙值,可锁定窗口 | iOS 16.1+ | 增强隐私保护,适合分组分析 |
结论
通过正确使用 SKAdNetwork 的方法,开发者可在保护用户隐私的情况下,优化广告归因和测量效果。确保集成正确,遵守隐私法规,并与广告网络合作,以实现最佳表现。但建议使用 FB 或 Google Tag Manager 简化。