QSWikiHandle.swift 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. //
  2. // QSWikiHandle.swift
  3. // QuickSearchLocation
  4. //
  5. // Created by Destiny on 2025/7/17.
  6. //
  7. import Foundation
  8. import Alamofire
  9. import SwiftyJSON
  10. import AdSupport
  11. class QSWikiHandle {
  12. static let shared = QSWikiHandle()
  13. var hostUrl = "http://asafrontend.mokiwi.com/api"
  14. var orgId = "8842660"
  15. var sign = "b14edba8e6ad47565f3d396e05c6560e&kiwi".md5
  16. var requestId : String = ""
  17. func addAttributionResultReport(completion:@escaping ((Bool) -> ())) {
  18. if self.payDataParameterNotExist() {
  19. completion(false)
  20. return
  21. }
  22. var dict: [String: Any] = [String: Any]()
  23. if let payLoad: [String: Any] = UserDefaults.standard.object(forKey: "QS_ATTRIBUTION_PAYLOAD") as? [String : Any] {
  24. if let campaignId = payLoad["campaignId"] as? Int {
  25. dict["campaign_id"] = campaignId
  26. }
  27. if let adGroupId = payLoad["adGroupId"] as? Int {
  28. dict["ad_group_id"] = adGroupId
  29. }
  30. if let keywordId = payLoad["keywordId"] as? Int {
  31. dict["keyword_id"] = keywordId
  32. }
  33. let date = Date()
  34. let formatter = DateFormatter()
  35. formatter.timeZone = TimeZone.autoupdatingCurrent
  36. formatter.dateFormat = "yyyy-MM-dd"
  37. let todayDate = formatter.string(from: date)
  38. dict["date"] = todayDate
  39. dict["timezone"] = "ORTZ"
  40. }
  41. let urlString = String(format: "%@/asabackendData/add?org_id=%@&sign=%@",hostUrl,orgId,sign)
  42. let headers = ["Content-Type": "application/json"]
  43. // 使用Alamofire发送POST请求
  44. AF.request(urlString, method: .post, parameters: dict, encoding: JSONEncoding.default, headers: HTTPHeaders(headers)).response { response in
  45. switch response.result {
  46. case .success(let value):
  47. let json = try? JSON(data: value ?? Data())
  48. print("QSWikiHandle responseObject: \(String(describing: json))")
  49. if json?["code"] == 10000 {
  50. print("QSWikiHandle asa用户 提交成功")
  51. // 正确提取 request_id(根据实际类型调整)
  52. if let requestIdString = json?["request_id"].string {
  53. self.requestId = requestIdString // 假设 requestId 是 String 类型
  54. print("提取到的 request_id: \(requestIdString)")
  55. } else if let requestIdInt = json?["request_id"].int {
  56. self.requestId = String(requestIdInt) // 如果是 Int 类型,转换为 String
  57. print("提取到的 request_id: \(requestIdInt)")
  58. } else {
  59. print("警告: 无法解析 request_id")
  60. }
  61. completion(true)
  62. } else {
  63. print("QSWikiHandle asa用户 提交失败")
  64. completion(false)
  65. }
  66. case .failure(let error):
  67. print("QSWikiHandle asa用户 error: \(error)")
  68. completion(false)
  69. }
  70. }
  71. }
  72. func addEventResultAttribution(eventDict: [String: Any]) {
  73. print("QSWikiHandle asa用户 参数输入\(eventDict)")
  74. if self.payDataParameterNotExist() {
  75. return
  76. }
  77. var dict: [String: Any] = [String: Any]()
  78. if let payLoad: [String: Any] = UserDefaults.standard.object(forKey:"QS_ATTRIBUTION_PAYLOAD") as? [String : Any] {
  79. if let campaignId = payLoad["campaignId"] as? Int {
  80. dict["campaign_id"] = campaignId
  81. }
  82. if let adGroupId = payLoad["adGroupId"] as? Int {
  83. dict["ad_group_id"] = adGroupId
  84. }
  85. if let keywordId = payLoad["keywordId"] as? Int {
  86. dict["keyword_id"] = keywordId
  87. }
  88. dict["request_id"] = self.requestId
  89. let date = Date()
  90. let formatter = DateFormatter()
  91. formatter.timeZone = TimeZone.autoupdatingCurrent
  92. formatter.dateFormat = "yyyy-MM-dd"
  93. let todayDate = formatter.string(from: date)
  94. dict["date"] = todayDate
  95. dict["timezone"] = "ORTZ"
  96. // 用户已授权
  97. let idfaStr = ASIdentifierManager.shared().advertisingIdentifier.uuidString
  98. if idfaStr.count > 0 {
  99. dict["unique_device"] = idfaStr
  100. } else {
  101. let idfv = UIDevice.current.identifierForVendor?.uuidString
  102. dict["unique_device"] = idfv
  103. }
  104. }
  105. for (key, value) in eventDict {
  106. dict[key] = value
  107. }
  108. let urlString = String(format: "%@/asabackendDataDetail/add?org_id=%@&sign=%@",hostUrl,orgId,sign)
  109. print("usdfStringgsdfs--\(urlString)");
  110. let headers = ["Content-Type": "application/json"]
  111. let parameters = ["backend_data_detail": dict]
  112. // 使用Alamofire发送POST请求
  113. AF.request(urlString, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: HTTPHeaders(headers)).response { response in
  114. switch response.result {
  115. case .success(let value):
  116. let json = try? JSON(data: value ?? Data())
  117. print("QSWikiHandle responseObject: \(String(describing: json))")
  118. if json?["code"] == 10000 {
  119. print("QSWikiHandle asa用户 提交成功")
  120. } else {
  121. print("QSWikiHandle asa用户 提交失败 --- \(parameters)")
  122. }
  123. case .failure(let error):
  124. print("QSWikiHandle asa用户 error: \(error)")
  125. }
  126. }
  127. }
  128. func payDataParameterNotExist() -> Bool {
  129. guard UserDefaults.standard.object(forKey:"QS_ATTRIBUTION_PAYLOAD") is [String: Any] else {
  130. return true
  131. }
  132. return false
  133. }
  134. }