Firebase Analytics VIEW_ITEM_LIST ITEMS 未显示

Firebase Analytics VIEW_ITEM_LIST ITEMS not showing

我正在尝试报告一个 VIEW_ITEM_LIST event with some ITEMS 里面。除项目外,调试视图中的所有内容均已正确报告。我没有使用任何自定义事件。 Android 和 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 这样的非自定义参数时,我得到同样的错误。而且我找不到关于接受哪些参数的文档的任何解释。

您使用的是不受支持的字符串数组列表的映射。看看 firebase google 组中的 this discussion

您应该只记录事件参数的数字或字符串类型。因此,在您的情况下,您可以将数据存储为字符串以转换 JSON 字符串。

注意:支持String、long和double参数类型。字符串参数值最长可达 100 个字符。 有关详细信息,请参阅 this document

新答案:

问题是您在 eventBundleapply 函数中创建了 itemBundle1itemBundle2,当您调用 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))

用 Java 编写的 Google (link) 中的示例代码,在 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))

这不起作用:在模拟器上我得到了 firebase 错误 25,而在设备上它根本没有显示在 DebugView 中)。您必须推断 Parcelable。因此,将最后一行更改为下面,你应该没问题!

parameters.putParcelableArray(FirebaseAnalytics.Param.ITEMS, arrayOf<Parcelable>(item1, item2))

显然,当我将所有 Firebase 库更新到最新版本时,这对我来说已经解决了。

我已经为此工作了几个月,所以如果有人遇到类似问题,我可以提供一些帮助:

  1. 项目未显示在调试视图中,但它们正确到达 GTM(如果没有任何问题)
  2. 关于错误:firebase updated its errors 现在出现错误 23(以及更多错误)。
  3. 增强型电子商务不接受自定义参数,也没有可接受的参数列表,所以请按照documentation查看可以使用哪些参数。
  4. 要将项目列表放入捆绑包中,请使用:

Bundle().apply{ putParcelabelArray(Param.ITEMS, bundleList.toTypedArray()}

在这几个月中,一些参数和事件已被弃用。所以你应该经常检查是否有任何变化。 请记住,用于网络 + 应用程序的 firebase 分析将很快发布,也许直接实施网络 + 应用程序是个好主意。