看到你捡到了宝,直接用就行了
import AdServices import Foundation import iAd ///ASA归因技术支持 struct ASA {
static let shared = ASA() private init() {
} func getToken() -> String? {
var adToken: String? if #available(iOS 14.3, *) {
do {
adToken = try AAAttribution.attributionToken() } catch {
} } return adToken } /// Apple ASA 技术支持 func AppleASA() {
if #available(iOS 14.3, *) {
let adToken = getToken() // 发送POST给苹果一个归因数据 sendToken(Token: adToken ?? "") {
attrData in postData(tokenData: attrData) print("LogAds:14.3 Dict: \(attrData ?? [:])")
if let attrData = attrData {
var attrDataL: [String: Any] = attrData
// 添加userId
attrDataL["type"] = "1"
}
}
} else {
ADClient.shared().requestAttributionDetails {
attrData, _ in
postData(tokenData: attrData)
print("LogAds:14- Dict: \(attrData ?? [:])")
}
}
}
/// 向服务端发送数据
/// - Parameter tokenData: 发送归因token后得到的数据
private func postData(tokenData: [String: Any]?) {
guard let tokenData = tokenData else {
return
}
//转字符串
//生成字典发往服务器
//这个看具体需求,我就不实现了
}
/// 发送归因token得到数据
/// - Parameters:
/// - Token: 归因Token
/// - completeBlock: 回调
private func sendToken(Token: String, completeBlock: @escaping (_ data: [String: Any]?) -> Void) {
let url = "https://api-adservices.apple.com/api/v1/"
let postData = Token.data(using: .utf8, allowLossyConversion: true)
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "POST"
request.addValue("text/plain", forHTTPHeaderField: "Content-Type")
request.httpBody = postData
let datatask = URLSession.shared.dataTask(with: request as URLRequest) {
data, _, error in
var result: [String: Any]?
guard let _ = error else {
// 请求成功
var resDic: [String: Any]?
do {
resDic = try JSONSerialization.jsonObject(with: data ?? Data(), options: []) as? [String: Any]
} catch {
}
result = resDic
completeBlock(result)
return
}
// 请求失败
print("失败")
let nulldict: [String: Any] = [:]
completeBlock(nulldict)
}
datatask.resume()
}
}