LNStatisticManager.swift 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. //
  2. // LNStatisticManager.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/1/27.
  6. //
  7. import Foundation
  8. import AdjustSdk
  9. private enum LNStatisticEventToken: String {
  10. case call_accept = "5xzpm9"
  11. case call_end = "dr9456"
  12. case call_start = "y39skp"
  13. case first_payment = "8p9mbg"
  14. case register = "4vtp6f"
  15. case start_chat = "mhhvkj"
  16. case view_playmate = "hivhhh"
  17. case view_profile = "zfdf34"
  18. case view_session = "z9bxom"
  19. case coin_payment_page_view = "kyb5bm"
  20. case coin_payment_page_click = "vbkt69"
  21. case diamond_payment_page_view = "qlu402"
  22. case diamond_payment_page_click = "xa6ysh"
  23. }
  24. class LNStatisticManager {
  25. static let shared = LNStatisticManager()
  26. private init() { }
  27. func reportExposure(uids: [String], queue: DispatchQueue = .main, handler: @escaping (Bool) -> Void) {
  28. LNHttpManager.shared.reportExposure(uids: uids) { err in
  29. queue.asyncIfNotGlobal {
  30. handler(err == nil)
  31. }
  32. }
  33. }
  34. func reportVisitor(uid: String, queue: DispatchQueue = .main, handler: @escaping (Bool) -> Void) {
  35. LNHttpManager.shared.reportVisitor(uid: uid) { err in
  36. queue.asyncIfNotGlobal {
  37. handler(err == nil)
  38. }
  39. }
  40. }
  41. }
  42. // MARK: 视图埋点
  43. extension LNStatisticManager {
  44. func reportViewPlaymate(uid: String) {
  45. trackEvent(.view_playmate) { event in
  46. event.addCallbackParameter("user_id", value: uid)
  47. }
  48. }
  49. func reportViewProfile(uid: String) {
  50. trackEvent(.view_profile) { event in
  51. event.addCallbackParameter("user_id", value: uid)
  52. }
  53. }
  54. func reportViewChat(uid: String) {
  55. trackEvent(.view_session) { event in
  56. event.addCallbackParameter("user_id", value: uid)
  57. }
  58. }
  59. func reportViewCoinPay() {
  60. trackEvent(.coin_payment_page_view) { event in
  61. event.addCallbackParameter("user_id", value: myUid)
  62. }
  63. }
  64. func reportViewDiamondPay() {
  65. trackEvent(.diamond_payment_page_view) { event in
  66. event.addCallbackParameter("user_id", value: myUid)
  67. }
  68. }
  69. }
  70. // MARK: 点击埋点
  71. extension LNStatisticManager {
  72. func reportClickChat(uid: String) {
  73. trackEvent(.start_chat) { event in
  74. event.addCallbackParameter("user_id", value: uid)
  75. }
  76. }
  77. func reportClickCoinPay() {
  78. trackEvent(.coin_payment_page_click) { event in
  79. event.addCallbackParameter("user_id", value: myUid)
  80. }
  81. }
  82. func reportClickDiamondPay() {
  83. trackEvent(.diamond_payment_page_click) { event in
  84. event.addCallbackParameter("user_id", value: myUid)
  85. }
  86. }
  87. }
  88. // MARK: 通话埋点
  89. extension LNStatisticManager {
  90. func reportStartCall(uid: String, success: Bool) {
  91. trackEvent(.call_start) { event in
  92. event.addCallbackParameter("user_id", value: uid)
  93. event.addCallbackParameter("result", value: success ? "1" : "0")
  94. }
  95. }
  96. func reportAcceptCall(uid: String, success: Bool) {
  97. trackEvent(.call_accept) { event in
  98. event.addCallbackParameter("user_id", value: uid)
  99. event.addCallbackParameter("result", value: success ? "1" : "0")
  100. }
  101. }
  102. func reportEndCall(uid: String, duration: Float) {
  103. trackEvent(.call_end) { event in
  104. event.addCallbackParameter("user_id", value: uid)
  105. event.addCallbackParameter("duration", value: "\(duration)")
  106. }
  107. }
  108. }
  109. // MARK: 登录埋点
  110. enum LNRegisterMethod: String {
  111. case email
  112. case phone
  113. case google
  114. case apple
  115. }
  116. extension LNStatisticManager {
  117. func reportRegister(method: LNRegisterMethod) {
  118. trackEvent(.register) { event in
  119. event.addCallbackParameter("user_id", value: myUid)
  120. event.addCallbackParameter("register_method", value: method.rawValue)
  121. event.addCallbackParameter("register_ts", value: "\(Int(curTime))")
  122. }
  123. }
  124. func reportPayment(type: LNCurrencyType, amount: Double, currency: String, price: Double, orderId: String) {
  125. trackEvent(.first_payment) { event in
  126. event.addCallbackParameter("order_id", value: orderId)
  127. event.addCallbackParameter("payment_type", value: "\(type.rawValue)")
  128. event.addCallbackParameter("payment_amount", value: "\(amount)")
  129. event.addCallbackParameter("payment_currency", value: currency)
  130. event.addCallbackParameter("payment_price", value: "\(price)")
  131. event.setRevenue(price, currency: currency)
  132. }
  133. }
  134. }
  135. extension LNStatisticManager {
  136. private func trackEvent(_ token: LNStatisticEventToken, configure: (ADJEvent) -> Void) {
  137. guard let event = eventFor(token) else { return }
  138. configure(event)
  139. Adjust.trackEvent(event)
  140. }
  141. private func eventFor(_ token: LNStatisticEventToken) -> ADJEvent? {
  142. let event = ADJEvent(eventToken: token.rawValue)
  143. event?.addCallbackParameter("platform", value: "iOS")
  144. event?.addCallbackParameter("app", value: "gami")
  145. event?.addCallbackParameter("app_channel", value: "apple")
  146. event?.addCallbackParameter("version_code", value: curBuildVersion)
  147. event?.addCallbackParameter("version_name", value: curAppVersion)
  148. event?.addCallbackParameter("uid", value: myUid)
  149. event?.addCallbackParameter("device_id", value: curDeviceId)
  150. event?.addCallbackParameter("country_code", value: LNAppConfig.shared.countryCode)
  151. event?.addCallbackParameter("language_code", value: LNAppConfig.shared.curLang.languageCode)
  152. event?.addCallbackParameter("device_name", value: curDeviceModelName)
  153. event?.addCallbackParameter("os_version", value: curSystemVersion)
  154. event?.addCallbackParameter("network_type", value: LNNetworkMonitor.curNetworkType.desc)
  155. event?.addCallbackParameter("network_operator", value: LNNetworkMonitor.networkProvider)
  156. event?.addCallbackParameter("network_available", value: LNNetworkMonitor.curState == .available ? "true" : "false")
  157. event?.addCallbackParameter("background", value: LNAppConfig.shared.isForeground ? "false" : "true")
  158. return event
  159. }
  160. }