【发布时间】:2020-09-19 19:43:15
【问题描述】:
在工作中,我们在通过 firebase 门户创建动态链接时尝试使用可选的活动跟踪 UTM 参数。
动态链接工作正常,据我从所有官方文档中得知,在创建动态链接时的最后一个可选步骤中添加 UTM 值应该会导致这些值与 dynamic_link_app_open 一起发送事件。
但是,当我们查看 dynamic_link_app_open 事件的事件或转化标签时,我们没有看到任何归因值。我们看到正在发送该事件,但我们只是没有获得广告活动属性值,因此我们不知道是什么广告活动导致了这些事件和转化。
该特定功能的文档确实缺乏,这让我们的营销部门感到沮丧,最终以开发人员(即我)告终。
我已经开发了一个解决方法,但它是一个 hack:
在 Firebase 门户上创建动态链接时,我将 utm_source、utm_medium 和 utm_campaign 查询字符串直接放入深层链接中(出于安全原因,不是我们实际的深层链接,但你明白了):
https://www.example.com?utm_source=Test&utm_medium=Test&utm_campaign=Test
然后在客户端中,在通过 firebase 动态链接 SDK 传递动态链接后,我添加了代码以将这些从生成的深层链接中提取出来。有了这 3 位信息,我可以通过 FirebaseAnalytics SDK 将 app_open 事件发送到 firebase 分析,如下所示:
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(this, pendingDynamicLinkData -> {
if (pendingDynamicLinkData != null) {
Uri optionalDynamicDeepLink = pendingDynamicLinkData.getLink();
if (optionalDynamicDeepLink != null) {
List<String> utmSource = optionalDynamicDeepLink.getQueryParameters(UTM_SOURCE);
List<String> utmCampaign = optionalDynamicDeepLink.getQueryParameters(UTM_CAMPAIGN);
List<String> utmMedium = optionalDynamicDeepLink.getQueryParameters(UTM_MEDIUM);
if (!utmSource.isEmpty() && !utmCampaign.isEmpty() && !utmMedium.isEmpty()) {
String utmSourceParam = String.valueOf(utmSource);
String utmCampaignParam = String.valueOf(utmCampaign);
String utmMediumParam = String.valueOf(utmMedium);
Bundle params = new Bundle();
params.putString(FirebaseAnalytics.Param.SOURCE, utmSourceParam);
params.putString(FirebaseAnalytics.Param.CAMPAIGN, utmCampaignParam);
params.putString(FirebaseAnalytics.Param.MEDIUM, utmMediumParam);
FirebaseAnalytics.getInstance(this).logEvent(FirebaseAnalytics.Event.CAMPAIGN_DETAILS, params);
FirebaseAnalytics.getInstance(this).logEvent(FirebaseAnalytics.Event.APP_OPEN, params);
}
String dynamicDeepLink = optionalDynamicDeepLink.toString();
if (!handleDeepLink(dynamicDeepLink)) {
Generic.openLinkInCustomTabs(getApplicationContext(), deepLinkOptional);
}
} else {
if (!handleDeepLink(deepLinkOptional)) {
handleIntent(intent);
}
}
} else {
if (!handleDeepLink(deepLinkOptional)) {
handleIntent(intent);
}
}
}).addOnFailureListener(this, e -> {
if (!handleDeepLink(deepLinkOptional)) {
Generic.openLinkInCustomTabs(getApplicationContext(), deepLinkOptional);
}
});
虽然这可行,但它引出了一个问题;创建动态链接时,可选的活动跟踪部分有什么意义?大概将utm_source、utm_medium 和utm_campaign 放在那里应该允许firebase 使用所述活动跟踪数据自动填充dynamic_link_app_open 事件,但事实并非如此。
例如,这是我如何设置可选的最后一步:
然后我多次按照动态链接进入应用程序,并要求测试人员也这样做。我已经等了 36 多个小时(因为我知道这些事件可能需要一些时间才能传播到云),我们看到 dynamic_link_app_open 事件正在累积,表明我们的动态链接记录了一个事件,但是当我们钻取时在该事件中没有收集 UTM 信息。
firebase 的这个功能坏了吗?
我可以从官方 firebase 文档 (https://firebase.google.com/docs/dynamic-links/analytics) 中看到这一点:
这表明 Firebase 不支持从动态链接点击中收集 UTM 数据,但 google 分析支持。这一点都不令人困惑(/讽刺)。 所以大概我们的一些数据(即与活动跟踪有关的数据)是由谷歌分析收集/托管的?
为了进一步混淆,firebase 动态链接的官方文档指出:
“如果您将动态链接事件标记为转化,您可以在归因页面上查看动态链接的效果。”
然后显示与现实不符的 Firebase 门户 UI 图像:
我在 firebase 控制台上搜索并搜索了一个归因选项卡,但没有一个...这些文档足以让开发人员发疯。
【问题讨论】:
-
谢谢弗兰克!哇,你在 firebase 项目上工作,请原谅我有点无头的鸡咆哮:3 你有什么见解吗?
-
如何检查归因数据?您是在 Firebase 用户界面还是在 BigQuery 中执行此操作?在 Firebase 用户界面中应该可以正常工作,并且您不应该手动发送广告系列数据。
-
好的,我明白了。因此,在 UI 中,您会在左侧面板的 Analytics -> Conversions 部分中看到该数据。在那里,您可以选择您的转化,如“dynamic_link_first_open”或“dynamic_link_app_open”,您可以在下方看到归因数据。如果您在那里没有看到它们,则意味着它们没有被标记为转化,因此 Analytics -> Events -> 每个事件附近都有一个开关将其标记为转化。或者,您可以为该事件打开参数报告,但将其标记为转化可能更容易。
-
在 BigQuery 中,这些数据将在事件“dynamic_link_first_open”或“dynamic_link_app_open”的自定义参数中提供
-
BigQuery 中的数据至少应与 Firebase 用户界面大致对齐。我假设在 BigQuery 中您正在检查 app_first_open 的事件参数,因此此处“dynamic_link_first_open”右侧列出的参数:support.google.com/firebase/answer/…?如果是这种情况,那么它看起来像一个错误,我会联系 Firebase 支持,他们应该能够进行额外的验证:firebase.google.com/support
标签: android firebase firebase-analytics firebase-dynamic-links event-tracking