QSWikiHandle.swift 6.3 KB

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