SKAdNetwork & ATT Permission淺析

SKAdNetwork

A class that validates advertiser-driven app installations.

可以在保證用戶隱私的同時,衡量廣告系列的成功程度。涉及到3個參與者:

  1. Ad networks - 廣告平臺

  2. Source apps - 展示廣告的App

    • 添加network ID到info.plist

    • 顯示經過ad network簽名的廣告

  3. 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 存儲在手機系統(tǒng)中,可被設備上的每個 APP 獲取,因此可以打通不同 APP 之間的廣告。這就相當于廣告追蹤,你所有的瀏覽歷史都有可能會別的商家利用,給你推相同或相似的廣告。

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
}
image.png

1. SKStoreProductViewController -> loadProduct(withParameters:completionBlock:)

func loadProduct(withParametersparameters: [String : Any], completionBlockblock: ((Bool, Error?) -> Void)? = nil)

主要傳遞parameters包含SKStoreProductParameterITunesItemIdentifier,廣告應用的商店ID。

其它參數:

// 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)

在廣告主應用第一次調用registerAppForAdNetworkAttribution()后,會在24小時內的時間窗結束后,發(fā)送歸因的postback給adnetwork。如果在這個時間窗內,調用了updateConversionValues(_:)則將install postback事件再次推遲24小時(會延遲1天到64天之間,且最多傳64種轉化)。根據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權限獲取

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"
            }
        }
    }
}

設置延遲方法

if #available(iOS 14.5, *) {
    AppsFlyerLib.shared().waitForATTUserAuthorization(timeoutInterval: 60)
}

Other Tips
Build Phases -> Link Binary With Libraries -> optional

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容