// // AsaManager.swift // Runner // // Created by Destiny on 2025/6/18. // import Foundation import SwiftyJSON import Alamofire class AsaManager { static let shared = AsaManager() var hostUrl = "http://asafrontend.mokiwi.com/api" var orgId = "8941670" var sign = "c50d251bcb2eec9345844df434e3a09d&kiwi".md5 func addAttributionReport(completion:@escaping ((Bool) -> ())) { if self.payDataNotExist() { completion(false) return } var dict: [String: Any] = [String: Any]() if let payLoad: [String: Any] = UserDefaults.standard.object(forKey: "ASA_ATTRIBUTION_PAYLOAD") as? [String : Any] { if let campaignId = payLoad["campaignId"] as? Int { dict["campaign_id"] = campaignId } if let adGroupId = payLoad["adGroupId"] as? Int { dict["ad_group_id"] = adGroupId } if let keywordId = payLoad["keywordId"] as? Int { dict["keyword_id"] = keywordId } let formatter = DateFormatter() formatter.timeZone = TimeZone.autoupdatingCurrent formatter.dateFormat = "yyyy-MM-dd" let todayDate = formatter.string(from: Date()) dict["date"] = todayDate dict["timezone"] = "ORTZ" } let urlString = String(format: "%@/asabackendData/add?org_id=%@&sign=%@", hostUrl, orgId, sign ) let headers = ["Content-Type": "application/json"] // 使用Alamofire发送POST请求 AF.request(urlString, method: .post, parameters: dict, encoding: JSONEncoding.default, headers: HTTPHeaders(headers)).response { response in switch response.result { case .success(let value): let json = try? JSON(data: value ?? Data()) print("AppSaManager responseObject: \(String(describing: json))") if json?["code"] == 10000 { print("AppSaManager asa用户 提交成功") completion(true) } else { print("AppSaManager asa用户 提交失败") completion(false) } case .failure(let error): print("AppSaManager asa用户 error: \(error)") completion(false) } } } func addEventAttribution(eventDict: [String: Any]) { if self.payDataNotExist() { return } var dict: [String: Any] = [String: Any]() if let payLoad: [String: Any] = UserDefaults.standard.object(forKey: "ASA_ATTRIBUTION_PAYLOAD") as? [String : Any] { if let campaignId = payLoad["campaignId"] as? Int { dict["campaign_id"] = campaignId } if let adGroupId = payLoad["adGroupId"] as? Int { dict["ad_group_id"] = adGroupId } if let keywordId = payLoad["keywordId"] as? Int { dict["keyword_id"] = keywordId } let formatter = DateFormatter() formatter.timeZone = TimeZone.autoupdatingCurrent formatter.dateFormat = "yyyy-MM-dd" let todayDate = formatter.string(from: Date()) dict["date"] = todayDate dict["timezone"] = "ORTZ" if let idfa = KeyboardSharedDataManager.shared.getInitIDFA() { dict["unique_device"] = idfa } else { dict["unique_device"] = KeyboardSharedDataManager.shared.getInitIDFV() } } for (key, value) in eventDict { dict[key] = value } let urlString = String(format: "%@/asabackendDataDetail/add?org_id=%@&sign=%@", hostUrl, orgId, sign ) let headers = ["Content-Type": "application/json"] let parameters = ["backend_data_detail": dict] // 使用Alamofire发送POST请求 AF.request(urlString, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: HTTPHeaders(headers)).response { response in switch response.result { case .success(let value): let json = try? JSON(data: value ?? Data()) print("AppSaManager responseObject: \(String(describing: json))") if json?["code"] == 10000 { print("AppSaManager asa用户 提交成功") } else { print("AppSaManager asa用户 提交失败") } case .failure(let error): print("AppSaManager asa用户 error: \(error)") } } } func payDataNotExist() -> Bool { guard UserDefaults.standard.object(forKey: "ASA_ATTRIBUTION_PAYLOAD") is [String: Any] else { return true } return false } }