SKAdNetwork 方法详解

214 阅读5分钟

使用 SKAdNetwork 的方法详解

什么是 SKAdNetwork?

SKAdNetwork 是苹果推出的一种隐私友好型框架,旨在帮助应用开发者在 iOS 设备上测量广告活动的有效性。它特别适用于广告归因和转换跟踪,符合苹果的隐私政策,如 App Tracking Transparency(ATT),确保用户数据安全。

CoarseConversionValue 的详细解读

CoarseConversionValue 是一个从 iOS 16.1 开始支持的结构,定义了转换值的分类:highmediumlow

  • 意义:通过分类转换值,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 简化。