KMAnalytics+KMExtensions.swift 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. //
  2. // KMAnalytics+KMExtensions.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by User-Tangchao on 2024/9/6.
  6. //
  7. import Foundation
  8. // 数据埋点 Category 参数
  9. extension KMAnalytics.Parameter.Category {
  10. public static let purchase_Tools = "Purchase_Tools"
  11. public static let purchase_PageEdit = "Purchase_PageEdit"
  12. public static let purchase_Editor = "Purchase_Editor"
  13. public static let purchase_Converter = "Purchase_Converter"
  14. public static let purchase_Form = "Purchase_Form"
  15. public static let purchase_Sign = "Purchase_Sign"
  16. public static let purchase_EditPDF = "Purchase_EditPDF"
  17. public static let purchase_Redact = "Purchase_Redact"
  18. public static let purchase_OCR = "Purchase_OCR"
  19. public static let purchase_PageDisplay = "Purchase_PageDisplay"
  20. public static let purchase_Others = "Purchase_Others"
  21. }
  22. @objc extension NSViewController {
  23. private static var _eventNameKey = "KMEventNameKey"
  24. var kEventName: String? {
  25. get {
  26. return objc_getAssociatedObject(self, &Self._eventNameKey) as? String
  27. }
  28. set {
  29. objc_setAssociatedObject(self, &Self._eventNameKey, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
  30. }
  31. }
  32. private static var _eventParamsKey = "KMEventParamsKey"
  33. var kEventParams: [String : Any]? {
  34. get {
  35. return objc_getAssociatedObject(self, &Self._eventParamsKey) as? [String : Any]
  36. }
  37. set {
  38. objc_setAssociatedObject(self, &Self._eventParamsKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  39. }
  40. }
  41. @objc func trackEvent_buyNow_tool(type: CAnnotationType, index: Int) {
  42. KMAnalytics._trackEvent_buyNow_tool(type: type, index: index, appTarget: .all)
  43. }
  44. // MARK: - Track Events Basic
  45. @objc func trackEvent(eventName eveN: String, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  46. KMAnalytics.trackEvent(eventName: eveN, parameters: params, platform: platform, appTarget: .all)
  47. }
  48. @objc func trackEvent_dmg(eventName eveN: String, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  49. KMAnalytics.trackEvent(eventName: eveN, parameters: params, platform: platform, appTarget: .dmg)
  50. }
  51. @objc func trackEvent_free(eventName eveN: String, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  52. KMAnalytics.trackEvent(eventName: eveN, parameters: params, platform: platform, appTarget: .free)
  53. }
  54. @objc func trackEvent_pro(eventName eveN: String, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  55. KMAnalytics.trackEvent(eventName: eveN, parameters: params, platform: platform, appTarget: .pro)
  56. }
  57. @objc func trackEvent_appstore(eventName eveN: String, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  58. KMAnalytics.trackEvent(eventName: eveN, parameters: params, platform: platform, appTarget: [.free, .pro])
  59. }
  60. }
  61. @objc extension NSWindowController {
  62. private static var _eventNameKey = "KMEventNameKey"
  63. var kEventName: String? {
  64. get {
  65. return objc_getAssociatedObject(self, &Self._eventNameKey) as? String
  66. }
  67. set {
  68. objc_setAssociatedObject(self, &Self._eventNameKey, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
  69. }
  70. }
  71. private static var _eventParamsKey = "KMEventParamsKey"
  72. var kEventParams: [String : Any]? {
  73. get {
  74. return objc_getAssociatedObject(self, &Self._eventParamsKey) as? [String : Any]
  75. }
  76. set {
  77. objc_setAssociatedObject(self, &Self._eventParamsKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  78. }
  79. }
  80. // MARK: - Track Events Basic
  81. @objc func trackEvent(eventName eveN: String?, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  82. if let data = eveN {
  83. KMAnalytics.trackEvent(eventName: data, parameters: params, platform: platform, appTarget: .all)
  84. }
  85. }
  86. @objc func trackEvent_dmg(eventName eveN: String?, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  87. if let data = eveN {
  88. KMAnalytics.trackEvent(eventName: data, parameters: params, platform: platform, appTarget: .dmg)
  89. }
  90. }
  91. @objc func trackEvent_free(eventName eveN: String?, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  92. if let data = eveN {
  93. KMAnalytics.trackEvent(eventName: data, parameters: params, platform: platform, appTarget: .free)
  94. }
  95. }
  96. @objc func trackEvent_pro(eventName eveN: String?, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  97. if let data = eveN {
  98. KMAnalytics.trackEvent(eventName: data, parameters: params, platform: platform, appTarget: .pro)
  99. }
  100. }
  101. @objc func trackEvent_appstore(eventName eveN: String?, params: [String : Any]?, platform: KMAnalyticsPlatform) {
  102. if let data = eveN {
  103. KMAnalytics.trackEvent(eventName: data, parameters: params, platform: platform, appTarget: [.free, .pro])
  104. }
  105. }
  106. }
  107. // MARK: - KMAnalytics Private Methods
  108. extension KMAnalytics {
  109. fileprivate static func _trackEvent_buyNow_tool(type: CAnnotationType, index: Int, platform: KMAnalyticsPlatform = .firebase, appTarget: AppTarget = [.free]) {
  110. if let eventName = KMBuyNowEventNameFromCAnnotationType(type, index: index) {
  111. let params: [String : Any]? = [KMAnalytics.Parameter.categoryKey : "Purchase_Tools", KMAnalytics.Parameter.labelKey : "SubTbr_Tools"]
  112. KMAnalytics.trackEvent(eventName: eventName, parameters: params, platform: platform, appTarget: appTarget)
  113. }
  114. }
  115. }
  116. // MARK: - Pulick Methods
  117. public func KMBuyNowEventNameFromCAnnotationType(_ type: CAnnotationType, index: Int) -> String? {
  118. if type == .link {
  119. if index == 2 {
  120. return "Reading_WebsiteLink_BuyNow"
  121. } else if index == 3 {
  122. return "Reading_EmailLink_BuyNow"
  123. }
  124. } else if type == .stamp {
  125. if index == 2 {
  126. return "Reading_DynamicStamp_BuyNow"
  127. } else if index == 3 {
  128. return "Reading_CustomStamp_BuyNow"
  129. }
  130. } else if type == .signature {
  131. return "Reading_Signature_BuyNow"
  132. }
  133. return nil
  134. }