Firebase Analytics上报事件时double类型item_price显示异常
问题原因
这是Firebase Analytics Kotlin DSL扩展的典型类型序列化bug:
- 你用的
logEvent带lambda的写法是Kotlin扩展提供的DSL封装,当你通过param()方法传入ITEMS对应的Bundle数组时,扩展内部的序列化逻辑没有正确识别Bundle中存储的Double类型字段,会直接跳过或者错误转换该值,最终Debug控制台就看不到正常的价格数值。 - Google官方给出的构造Item Bundle的示例是基于原生Java API写的,没有同步更新Kotlin DSL场景下的兼容说明,直接照搬示例套DSL写法就会踩这个坑。
解决方案
两种方案都可以彻底解决问题,按需选择即可:
方案1:改用原生Bundle构造事件参数(兼容性最好)
放弃DSL传参方式,完全用原生Bundle构造所有事件参数后上报,走系统原生的Bundle序列化逻辑,不会触发扩展的类型转换bug,代码参考:
val itemJeggings = Bundle().apply { putString(FirebaseAnalytics.Param.ITEM_ID, "SKU_123") putString(FirebaseAnalytics.Param.ITEM_NAME, "jeggings") putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "pants") putString(FirebaseAnalytics.Param.ITEM_VARIANT, "black") putString(FirebaseAnalytics.Param.ITEM_BRAND, "Google") putDouble(FirebaseAnalytics.Param.PRICE, 9.99) putLong(FirebaseAnalytics.Param.INDEX, 1) } val eventParams = Bundle().apply { putString(FirebaseAnalytics.Param.ITEM_LIST_ID, "L001") putString(FirebaseAnalytics.Param.ITEM_LIST_NAME, "Related products") putParcelableArray(FirebaseAnalytics.Param.ITEMS, arrayOf(itemJeggings)) } firebaseAnalytics.logEvent(FirebaseAnalytics.Event.VIEW_ITEM_LIST, eventParams)
方案2:升级Firebase SDK版本
Google在后续发布的Firebase Android SDK中修复了这个DSL序列化的类型识别缺陷,将项目依赖的Firebase BoM版本升级到32.7.0及以上后,原有DSL写法就可以正常上报Double类型的价格字段。
提示:如果你的应用需要兼容旧版Google Play服务、或者无法随意升级SDK版本,优先选择方案1,不存在版本兼容问题。
内容的提问来源于stack exchange,提问作者Ker1n
相关产品推荐
相关产品推荐

