SKAdNetwork
A class that validates advertiser-driven app installations.
可以在保證用戶隱私的同時,衡量廣告系列的成功程度。涉及到3個參與者:
-
Ad networks - 廣告平臺
注冊并提供network ID Registering an Ad Network
提供經(jīng)過簽名的廣告給展示廣告的App Signing and Providing Ads.
接收被廣告展示的App安裝成功的postback
驗證postback Verifying an Install Validation Postback.
-
Source apps - 展示廣告的App
添加network ID到info.plist
顯示經(jīng)過ad network簽名的廣告
-
Advertised apps - 被廣告展示的App
SKAdNetwork APIs are designed to maintain user privacy. Apps don't need to use App Tracking Transparency before calling SKAdNetwork APIs, and can call these APIs regardless of their tracking authorization status. For more information about privacy, see User Privacy and Data Use.
ATT - AppTrackingTransparency
IDFA - Identifier For Advertising
IDFA 存儲在手機(jī)系統(tǒng)中几苍,可被設(shè)備上的每個 APP 獲取,因此可以打通不同 APP 之間的廣告缀程。這就相當(dāng)于廣告追蹤,你所有的瀏覽歷史都有可能會別的商家利用市俊,給你推相同或相似的廣告杨凑。
ATTrackingManager
open class func requestTrackingAuthorization(completionHandler completion: @escaping (ATTrackingManager.AuthorizationStatus) -> Void)
class var trackingAuthorizationStatus: ATTrackingManager.AuthorizationStatus
@available(iOS 14, *)
public enum AuthorizationStatus : UInt {
case notDetermined = 0
case restricted = 1
case denied = 2
case authorized = 3
}
1. SKStoreProductViewController -> loadProduct(withParameters:completionBlock:)
func loadProduct(withParametersparameters: [String : Any], completionBlockblock: ((Bool, Error?) -> Void)? = nil)
主要傳遞parameters包含SKStoreProductParameterITunesItemIdentifier,廣告應(yīng)用的商店ID摆昧。
其它參數(shù):
// iTunes Store item identifier (NSNumber) of the product
@available(iOS 6.0, *)
public let SKStoreProductParameterITunesItemIdentifier: String
// SKU for the In-App Purchase product (NSString) to render at the top of the product page
@available(iOS 11.0, *)
public let SKStoreProductParameterProductIdentifier: String
// iTunes Store affiliate token (NSString)
@available(iOS 8.0, *)
public let SKStoreProductParameterAffiliateToken: String
// iTunes Store affiliate campaign token (NSString)
@available(iOS 8.0, *)
public let SKStoreProductParameterCampaignToken: String
// Analytics provider token (NSString)
@available(iOS 8.3, *)
public let SKStoreProductParameterProviderToken: String
// Advertising partner token (NSString)
@available(iOS 9.3, *)
public let SKStoreProductParameterAdvertisingPartnerToken: String
// Advertising network's cryptographic signature for the atribution params (NSString)
@available(iOS 11.3, *)
public let SKStoreProductParameterAdNetworkAttributionSignature: String
// Advertising network campaign identifier (NSNumber)
@available(iOS 11.3, *)
public let SKStoreProductParameterAdNetworkCampaignIdentifier: String
// Advertising network identifier (NSString)
@available(iOS 11.3, *)
public let SKStoreProductParameterAdNetworkIdentifier: String
// Random entropy value for security (NSUUID)
@available(iOS 11.3, *)
public let SKStoreProductParameterAdNetworkNonce: String
// Timestamp for this ad impression (NSNumber)
@available(iOS 11.3, *)
public let SKStoreProductParameterAdNetworkTimestamp: String
// App Store item identifier of the source app (NSNumber)
@available(iOS 14.0, *)
public let SKStoreProductParameterAdNetworkSourceAppStoreIdentifier: String
@available(iOS 14.0, *)
public let SKStoreProductParameterAdNetworkVersion: String
2. SKAdNetwork
-> registerAppForAdNetworkAttribution()
-> updateConversionValue(_ conversionValue: Int)
在廣告主應(yīng)用第一次調(diào)用registerAppForAdNetworkAttribution()后撩满,會在24小時內(nèi)的時間窗結(jié)束后,發(fā)送歸因的postback給adnetwork绅你。如果在這個時間窗內(nèi)伺帘,調(diào)用了updateConversionValues(_:)則將install postback事件再次推遲24小時(會延遲1天到64天之間,且最多傳64種轉(zhuǎn)化)忌锯。根據(jù)Singular的demo伪嫁,該值在0-63。
@available(iOS 11.3, *)
open class SKAdNetwork : NSObject {
// Participating apps should call this on launch to complete the install+open action associated with a product view
@available(iOS 11.3, *)
open class func registerAppForAdNetworkAttribution()
@available(iOS 14.0, *)
open class func updateConversionValue(_ conversionValue: Int)
}
AppsFlyer 解決方案:
新增ATT權(quán)限獲取
func requestAppTrackingAuthorization() {
if #available(iOS 14.5, *) {
ATTrackingManager.requestTrackingAuthorization { (status) in
var permissionStatusStr = ""
switch status {
case .authorized:
permissionStatusStr = "authorized"
case .denied:
permissionStatusStr = "denied"
case .restricted:
permissionStatusStr = "restricted"
case .notDetermined:
permissionStatusStr = "notDetermined"
@unknown default:
permissionStatusStr = "unknown"
}
}
}
}
設(shè)置延遲方法
if #available(iOS 14.5, *) {
AppsFlyerLib.shared().waitForATTUserAuthorization(timeoutInterval: 60)
}
Other Tips
Build Phases -> Link Binary With Libraries -> optional