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 功能总览

11 个下层节点

由同步脚本扫描 PetChat/Module 下的业务目录、源码文件和主要类名生成。

来源:PetChat/Module

Current layer

三方 SDK 与触发点

6 个下层节点

由 Podfile 和源码 import/调用点扫描生成。

来源:Podfile, PetChat/Common, PetChat/Module

Remote Config

参数下发默认值、功能与触发位置

基于 `PCRemoteConfigKeys`、`PCAppRemoteConfig` 和实际业务调用点整理,覆盖 Firebase Remote Config 与友盟 RemoteConfig 的统一读取层。

参数 Key模块默认值对应功能触发代码位置解析位置
Demo_Key公共能力false / defaultPetTalkTrialConfig.freeTrialCountDemo Key:用于验证“参数下发 + 解析层”链路是否打通。未扫描到业务触发点PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:285
pet_magic_free_trial_count公共能力1Pet Magic:免费试用次数(默认 1)。未扫描到业务触发点PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:373, PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:395
pet_talk_free_trial_count公共能力false / defaultPetTalkTrialConfig.freeTrialCountPet 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.freeTrialCountPet Talk:情绪翻译免费次数(兼容独立 key 的兜底读取)。未扫描到业务触发点PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:307, PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:326
pet_talk_guide_config公共能力0Pet Talk:首页引导开关(默认 0)。未扫描到业务触发点PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:344
pet_magic_subscribe_mode公共能力0Pet 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.freeTrialCountPet Magic:高清保存次数/开关(1.0.9 业务配置)。未扫描到业务触发点PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:380, PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:402
pet_sounds_free_trial_count公共能力5Pet Sounds:免费试用次数(默认 5)。未扫描到业务触发点PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:411
pet_sounds_subscribe_mode公共能力0Pet Sounds:订阅模式(默认 0)。未扫描到业务触发点PetChat/Common/Managers/RemoteConfig/PCAppRemoteConfig.swift:417
Pet_sounds_rating_guide公共能力4Pet 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公共能力1Pet 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" / 1Grouping 参数兼容命名。 - 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.isEnabled1.0.9 新版引导页顺序配置(JSON 数组字符串)。PetChat/Module/Launch/PCLaunchVC.swift:430PetChat/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:323Source, Feedback, LengthThinking/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:323Source, Feedback, LengthThinking/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:307SourceThinking/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:297SourceThinking/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:322Source, Feedback, LengthThinking/Firebase
Main_Page_Show公共能力else { return } appDelegate.window?.backgroundColor = .color_bg appDelegate.window?.rootViewController = PCTabBarController() app…PetChat/Base/PCRouter.swift:28CountryThinking/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:307SourceThinking/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:297SourceThinking/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:322Source, Feedback, LengthThinking/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:301Source, Prompt_TypeThinking/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:1108passTime, adNetwork, campaignThinking/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:186typeThinking/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:237pageName, timeThinking/Firebase
Onboard_ClickOnboarding/// 上报引导页继续按钮点击埋点。 /// /// - Parameter index: 当前点击时所在页索引(0-based)。 private func reportOnboardClick(for index: Int) { guard let pa…PetChat/Module/Guide/PCGuideVC.swift:251pageNameThinking/Firebase
Onboard_ShowOnboarding} /// 上报引导页子页展示埋点。 /// /// - Parameter index: 当前展示页索引(0-based)。 private func reportOnboardShow(for index: Int) { guard let page =…PetChat/Module/Guide/PCGuideVC.swift:241pageNameThinking/Firebase
onboarding_next_clickOnboardingdTapStartButton), for: .touchUpInside) } /// 点击“开始魔法时刻” @objc private func didTapStartButton() { guard let selectedType else { re…PetChat/Module/Guide/PCSelectPetVC.swift:275petTypeThinking/Firebase
Add_Pets_ClickPet Hubottom.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_SuccessPet HubPCToastTool.show(PCLocal(str: "common.success"),duration: 1) { _ in PCDBManager.shared.getPetDataList { [weak self] records, _ in…PetChat/Module/PetHub/PCPetHubAddPetVC.swift:224Pet_NumThinking/Firebase
Pet_Magic_Click_CreatePet MagicpetMagicNavigationController?.popToRootViewController(animated: true) } /// “开始创作”按钮事件,发起任务。 @objc private func handleMakeButtonT…PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:552resource_id, Resource_Name, Resource_Cover_URL, Resource_URLThinking/Firebase
Pet_Magic_Create_ClickPet MagicURL":self.dataModel.cover ?? "","Resource_URL":self.dataModel.url ?? ""])) } } } } func eventClickActive() { reportPetMagicLoadAg…PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:499resource_id, Resource_Name, Resource_Cover_URL, Resource_URLThinking/Firebase
Pet_Magic_Detail_Page_ShowPet Magicems.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:824resource_id, Resource_Name, Resource_Cover_URL, Resource_URLThinking/Firebase
Pet_Magic_Enter_Album_PagePet MagicnCreateTaskSuccess = { [weak self] in self?.returnToPetMagicHomeAfterTaskCreated() } self.present(pickerVC, animated: true) PCRep…PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:491resource_id, Resource_Name, Resource_Cover_URL, Resource_URLThinking/Firebase
Pet_Magic_Select_Saved_PhotoPet MagictedPet = item } addPhotoView.onSelectionChanged = { [weak self] hasSelection in self?.updateMakeButtonState(isEnabled: hasSelecti…PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:387resource_id, Resource_Name, Resource_Cover_URL, Resource_URLThinking/Firebase
Pet_Magic_Start_LoadPet MagicCreateClick.rawValue,param: ["resource_id":self.dataModel.id ?? "","Resource_Name":self.dataModel.name ?? "","Resource_Cover_URL"…PetChat/Module/PetMagic/PCPetMagicDetailVC.swift:500resource_id, Resource_Name, Resource_Cover_URL, Resource_URLThinking/Firebase
pet_audio_clickPet Soundscell.maskHidden = !shouldShowVipMask(for: visibleItem) } } /// 上报语音包点击埋点。 /// /// - Parameter item: 当前点击的语音包。 private func report…PetChat/Module/PetSounds/PCPetSoundsVC.swift:567audioType, petType, voicePersonality, audioNameThinking/Firebase
Pet_Sounds_ClickPet Sounds音频成功开始播放后,再消耗一次免费次数,避免点击失败也扣次。 PCPetSoundsFreePlayManager.shared.consumeOnceAfterPlaySuccessIfNeeded() refreshVisibleVipMaskState…PetChat/Module/PetSounds/PCPetSoundsVC.swift:528Type, nameThinking/Firebase
Analyzing_Sound_FailPet Talkw.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_SuccessPet TalkParamKey.type.rawValue: recordType(for: changeType), PCAdjustEventParamKey.time.rawValue: elapsed, ] successParam.merge(vipStateA…PetChat/Module/PetTalk/PCVoiceRecordVC.swift:142-Thinking/Firebase
Stop_RecordingPet Talkring?) { 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:326typeThinking/Firebase
Talk_Guide_FinishPet Talkguard petVoiceCard.bounds.width > 0, petVoiceCard.bounds.height > 0 else { return false } return true } /// 完成首页引导后,记录本地状态并恢复顶部视频…PetChat/Module/PetTalk/PCPetTalkNewVC.swift:417-Thinking/Firebase
Talk_Guide_ShowPet TalkshouldRetryTalkGuidePresentation = false attachGuideOverlayIfNeeded() guideContainerView().layoutIfNeeded() introVideoPlayerView.…PetChat/Module/PetTalk/PCPetTalkNewVC.swift:366-Thinking/Firebase
Tap_to_RecordPet TalknToDog case (.dog, .pet): changeType = .dogToHuman } let title = kind == .human ? PCLocal(str: "petTalk.humanVoice") : PCLocal(st…PetChat/Module/PetTalk/PCPetTalkNewVC.swift:924typeThinking/Firebase
Translation_Result_Page_ShowPet TalkultPageParam: [String: Any] = [ PCAdjustEventParamKey.type.rawValue: recordType(for: changeType) ] resultPageParam.merge(vipState…PetChat/Module/PetTalk/PCVoiceRecordVC.swift:258-Thinking/Firebase
Album_Page_Next_ClickPet 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_clickPet Thoughts} /// 统一处理导航栏右侧按钮点击:空态展示引导,有会话时进入编辑。 @objc private func handleRightButtonTapped() { switch rightButtonMode { case .guide: /// 埋点:…PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:297-Thinking/Firebase
Pet_Thoughts_Enter_Album_PagePet Thoughts视频;在选择达到上限时给出专属提示文案。 viewModel.onSelectionLimitReached = { [weak pickerVC] in pickerVC?.view.makeToastText(PCLocal(str: "petThoug…PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:476-Thinking/Firebase
Pet_Thoughts_Load_AgainPet Thoughtsn } 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_FailPet 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:911ReasonThinking/Firebase
Pet_Thoughts_Load_SuccessPet ThoughtsanalysisBasisItems: response.analysisBasis, isAnalysisBasisExpanded: false )) } PCReport.report(withEvent: Event( type: .other, k…PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:899TimeThinking/Firebase
Pet_Thoughts_Start_LoadPet ThoughtserFullScreen preview.modalTransitionStyle = .crossDissolve present(preview, animated: true) } private func uploadThought(for mode…PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:521-Thinking/Firebase
Pet_Thoughts_Upload_Photo_ClickPet Thoughtsall(entryContext: PCVIPSubShowEntryContext( iapEntry: "Feature_Pet_Thoughts", resourceId: "", soundsName: "" )) return } PCReport…PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:465-Thinking/Firebase
Thought_Detail_ClickPet Thoughts= globalIndexForVisibleRow(indexPath.row) guard allMessages.indices.contains(globalIndex) else { return } guard shouldShowAnalysi…PetChat/Module/PetThoughts/PCPetThoughtsVC.swift:1110-Thinking/Firebase

立即使用

打开 App Store 下载 App

立即使用