PetChat Source Map
PetChat 功能、SDK、参数下发与埋点总览
以下内容只读取 /Users/xiaomao822/Desktop/git/petchat/PetChat 的代码和文档,并展示在当前官网项目中。
11
功能分支
37
SDK/能力集成
107
埋点事件
28
下发参数
PetChat Branch
dev_1.1.0
Commit
caa8c10
Last PetChat Change
feat:1.1.0功能开发
2026-05-22 16:58:32 +0800
Current layer
PetChat 功能总览
由同步脚本扫描 PetChat/Module 下的业务目录、源码文件和主要类名生成。
来源:PetChat/Module
Current layer
三方 SDK 与触发点
由 Podfile 和源码 import/调用点扫描生成。
来源:Podfile, PetChat/Common, PetChat/Module
Remote Config
参数下发默认值、功能与触发位置
基于 `PCRemoteConfigKeys`、`PCAppRemoteConfig` 和实际业务调用点整理,覆盖 Firebase Remote Config 与友盟 RemoteConfig 的统一读取层。
| 参数 Key | 模块 | 默认值 | 对应功能 | 触发代码位置 | 解析位置 |
|---|---|---|---|---|---|
| Demo_Key | 公共能力 | false / defaultPetTalkTrialConfig.freeTrialCount | Demo Key:用于验证“参数下发 + 解析层”链路是否打通。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:285 |
| pet_magic_free_trial_count | 公共能力 | 1 | Pet Magic:免费试用次数(默认 1)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:373, PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:395 |
| pet_talk_free_trial_count | 公共能力 | false / defaultPetTalkTrialConfig.freeTrialCount | Pet Talk:免费试用配置。 兼容两种下发方式: 1)旧版直接下发整数字符串; 2)1.0.9 起下发 JSON(内含 `free_trial_count` / `emotion_free_trial_count`)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:296 |
| emotion_free_trial_count | 公共能力 | false / defaultPetTalkTrialConfig.freeTrialCount | Pet Talk:情绪翻译免费次数(兼容独立 key 的兜底读取)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:307, PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:326 |
| pet_talk_guide_config | 公共能力 | 0 | Pet Talk:首页引导开关(默认 0)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:344 |
| pet_magic_subscribe_mode | 公共能力 | 0 | Pet Magic:订阅模式(默认 0,可直接下发 0/1,也可下发 1.0.9 打包 JSON)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:360, PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:366 |
| high_quality | 公共能力 | defaultPetMagicConfig.subscribeMode / defaultPetMagicConfig.freeTrialCount | Pet Magic:高清保存次数/开关(1.0.9 业务配置)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:380, PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:402 |
| pet_sounds_free_trial_count | 公共能力 | 5 | Pet Sounds:免费试用次数(默认 5)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:411 |
| pet_sounds_subscribe_mode | 公共能力 | 0 | Pet Sounds:订阅模式(默认 0)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:417 |
| Pet_sounds_rating_guide | 公共能力 | 4 | Pet Sounds:播放完成第几次后触发评分引导(默认 4)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:423 |
| rating_prompt_type | 公共能力 | defaultPetMagicConfig.highQualityCount / 5 | 评分引导样式:`system` 为系统评分弹窗,`custom` 为自定义评分弹窗。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:430 |
| pet_thought_free_trial_count | 公共能力 | 1 | Pet Thoughts:免费试用次数(默认 1)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:442 |
| subscribe_page_type | 公共能力 | 0 | 订阅页类型(默认 0)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:448 |
| Promote_Sub_Group | 公共能力 | 1 / 0 | 买量用户订阅分组配置(JSON 数组字符串)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:472 |
| Organic_Sub_Group | 公共能力 | 0 | 自然用户订阅分组配置(JSON 数组字符串)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:480 |
| Grouping | 公共能力 | 4 / return "system" | 独立 Grouping 分组事件参数。 - Note: 运营配置 value(如 `A`)后,客户端需上报 `Grouping_A`。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:457 |
| Grouping_X | 公共能力 | return "system" / 1 | Grouping 参数兼容命名。 - Note: 部分文档以 `Grouping_X` 描述该参数,这里兼容一次旧命名读取。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:463 |
| boarding_enabled | 公共能力 | true | 引导页总开关:首次启动是否展示 `PCGuideVC`。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:551 |
| boarding_first | 公共能力 | true | 旧版引导页第 1 页是否展示。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:557 |
| boarding_second | 公共能力 | true | 旧版引导页第 2 页是否展示。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:563 |
| boarding_third | 公共能力 | true | 旧版引导页第 3 页是否展示。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:569 |
| boarding_page_show | 启动 | true / defaultIapPopOpenConfig.isEnabled | 1.0.9 新版引导页顺序配置(JSON 数组字符串)。 | PetChat/Module/Launch/PCLaunchVC.swift:430 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:575 |
| Iap_pop_open | 公共能力 | true / defaultIapPopOpenConfig.isEnabled | 强拉支付配置主 key。 兼容两种下发方式: 1)直接下发 `0/1`; 2)下发 JSON(内含 `Iap_pop_open` / `IAP_Pop_Open_Time` / `Force_Offer_ID`)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:605 |
| IAP_Pop_Open | 公共能力 | true / defaultIapPopOpenConfig.isEnabled | 远端配置 IAP_Pop_Open,由 PCRemoteConfigKeys.iapPopOpenUpper 声明。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:606 |
| iap_pop_open | 公共能力 | true / defaultIapPopOpenConfig.isEnabled | 远端配置 iap_pop_open,由 PCRemoteConfigKeys.iapPopOpenLower 声明。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:607 |
| IAP_Pop_Open_Time | 公共能力 | defaultIapPopOpenConfig.isEnabled / defaultIapPopOpenConfig.openTime | 强拉支付时机(兼容独立 key 兜底)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:610 |
| iap_pop_open_time | 公共能力 | defaultIapPopOpenConfig.isEnabled / defaultIapPopOpenConfig.openTime | 远端配置 iap_pop_open_time,由 PCRemoteConfigKeys.iapPopOpenTimeLower 声明。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:611 |
| Force_Offer_ID | 公共能力 | defaultIapPopOpenConfig.isEnabled / defaultIapPopOpenConfig.openTime | 强拉支付商品 ID(兼容独立 key 兜底)。 | 未扫描到业务触发点 | PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:624, PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:639 |
Analytics
埋点触发逻辑与代码位置
基于 `PCReport.report` 扫描和 PetChat 埋点实现清单整理,包含 Thinking/Firebase 与 Adjust 两类上报目标。
| 事件 ID | 模块 | 触发逻辑 | 位置 | 参数 | 目标 |
|---|---|---|---|---|---|
| Restore_Click | 订阅 | purchase(productID: productID, source: vipSource, placement: placement) } /// 恢复购买。 func restoreVIP(placement: String? = nil) { g… | PetChat/Module/VIP/VC/PCVIPBaseVC.swift:358 | - | Thinking/Firebase |
| Restore_Fail | 订阅 | eport.report(withEvent: Event(type: .other, key: PCAdjustEventID.restoreSuccess.rawValue)) PCToastTool.show(PCLocal(str: "vip.res… | PetChat/Module/VIP/VC/PCVIPAViewController.swift:369, PetChat/Module/VIP/VC/PCVIPBViewController.swift:363, PetChat/Module/VIP/VC/PCVIPCustomViewController.swift:506 | - | Thinking/Firebase |
| Restore_Success | 订阅 | geWithFailureToastIfNeeded() { return } PCToastTool.showError(message) } } override func vipDidCompleteRestore(success: Bool, mes… | PetChat/Module/VIP/VC/PCVIPAViewController.swift:364, PetChat/Module/VIP/VC/PCVIPBViewController.swift:358, PetChat/Module/VIP/VC/PCVIPCustomViewController.swift:501 | - | Thinking/Firebase |
| Sub_Agree_Close | 订阅 | ewControlellerDidFinidsh(self, agree: true) } } @objc private func close() { dismissAnimation { [weak self] in guard let `self` =… | PetChat/Module/VIP/VC/PCAgreementPopupViewController.swift:201, PetChat/Module/VIP/VC/PCVIPCustomViewController.swift:391 | - | Thinking/Firebase |
| Sub_Agree_Show | 订阅 | et productID = selectedProductID { reportSubClickForContinueButton(productID: productID) } if let agree = agreementView { if agre… | PetChat/Module/VIP/VC/PCVIPCustomViewController.swift:312, PetChat/Module/VIP/VC/PCVIPCustomViewController.swift:366 | - | Thinking/Firebase |
| Sub_Agree_Success | 订阅 | URL(string: ConstantURL.loadMemberURL())!) } } @objc private func buttonClick() { dismissAnimation { [weak self] in guard let `se… | PetChat/Module/VIP/VC/PCAgreementPopupViewController.swift:192, PetChat/Module/VIP/VC/PCVIPCustomViewController.swift:318, PetChat/Module/VIP/VC/PCVIPCustomViewController.swift:372 | - | Thinking/Firebase |
| Sub_Click | 订阅 | firstOfferID } @objc private func didTapContinue() { guard let productID = selectedProductID else { return } guard beginPurchaseA… | PetChat/Module/VIP/VC/PCVIPAViewController.swift:283, PetChat/Module/VIP/VC/PCVIPBViewController.swift:277, PetChat/Module/VIP/VC/PCVIPBaseVC.swift:867, PetChat/Module/VIP/VC/PCVIPBaseVC.swift:706 | - | Thinking/Firebase + Adjust |
| Sub_Close | 订阅 | uccessfulOrderIDForSubClose ?? "", PCAdjustEventParamKey.xTimes.rawValue: UserDefaults.standard.subShowTimes ] param.merge(paywal… | PetChat/Module/VIP/VC/PCVIPBaseVC.swift:899 | - | Thinking/Firebase |
| Sub_Show | 订阅 | ncy, PCAdjustEventParamKey.price.rawValue: price, PCAdjustEventParamKey.xTimes.rawValue: times ] param.merge(mediaParams) { _, ne… | PetChat/Module/VIP/VC/PCVIPBaseVC.swift:1064, PetChat/Module/VIP/VC/PCVIPBaseVC.swift:272 | - | Thinking/Firebase + Adjust |
| Sub_Success | 订阅 | switch outcome { case .success(let transactionID): if let selectedProductID { reportSubSuccessForPurchase(productID: selectedProd… | PetChat/Module/VIP/VC/PCVIPAViewController.swift:338, PetChat/Module/VIP/VC/PCVIPBViewController.swift:332, PetChat/Module/VIP/VC/PCVIPBaseVC.swift:928, PetChat/Module/VIP/VC/PCVIPCustomViewController.swift:478 | - | Adjust |
| ATT_Reject | 公共能力 | e: .adjust, token: "bn92oo", key: "ATT_Success")) PCReport.report(withEvent: Event(type: .other, key: "ATT_Success")) } else { PC… | PetChat/Common/Tool/PCFileTool.swift:217 | - | Thinking/Firebase |
| ATT_Show | 公共能力 | return } hasRequestedTrackingPermission = true let status = ATTrackingManager.trackingAuthorizationStatus switch status { case .n… | PetChat/Common/Tool/PCFileTool.swift:209 | - | Adjust |
| ATT_Success | 公共能力 | uestTrackingAuthorization { _ in let status = ATTrackingManager.trackingAuthorizationStatus if status == .authorized { PCReport.r… | PetChat/Common/Tool/PCFileTool.swift:214, PetChat/Common/Tool/PCFileTool.swift:215 | - | Adjust |
| custom_Prompt_Finish | 公共能力 | type: .other, key: AnalyticsEvent.submit, param: [ "Source": result.source.rawValue, "Feedback": String(feedback.prefix(256)), "L… | PetChat/Common/Managers/PCFeedbackManager/PCFeedbackManager.swift:142, PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:323 | Source, Feedback, Length | Thinking/Firebase |
| custom_Prompt_Finish | 公共能力 | type: .other, key: AnalyticsEvent.submit, param: [ "Source": result.source.rawValue, "Feedback": String(feedback.prefix(256)), "L… | PetChat/Common/Managers/PCFeedbackManager/PCFeedbackManager.swift:142, PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:323 | Source, Feedback, Length | Thinking/Firebase |
| Feedback_Close | 公共能力 | PCReport.report(withEvent: Event(type: .other, key: AnalyticsEvent.show, param: [ "Source": source.rawValue ])) } func reportFeed… | PetChat/Common/Managers/PCFeedbackManager/PCFeedbackManager.swift:130, PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:307 | Source | Thinking/Firebase |
| Feedback_Show | 公共能力 | feedbackView = nil view.dismiss(animated: animated) { view.removeFromSuperview() completion?() } } func reportFeedbackShow(source… | PetChat/Common/Managers/PCFeedbackManager/PCFeedbackManager.swift:124, PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:297 | Source | Thinking/Firebase |
| Feedback_Submit | 公共能力 | "Source": source.rawValue ])) } func reportFeedbackSubmit(result: PCFeedbackResult) { let feedback = result.content.trimmingChara… | PetChat/Common/Managers/PCFeedbackManager/PCFeedbackManager.swift:137, PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:322 | Source, Feedback, Length | Thinking/Firebase |
| Main_Page_Show | 公共能力 | else { return } appDelegate.window?.backgroundColor = .color_bg appDelegate.window?.rootViewController = PCTabBarController() app… | PetChat/Base/PCRouter.swift:28 | Country | Thinking/Firebase |
| Pet_Magic_Finish_Page_Show | 公共能力 | "" ) { basePayload in var successPayload = basePayload successPayload[PCAdjustEventParamKey.time.rawValue] = elapsedTime Dispatch… | PetChat/Common/Managers/ProgressManager/PCProgressManager.swift:357 | - | Thinking/Firebase |
| Pet_Magic_Load_Again | 公共能力 | ad_Again`。 func reportPetMagicLoadAgainIfNeeded(using template: TemItemInfo?) { guard let template, PCTempManager.consumePetMagic… | PetChat/Common/Managers/PCPhotoPickManager/View/PCPhotoPickerImageView.swift:410, PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:634 | - | Thinking/Firebase |
| Pet_Magic_Load_Fail | 公共能力 | dataModel.dataModel) payload[PCAdjustEventParamKey.time.rawValue] = elapsedTime payload[PCAdjustEventParamKey.reason.rawValue] = … | PetChat/Common/Managers/PCPhotoPickManager/View/PCPhotoPickerImageView.swift:307, PetChat/Common/Managers/ProgressManager/PCProgressManager.swift:336, PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:611 | - | Thinking/Firebase |
| Pet_Magic_Load_Success | 公共能力 | = elapsedTime DispatchQueue.main.async { PCReport.report(withEvent: Event(type: .other, key: PCAdjustEventID.petMagicFinishPageSh… | PetChat/Common/Managers/ProgressManager/PCProgressManager.swift:358 | - | Thinking/Firebase |
| petchat.rating.dismissed.at | 公共能力 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:1 | - | Thinking/Firebase |
| petchat.rating.pet_sounds.completed.count | 公共能力 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:1 | - | Thinking/Firebase |
| petchat.rating.presentation.timestamps | 公共能力 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:1 | - | Thinking/Firebase |
| petchat.rating.translation.guide.shown | 公共能力 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:1 | - | Thinking/Firebase |
| Rating_Guide_Close | 公共能力 | PCReport.report(withEvent: Event(type: .other, key: AnalyticsEvent.show, param: [ "Source": source.rawValue ])) } func reportFeed… | PetChat/Common/Managers/PCFeedbackManager/PCFeedbackManager.swift:130, PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:307 | Source | Thinking/Firebase |
| Rating_Guide_Show | 公共能力 | feedbackView = nil view.dismiss(animated: animated) { view.removeFromSuperview() completion?() } } func reportFeedbackShow(source… | PetChat/Common/Managers/PCFeedbackManager/PCFeedbackManager.swift:124, PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:297 | Source | Thinking/Firebase |
| Rating_Guide_Submit | 公共能力 | "Source": source.rawValue ])) } func reportFeedbackSubmit(result: PCFeedbackResult) { let feedback = result.content.trimmingChara… | PetChat/Common/Managers/PCFeedbackManager/PCFeedbackManager.swift:137, PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:322 | Source, Feedback, Length | Thinking/Firebase |
| Rating_Prompt_Show | 公共能力 | romptType: String) { PCReport.report(withEvent: Event(type: .other, key: AnalyticsEvent.show, param: [ "Source": source.rawValue,… | PetChat/Common/Managers/PCRatingManager/PCRatingManager.swift:301 | Source, Prompt_Type | Thinking/Firebase |
| Adjust_Check_Start | 归因 | Finished: @escaping (PCAttributionInitialWindowResult) -> Void, onResolved: ((PCAttributionResolution) -> Void)? = nil ) { attrib… | PetChat/Common/Managers/AdjustManager/AdjustManager.swift:485 | - | Thinking/Firebase |
| Adjust_Get_Promote | 归因 | passTime: Int? = nil) { guard attribution.isPaidUser else { return } guard !UserDefaults.standard.bool(forKey: StorageKey.promote… | PetChat/Common/Managers/AdjustManager/AdjustManager.swift:1068 | - | Thinking/Firebase |
| Adjust_Get_Promote_Final | 归因 | eFinalReported) else { return } var params = promoteParams(from: attribution) params[PCAdjustEventParamKey.form.rawValue] = final… | PetChat/Common/Managers/AdjustManager/AdjustManager.swift:1094 | - | Thinking/Firebase |
| Adjust_Get_Promote_Server | 归因 | tServerAttribution) { guard attribution.isPaidUser else { return } guard !UserDefaults.standard.bool(forKey: StorageKey.promoteSe… | PetChat/Common/Managers/AdjustManager/AdjustManager.swift:1080 | - | Thinking/Firebase |
| Adjust_Get_Success | 归因 | ers(in: .whitespacesAndNewlines) ?? "" guard network.isEmpty == false else { return } let passTime = currentPromotePassTime() if … | PetChat/Common/Managers/AdjustManager/AdjustManager.swift:1108 | passTime, adNetwork, campaign | Thinking/Firebase |
| Adjust_Init | 归因 | se) } } func registerSDK() { if register { return } register = true configOECallBackParam() Adjust.initSdk(adjustConfig) PCReport… | PetChat/Common/Managers/AdjustManager/AdjustManager.swift:448 | - | Thinking/Firebase |
| ad_network | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| adgroup_name | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| audio_name | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| audio_type | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| campaign | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| campaign_name | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Country | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| creative_name | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Currency | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| device_type | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Form | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| IAP | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| ID | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Name | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| network_name | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| order_id | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| page_name1 | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| pass_time | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Pet_Num | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| pet_type | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Price | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Reason | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Resource_Cover_URL | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| resource_id | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Resource_Name | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Resource_URL | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| sounds_name | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Sub_Agree_Rejct | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| sub_page | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Time | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Type | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| video_number | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| video_time | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| voice_personality | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| X_Times | 埋点 | 已定义,未扫描到触发调用。 | PetChat/Common/Managers/EventManager/PCAdjustEvents.swift:1 | - | Thinking/Firebase |
| Loading_Show | 启动 | ceed() } } } } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) hasLaunchViewAppeared = true PCRepor… | PetChat/Module/Launch/PCLaunchVC.swift:347 | - | Thinking/Firebase |
| User_Page_Reject | 启动 | ) guard delegate == nil else { return } transitionToMainInterface() } @objc private func handleUnAgree() { makeToast(PCLocal(str:… | PetChat/Module/Launch/PCAgreementVC.swift:178, PetChat/Module/Launch/PCAgreementVC.swift:179 | - | Thinking/Firebase |
| User_Page_Show | 启动 | super.viewDidLoad() createUI() // Do any additional setup after loading the view. } override func viewDidAppear(_ animated: Bool)… | PetChat/Module/Launch/PCAgreementVC.swift:30 | - | Thinking/Firebase |
| User_Page_Success | 启动 | ri(with: ConstantURL.loadServerURL()) } } @objc private func handleAgree() { PCOnboardingManager.hasAcceptedAgreement = true dele… | PetChat/Module/Launch/PCAgreementVC.swift:171 | - | Thinking/Firebase |
| Click_Bottom_Button | 主导航 | byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 20, height: 20) ).cgPath } func handleTabDidSwitch(from oldI… | PetChat/Module/MainTab/PCTabBarController.swift:186 | type | Thinking/Firebase |
| Page_Show | 主导航 | meter index: 当前展示 tab 的索引。 private func reportPageShow(for index: Int) { guard let pageName = pageShowName(for: index) else { ret… | PetChat/Module/MainTab/PCTabBarController.swift:237 | pageName, time | Thinking/Firebase |
| Onboard_Click | Onboarding | /// 上报引导页继续按钮点击埋点。 /// /// - Parameter index: 当前点击时所在页索引(0-based)。 private func reportOnboardClick(for index: Int) { guard let pa… | PetChat/Module/Guide/PCGuideVC.swift:251 | pageName | Thinking/Firebase |
| Onboard_Show | Onboarding | } /// 上报引导页子页展示埋点。 /// /// - Parameter index: 当前展示页索引(0-based)。 private func reportOnboardShow(for index: Int) { guard let page =… | PetChat/Module/Guide/PCGuideVC.swift:241 | pageName | Thinking/Firebase |
| onboarding_next_click | Onboarding | dTapStartButton), for: .touchUpInside) } /// 点击“开始魔法时刻” @objc private func didTapStartButton() { guard let selectedType else { re… | PetChat/Module/Guide/PCSelectPetVC.swift:275 | petType | Thinking/Firebase |
| Add_Pets_Click | Pet Hub | ottom.equalToSuperview() } } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @objc private… | PetChat/Module/PetHub/View/HubAddPetSection.swift:382 | - | Thinking/Firebase |
| Add_Pets_Success | Pet Hub | PCToastTool.show(PCLocal(str: "common.success"),duration: 1) { _ in PCDBManager.shared.getPetDataList { [weak self] records, _ in… | PetChat/Module/PetHub/PCPetHubAddPetVC.swift:224 | Pet_Num | Thinking/Firebase |
| Pet_Magic_Click_Create | Pet Magic | petMagicNavigationController?.popToRootViewController(animated: true) } /// “开始创作”按钮事件,发起任务。 @objc private func handleMakeButtonT… | PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:552 | resource_id, Resource_Name, Resource_Cover_URL, Resource_URL | Thinking/Firebase |
| Pet_Magic_Create_Click | Pet Magic | URL":self.dataModel.cover ?? "","Resource_URL":self.dataModel.url ?? ""])) } } } } func eventClickActive() { reportPetMagicLoadAg… | PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:499 | resource_id, Resource_Name, Resource_Cover_URL, Resource_URL | Thinking/Firebase |
| Pet_Magic_Detail_Page_Show | Pet Magic | ems.safeObject(at: indexPath.item) else { return } let detailVC = PCPetMagicDetailVC() detailVC.dataModel = data detailVC.dataArr… | PetChat/Module/PetMagic/PCPetMagicVC.swift:430, PetChat/Module/PetMagicNew/vc/PCPetMagicNewListVC.swift:824 | resource_id, Resource_Name, Resource_Cover_URL, Resource_URL | Thinking/Firebase |
| Pet_Magic_Enter_Album_Page | Pet Magic | nCreateTaskSuccess = { [weak self] in self?.returnToPetMagicHomeAfterTaskCreated() } self.present(pickerVC, animated: true) PCRep… | PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:491 | resource_id, Resource_Name, Resource_Cover_URL, Resource_URL | Thinking/Firebase |
| Pet_Magic_Select_Saved_Photo | Pet Magic | tedPet = item } addPhotoView.onSelectionChanged = { [weak self] hasSelection in self?.updateMakeButtonState(isEnabled: hasSelecti… | PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:387 | resource_id, Resource_Name, Resource_Cover_URL, Resource_URL | Thinking/Firebase |
| Pet_Magic_Start_Load | Pet Magic | CreateClick.rawValue,param: ["resource_id":self.dataModel.id ?? "","Resource_Name":self.dataModel.name ?? "","Resource_Cover_URL"… | PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:500 | resource_id, Resource_Name, Resource_Cover_URL, Resource_URL | Thinking/Firebase |
| pet_audio_click | Pet Sounds | cell.maskHidden = !shouldShowVipMask(for: visibleItem) } } /// 上报语音包点击埋点。 /// /// - Parameter item: 当前点击的语音包。 private func report… | PetChat/Module/PetSounds/PCPetSoundsVC.swift:567 | audioType, petType, voicePersonality, audioName | Thinking/Firebase |
| Pet_Sounds_Click | Pet Sounds | 音频成功开始播放后,再消耗一次免费次数,避免点击失败也扣次。 PCPetSoundsFreePlayManager.shared.consumeOnceAfterPlaySuccessIfNeeded() refreshVisibleVipMaskState… | PetChat/Module/PetSounds/PCPetSoundsVC.swift:528 | Type, name | Thinking/Firebase |
| Analyzing_Sound_Fail | Pet Talk | w.state = .failed(message) analyzingView.isHidden = false var failParam: [String: Any] = ["Reason": message] failParam.merge(vipS… | PetChat/Module/PetTalk/PCVoiceRecordVC.swift:323 | - | Thinking/Firebase |
| Analyzing_Sound_Success | Pet Talk | ParamKey.type.rawValue: recordType(for: changeType), PCAdjustEventParamKey.time.rawValue: elapsed, ] successParam.merge(vipStateA… | PetChat/Module/PetTalk/PCVoiceRecordVC.swift:142 | - | Thinking/Firebase |
| Stop_Recording | Pet Talk | ring?) { recordType = type } @objc private func cancelTapped() { onCancel?() } @objc private func stopTapped() { if let recordTyp… | PetChat/Module/PetTalk/View/PCPetTalkRecordingOverlayView.swift:322, PetChat/Module/PetTalk/View/PCPetTalkRecordingOverlayView.swift:326 | type | Thinking/Firebase |
| Talk_Guide_Finish | Pet Talk | guard petVoiceCard.bounds.width > 0, petVoiceCard.bounds.height > 0 else { return false } return true } /// 完成首页引导后,记录本地状态并恢复顶部视频… | PetChat/Module/PetTalk/PCPetTalkNewVC.swift:417 | - | Thinking/Firebase |
| Talk_Guide_Show | Pet Talk | shouldRetryTalkGuidePresentation = false attachGuideOverlayIfNeeded() guideContainerView().layoutIfNeeded() introVideoPlayerView.… | PetChat/Module/PetTalk/PCPetTalkNewVC.swift:366 | - | Thinking/Firebase |
| Tap_to_Record | Pet Talk | nToDog case (.dog, .pet): changeType = .dogToHuman } let title = kind == .human ? PCLocal(str: "petTalk.humanVoice") : PCLocal(st… | PetChat/Module/PetTalk/PCPetTalkNewVC.swift:924 | type | Thinking/Firebase |
| Translation_Result_Page_Show | Pet Talk | ultPageParam: [String: Any] = [ PCAdjustEventParamKey.type.rawValue: recordType(for: changeType) ] resultPageParam.merge(vipState… | PetChat/Module/PetTalk/PCVoiceRecordVC.swift:258 | - | Thinking/Firebase |
| Album_Page_Next_Click | Pet Thoughts | .fullScreen self.present(pickerVC, animated: true) { viewModel.backAction = { [weak self, weak pickerVC] in guard let self else {… | PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:487 | - | Thinking/Firebase |
| pet_thought_entrance_click | Pet Thoughts | } /// 统一处理导航栏右侧按钮点击:空态展示引导,有会话时进入编辑。 @objc private func handleRightButtonTapped() { switch rightButtonMode { case .guide: /// 埋点:… | PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:297 | - | Thinking/Firebase |
| Pet_Thoughts_Enter_Album_Page | Pet Thoughts | 视频;在选择达到上限时给出专属提示文案。 viewModel.onSelectionLimitReached = { [weak pickerVC] in pickerVC?.view.makeToastText(PCLocal(str: "petThoug… | PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:476 | - | Thinking/Firebase |
| Pet_Thoughts_Load_Again | Pet Thoughts | n } guard let model = self.makeSelectModel(from: targetMessage) else { PCToastTool.showError(PCLocal(str: "error.request.failure"… | PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:1581 | - | Thinking/Firebase |
| Pet_Thoughts_Load_Fail | Pet Thoughts | (.requestFailure), tempURL: url, startTime: startTime, loadingMessageID: loadingMessage.id, humanMessageID: humanMessage.id) } ca… | PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:560, PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:619, PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:911 | Reason | Thinking/Firebase |
| Pet_Thoughts_Load_Success | Pet Thoughts | analysisBasisItems: response.analysisBasis, isAnalysisBasisExpanded: false )) } PCReport.report(withEvent: Event( type: .other, k… | PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:899 | Time | Thinking/Firebase |
| Pet_Thoughts_Start_Load | Pet Thoughts | erFullScreen preview.modalTransitionStyle = .crossDissolve present(preview, animated: true) } private func uploadThought(for mode… | PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:521 | - | Thinking/Firebase |
| Pet_Thoughts_Upload_Photo_Click | Pet Thoughts | all(entryContext: PCVIPSubShowEntryContext( iapEntry: "Feature_Pet_Thoughts", resourceId: "", soundsName: "" )) return } PCReport… | PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:465 | - | Thinking/Firebase |
| Thought_Detail_Click | Pet Thoughts | = globalIndexForVisibleRow(indexPath.row) guard allMessages.indices.contains(globalIndex) else { return } guard shouldShowAnalysi… | PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:1110 | - | Thinking/Firebase |