我正试图报告一个VIEW_ITEM_LIST事件,其中包含一些ITEMS。除项目外,所有内容都会在调试视图中正确报告。我没有使用任何自定义事件。安卓和iOS似乎都出现了同样的问题。
这是我的密码。
override fun trackListViewEvent() {
val eventBundle = Bundle().apply {
val itemBundle1 = Bundle().apply {
putString(Param.ITEM_NAME, "name1")
putString(Param.ITEM_CATEGORY, "Category")
putString(Param.PRICE, "49.95")
putString(Param.CURRENCY, "EUR")
}
val itemBundle2 = Bundle().apply {
putString(Param.ITEM_NAME, "name2")
putString(Param.ITEM_CATEGORY, "Category")
putString(Param.PRICE, "89.95")
putString(Param.CURRENCY, "EUR")
}
putString(Param.ITEM_LIST_ID, "1234567890")
putString(Param.ITEM_LIST_NAME, "WhateverListName")
putString(Param.PRICE, "125.60")
putString(Param.CURRENCY, "EUR")
putParcelableArray(Param.ITEMS, arrayOf(itemBundle1, itemBundle2))
}
tracking.logEvent(Event.VIEW_ITEM_LIST, eventBundle)
}
在Logcat中,我得到:W/FA-SVC: Param value can't be null: items
另一个问题是ITEMS似乎只接受一些参数。当添加自定义参数时,我得到E/FA: Item cannot contain custom parameters
,但当添加非自定义参数(如FLIGHT_NUMBER(时,我会得到同样的错误。我在接受参数的文档中找不到任何解释。
谷歌(链接(的示例代码用Java编写,在Kotlin 中转换为此代码
val item1 = Bundle()
item1.putString(FirebaseAnalytics.Param.ITEM_NAME, "jeggings")
item1.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "pants")
val item2 = Bundle()
item2.putString(FirebaseAnalytics.Param.ITEM_NAME, "boots")
item2.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "shoes")
parameters.putParcelableArray(FirebaseAnalytics.Param.ITEMS, arrayOf(item1, item2))
这不起作用:在Emulator上,我得到了firebase错误25,在一个设备上,它根本没有显示在DebugView中(。你必须推断出Parcelable。所以把最后一行改到下面,你就应该没事了!
parameters.putParcelableArray(FirebaseAnalytics.Param.ITEMS, arrayOf<Parcelable>(item1, item2))
我已经为此工作了几个月,所以如果有人遇到类似的问题,我可以提供一些线索:
- 项目未显示在调试视图中,但它们正确到达GTM(如果没有任何问题(
- 关于错误:firebase更新了错误,现在出现了错误23(以及更多(
- 增强型电子商务不接受自定义参数,也没有可接受的参数列表,因此请按照文档查看可以使用的参数
- 要将项目列表放入捆绑包中,请使用:
Bundle((.apply{putParcelabelArray(Param.ITEMS,bundleList.toTypedArray((}
在这几个月里,一些参数和事件已被弃用。所以你应该经常检查是否有任何变化。请记住,web+应用程序的firebase分析很快就会发布,也许直接实现web+应用是个好主意。
是不支持的字符串数组列表的映射。看看firebase谷歌小组中的讨论。
您应该只记录事件参数的数字或字符串类型。因此,在您的情况下,您可以将数据存储为字符串以转换JSON字符串。
注意:支持字符串、长参数和双参数类型。字符串参数值的长度最多可以是100个字符。有关详细信息,请参阅本文档。
新答案:
问题是您正在eventBundle
的apply
函数中创建itemBundle1
和itemBundle2
,当您调用putParcelableArray(Param.ITEMS, arrayOf(itemBundle1, itemBundle2))
时,它们仍然是null
。您应该将这两个捆绑包移出eventBundle的apply
:
override fun trackListViewEvent() {
val itemBundle1 = Bundle().apply {
putString(Param.ITEM_NAME, "name1")
putString(Param.ITEM_CATEGORY, "Category")
putString(Param.PRICE, "49.95")
putString(Param.CURRENCY, "EUR")
}
val itemBundle2 = Bundle().apply {
putString(Param.ITEM_NAME, "name2")
putString(Param.ITEM_CATEGORY, "Category")
putString(Param.PRICE, "89.95")
putString(Param.CURRENCY, "EUR")
}
val eventBundle = Bundle().apply {
putString(Param.ITEM_LIST_ID, "1234567890")
putString(Param.ITEM_LIST_NAME, "WhateverListName")
putString(Param.PRICE, "125.60")
putString(Param.CURRENCY, "EUR")
putParcelableArray(Param.ITEMS, arrayOf(itemBundle1, itemBundle2))
}
tracking.logEvent(Event.VIEW_ITEM_LIST, eventBundle)
}
旧答案:
根据您当前的代码,推断出的arrayOf(itemBundle1, itemBundle2)
类型为Array<Bundle>
。
您应该强制Kotlin使用Array<Parcelable>
:
putParcelableArray(Param.ITEMS, arrayOf<Parcelable>(itemBundle1, itemBundle2))
显然,当我将所有Firebase库更新到最新版本时,这对我来说已经解决了。