Firebase中AnalyticsParameterPrice参数自动追加多余数字问题
问题原因
- Firebase Analytics 上报电商类事件时,
AnalyticsParameterPrice参数的底层存储统一使用微单位(1本位币=1000000微单位),SDK会自动将你传入的浮点型价格值乘以1e6转换为微单位后上报。 - 如果你同步上传了
AnalyticsParameterCurrency货币类型参数,Firebase控制台会自动将存储的微单位数值除以1e6,转换为正常本位币数值展示;你未传入货币类型参数时,控制台无法完成单位转换,直接展示原始存储的微单位数值,所以出现39.95变成39950000的问题。 - 你当前的价格字符串处理逻辑没有问题,可以正确将"39,95 TL"转换为39.95的浮点值。
解决方案
方案1(推荐):补充货币类型参数
在product字典中新增AnalyticsParameterCurrency参数,传入土耳其里拉对应的ISO 4217货币码TRY,Firebase就会正确识别价格单位,在控制台展示正常的本位币数值。
修改后的代码参考:
let value = Double(model.price.components(separatedBy: " TL").first?.replacingOccurrences(of: ",", with: ".") ?? "") ?? 0.0 let product: [String:Any] = [ AnalyticsParameterItemID: model.sku, AnalyticsParameterItemName: model.name, AnalyticsParameterItemCategory: "\(genderCategoryTitle) / \(genderCategoryTitle) \(sectionCategoryName) / \(categoryName)", AnalyticsParameterItemVariant: model.color ?? "", AnalyticsParameterItemBrand: "Skechers", AnalyticsParameterPrice: value, // 新增货币类型参数 AnalyticsParameterCurrency: "TRY" ] var selectedItem: [String: Any] = [ AnalyticsParameterItemListID: categoryID, AnalyticsParameterItemListName: "\(genderCategoryTitle) / \(genderCategoryTitle) \(sectionCategoryName) / \(categoryName)", AnalyticsParameterItemVariant: model.color ?? "", ] selectedItem[AnalyticsParameterItems] = [product] Analytics.logEvent(AnalyticsEventSelectItem, parameters: selectedItem)
方案2(可选,提升兼容性):优化价格解析逻辑
如果后续可能遇到带千位分隔符的土耳其格式价格(比如1.299,99 TL代表1299.99里拉),直接替换字符的方式会解析出错,建议用NumberFormatter指定土耳其区域配置解析价格,兼容性更强:
let formatter = NumberFormatter() formatter.locale = Locale(identifier: "tr_TR") formatter.numberStyle = .decimal let priceStr = model.price.components(separatedBy: " TL").first ?? "" let value = formatter.number(from: priceStr)?.doubleValue ?? 0.0
内容的提问来源于stack exchange,提问作者Batuhan Baran
相关产品推荐
相关产品推荐

