Android Kotlin上报Analytics PURCHASE事件含items数组时Tag Manager报错
Firebase Analytics PURCHASE事件报错:Type not supported: class [Landroid.os.Parcelable;
问题场景
使用Kotlin开发Android应用,记录Firebase Analytics的PURCHASE事件时,仅当传入FirebaseAnalytics.Param.ITEMS数组参数时触发如下错误:
E/GoogleTagManager: Internal error - Function call: __md_main Type not supported: class [Landroid.os.Parcelable; E/GoogleTagManager: Internal error - Function call: __md_main Type not supported: class [Landroid.os.Parcelable; E/GoogleTagManager: Internal error - Function call: __fm_sendFirebaseEvent Type not supported: class [Landroid.os.Parcelable;
相关代码
val firebaseAnalytics = Firebase.analytics 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) } val itemJeggingsCart = Bundle(itemJeggings).apply { putLong(FirebaseAnalytics.Param.QUANTITY, 2) } firebaseAnalytics.logEvent(FirebaseAnalytics.Event.PURCHASE) { param(FirebaseAnalytics.Param.TRANSACTION_ID, "T12345") param(FirebaseAnalytics.Param.AFFILIATION, "Google Store") param(FirebaseAnalytics.Param.CURRENCY, "USD") param(FirebaseAnalytics.Param.VALUE, 14.98) param(FirebaseAnalytics.Param.TAX, 2.58) param(FirebaseAnalytics.Param.SHIPPING, 5.34) param(FirebaseAnalytics.Param.COUPON, "SUMMER_FUN") param(FirebaseAnalytics.Param.ITEMS, arrayOf(itemJeggingsCart)) }
解决方案
错误原因是ITEMS参数传入了Bundle[]数组,而Firebase Analytics要求该参数接收ArrayList<Bundle>类型。只需将数组转换为ArrayList即可:
修改ITEMS参数的传入代码:
param(FirebaseAnalytics.Param.ITEMS, arrayListOf(itemJeggingsCart))
若有多个商品,直接添加到ArrayList中:
val items = arrayListOf( itemJeggingsCart, // 其他商品Bundle ) param(FirebaseAnalytics.Param.ITEMS, items)
内容的提问来源于stack exchange,提问作者Sergio Rivas
相关产品推荐
相关产品推荐

