KMAnalytics+KMExtensions.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. // 数据埋点 Label 参数
  23. //extension KMAnalytics.Parameter.Label {
  24. // public static let tbr_Btn = "Tbr_Btn"
  25. //}
  26. @objc extension NSViewController {
  27. private static var _eventNameKey = "KMEventNameKey"
  28. var kEventName: String? {
  29. get {
  30. return objc_getAssociatedObject(self, &Self._eventNameKey) as? String
  31. }
  32. set {
  33. objc_setAssociatedObject(self, &Self._eventNameKey, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
  34. }
  35. }
  36. private static var _eventParamsKey = "KMEventParamsKey"
  37. var kEventParams: [String : Any]? {
  38. get {
  39. return objc_getAssociatedObject(self, &Self._eventParamsKey) as? [String : Any]
  40. }
  41. set {
  42. objc_setAssociatedObject(self, &Self._eventParamsKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  43. }
  44. }
  45. @objc func trackEvent_buyNow_tool(type: CAnnotationType, index: Int) {
  46. KMAnalytics._trackEvent_buyNow_tool(type: type, index: index, appTarget: .all)
  47. }
  48. }
  49. @objc extension NSWindowController {
  50. private static var _eventNameKey = "KMEventNameKey"
  51. var kEventName: String? {
  52. get {
  53. return objc_getAssociatedObject(self, &Self._eventNameKey) as? String
  54. }
  55. set {
  56. objc_setAssociatedObject(self, &Self._eventNameKey, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
  57. }
  58. }
  59. private static var _eventParamsKey = "KMEventParamsKey"
  60. var kEventParams: [String : Any]? {
  61. get {
  62. return objc_getAssociatedObject(self, &Self._eventParamsKey) as? [String : Any]
  63. }
  64. set {
  65. objc_setAssociatedObject(self, &Self._eventParamsKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  66. }
  67. }
  68. func saveEventName(_ eventN: String?) {
  69. self.kEventName = eventN
  70. self.kEventParams = KMGetBuyNowEventParams(for: eventN)
  71. }
  72. @objc func trackEvent_buyNow_click(eventName eveN: String, params: [String : Any]?) {
  73. KMAnalytics.trackEvent(eventName: eveN, parameters: params, platform: .firebase, appTarget: .dmg)
  74. }
  75. @objc func trackEvent() {
  76. if let e = self.kEventName {
  77. KMAnalytics.trackEvent(eventName: e, parameters: self.kEventParams, platform: .firebase, appTarget: .all)
  78. }
  79. }
  80. @objc func trackEvent_dmg() {
  81. if let e = self.kEventName {
  82. KMAnalytics.trackEvent(eventName: e, parameters: self.kEventParams, platform: .firebase, appTarget: .dmg)
  83. }
  84. }
  85. @objc func trackEvent_appStore() {
  86. if let e = self.kEventName {
  87. KMAnalytics.trackEvent(eventName: e, parameters: self.kEventParams, platform: .firebase, appTarget: [.free, .pro])
  88. }
  89. }
  90. }
  91. // MARK: - KMAnalytics Private Methods
  92. extension KMAnalytics {
  93. fileprivate static func _trackEvent_buyNow_tool(type: CAnnotationType, index: Int, platform: KMAnalyticsPlatform = .firebase, appTarget: AppTarget = [.free]) {
  94. if let eventName = KMBuyNowEventNameFromCAnnotationType(type, index: index) {
  95. let params: [String : Any]? = [KMAnalytics.Parameter.categoryKey : "Purchase_Tools", KMAnalytics.Parameter.labelKey : "SubTbr_Tools"]
  96. KMAnalytics.trackEvent(eventName: eventName, parameters: params, platform: platform, appTarget: appTarget)
  97. }
  98. }
  99. }
  100. // MARK: - Pulick Methods
  101. public func KMBuyNowEventNameFromCAnnotationType(_ type: CAnnotationType, index: Int) -> String? {
  102. if type == .link {
  103. if index == 2 {
  104. return "Reading_WebsiteLink_BuyNow"
  105. } else if index == 3 {
  106. return "Reading_EmailLink_BuyNow"
  107. }
  108. } else if type == .stamp {
  109. if index == 2 {
  110. return "Reading_DynamicStamp_BuyNow"
  111. } else if index == 3 {
  112. return "Reading_CustomStamp_BuyNow"
  113. }
  114. } else if type == .signature {
  115. return "Reading_Signature_BuyNow"
  116. }
  117. return nil
  118. }
  119. public func KMGetBuyNowEventParams(for eventN: String?) -> [String : Any]? {
  120. guard let eveN = eventN else {
  121. return nil
  122. }
  123. if eveN == "Reading_WebsiteLink_BuyNow" || eveN == "Reading_EmailLink_BuyNow" ||
  124. eveN == "Reading_DynamicStamp_BuyNow" || eveN == "Reading_CustomStamp_BuyNow" ||
  125. eveN == "Reading_Signature_BuyNow" || eveN == "Reading_Table_BuyNow" {
  126. return ["Purchase_Tools" : "SubTbr_Tools"]
  127. } else if eveN == "Reading_InsertBlankPage_BuyNow" || eveN == "Reading_InsertPDF_BuyNow" ||
  128. eveN == "Reading_InsertSacnner_BuyNow" || eveN == "Reading_InsertImage_BuyNow" || eveN == "Reading_InsertClipboard_BuyNow" ||
  129. eveN == "Reading_Replace_BuyNow" || eveN == "Reading_Extract_BuyNow" || eveN == "Reading_Split_BuyNow" ||
  130. eveN == "Reading_Rotate_BuyNow" || eveN == "Reading_Reverse_BuyNow" || eveN == "Reading_Copy_BuyNow" ||
  131. eveN == "Reading_Delete_BuyNow" || eveN == "Reading_Merge_BuyNow" {
  132. return ["Purchase_PageEdit" : "SubTbr_PageEdit"]
  133. } else if eveN == "Onbrd_EditPage_BuyNow" || eveN == "Onbrd_Merge_BuyNow" {
  134. return ["Purchase_PageEdit" : "Home_PageEdit"]
  135. }
  136. return nil
  137. }