手动事件跟踪
除了安装、打开、更新和购买(应用内购买)这些由 Hive SDK 自动跟踪的事件外,您还可以手动跟踪所需的事件。为此,您需要将事件注册到每个归因的仪表板上。例如,您可以跟踪特定事件,如完成游戏教程(TutorialComplete)或完成任务目标(MissionClear)。您应该在完成自动事件跟踪的设置后实施手动事件跟踪。
手動事件追蹤與 Adjust¶
- 要手動追蹤自定義事件,請在 Adjust 儀表板上註冊事件,並獲取應用程序令牌和事件令牌。應用程序令牌可以在儀表板主頁上獲得,而事件令牌則在儀表板 > 所有設置 > 事件中獲得。請參考 Adjust 儀表板指南 以了解如何獲取令牌。
- 在 hive_config.xml 中添加每個事件的應用程序令牌和事件令牌。詳細信息請參見下面的示例代碼。
-
Adjust 儀表板提供 SDK 簽名 V3 以防止應用程序偽造。要使用 SDK 簽名,您必須審查與 Adjust 的合同條款。
<providers> <!-- (跳過) --> <!-- 不要設置 Adjust 節點的 id 欄位。 --> <!-- Adjust 節點的 name 欄位固定為 "Adjust." --> <!-- 事件節點的 name 欄位由遊戲工作室定義。但一旦設置,應該與 sendEvent() 請求的所有其他行銷歸因的 name 欄位相同。--> <!-- 從 Hive SDK v4 25.0.0 開始,id、secretId、info1~4 不再用於 Adjust v5 的應用 --> <Adjust name="Adjust" key="APP_TOKEN"> <events> <event name="TutorialComplete" value="TutorialComplete_EVENT_TOKEN"/> <event name="MissionClear" value="MissionClear_EVENT_TOKEN"/> </events> <!-- (跳過) --> </Adjust> </providers>
-
呼叫分析 API sendEvent() 以發送事件。在發送事件時,請在 hive_config.xml 中使用
事件名稱
。名稱
用作 sendEvent() 的請求參數,而您設置的值
將在每個歸因的儀表板上更新。Analytics.sendEvent("TutorialComplete");
Analytics.sendEvent("MissionClear");
手動追蹤事件與 Airbridge¶
- 获取所需的令牌。有关如何获取令牌的信息,请参阅Airbridge仪表板指南。
- 从仪表板 > 设置 > 令牌管理中获取应用SDK令牌和应用名称。
- 将令牌、应用名称和事件设置添加到hive_config.xml中。请参阅下面的 hive_config.xml 示例代码。在Windows上,令牌和应用名称设置不是必需的,但Hive控制台设置是必需的。
- Airbridge提供SDK签名以防止应用程序欺骗。要使用相关功能,您必须首先与Airbridge检查合同条款。获取密钥并将其作为
secretId
、secret
值添加到hive_config.xml中。 有关SDK签名安全信息的更多信息,请参阅Airbridge指南。仅在Android和iOS上支持,不支持Windows。 - 如果您同时申请Windows、Android和iOS,请联系Airbridge以获取预设。
- 通过调用分析API sendEvent()发送事件。发送事件时,使用添加到hive_config.xml中的
event<
标签的name
和value
。name
在调用API时用作参数,value
可以在每个归因的仪表板中检查。Analytics.sendEvent("TutorialComplete");
Analytics.sendEvent("MissionClear");
hive_config.xml 範例代碼¶
<providers>
<Airbridge name="Airbridge" key="APP_SDK_TOKEN" appName="APP_NAME" secretId="SECRET_ID" secret="SECRET">
<events>
<event name="TutorialComplete" value="Tutorial Complete" />
<event name="MissionClear" value="Mission Clear" />
</events>
</Airbridge>
</providers>
使用 Airbridge 發送附加屬性¶
在使用 Airbridge 發送應用內事件時,您可以使用 Analytics.sendEventWithAttributes
發送附加屬性。
可以發送的附加屬性信息如下。
- 行动,标签:收集可用于 Airbridge 报告中的分组信息。
- 值:收集用于收入分析的信息。
- 语义属性:Airbridge 的 预定义属性。
- 如果输入的属性字符串不是预定义属性,则可能无法收集。
- 数据格式与语义属性不匹配的事件将不会被收集。由于每个语义属性的数据格式各不相同,因此需要谨慎。
- 数据格式为字符串的语义属性允许最多 1024 个字符。数据格式为 int 或 float 的语义属性允许最多 64 位。
- 自定义属性:用户定义的属性。
API 參考: hive.Analytics.sendEventWithAttributes
using hive;
// 創建 AnalyticsAttributes
var analyticsAttributes = new AnalyticsAttributes();
// Airbridge 的特定屬性
var airbridgeSpecific = new AirbridgeSpecific();
// 行動
airbridgeSpecific.SetSemanticAction("工具");
// 標籤
airbridgeSpecific.SetSemanticLabel("錘子");
// 值
airbridgeSpecific.SetSemanticValue(10);
// 語義屬性
airbridgeSpecific.AddSemanticAttribute("type", "Warrior");
airbridgeSpecific.AddSemanticAttribute("score", 20);
// 添加 Airbridge 特定属性
analyticsAttributes.AddModuleSpecificAttributes(airbridgeSpecific);
// 添加自定义属性
analyticsAttributes.AddCustomAttribute("key1", "value1");
analyticsAttributes.AddCustomAttribute("key2", "value2");
Analytics.sendEventWithAttributes("Quest Complete", analyticsAttributes);
API 參考: Analytics::sendEventWithAttributes
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
// 創建 AnalyticsAttributes
AnalyticsAttributes* analyticsAttributes = new AnalyticsAttributes();
// Airbridge 的特定屬性
AirbridgeSpecific* airbridgeSpecific = new AirbridgeSpecific();
std::string semanticAction = "工具";
std::string semanticLabel = "錘";
float semanticValue = 10.0f;
// 行动
airbridgeSpecific->setSemanticAction(semanticAction);
// 标签
airbridgeSpecific->setSemanticLabel(semanticLabel);
// 值
airbridgeSpecific->setSemanticValue(semanticValue);
// 語義屬性
airbridgeSpecific->addSemanticAttribute("type", picojson::value("Warrior"));
airbridgeSpecific->addSemanticAttribute("score", picojson::value(20.0f));
// 添加 Airbridge 特定属性
analyticsAttributes->addModuleSpecificAttributes(airbridgeSpecific);
// 添加自定义属性
analyticsAttributes->addCustomAttribute("key1", picojson::value("value1"));
analyticsAttributes->addCustomAttribute("key2", picojson::value("value2"));
std::string eventName = "Quest Complete";
Analytics::sendEventWithAttributes(eventName, *analyticsAttributes);
API 參考: Analytics.sendEventWithAttributes
import com.hive.Analytics
import com.hive.analytics.provider.attributes.AirbridgeSpecific
import com.hive.analytics.provider.attributes.AnalyticsAttributes
// 創建 AnalyticsAttributes
val analyticsAttributes = AnalyticsAttributes()
// Airbridge 的特定属性
val airbridgeSpecific = AirbridgeSpecific().apply {
setSemanticAction("工具") // 动作
setSemanticLabel("锤子") // 标签
setSemanticValue(10.0f) // 值
addSemanticAttribute("类型", "战士") // 语义属性
addSemanticAttribute("分数", 20.0f) // 语义属性
}
// 添加 Airbridge 特定属性
analyticsAttributes.addModuleSpecificAttribute(airbridgeSpecific)
// 添加自定义属性
analyticsAttributes.addCustomAttribute("key1", "value1")
analyticsAttributes.addCustomAttribute("key2", "value2")
Analytics.sendEventWithAttributes("Quest Complete", analyticsAttributes)
API 參考: Analytics.sendEventWithAttributes
import com.hive.Analytics;
import com.hive.analytics.provider.attributes.AirbridgeSpecific;
import com.hive.analytics.provider.attributes.AnalyticsAttributes;
// 創建 AnalyticsAttributes
AnalyticsAttributes analyticsAttributes = new AnalyticsAttributes();
// Airbridge 的特定属性
AirbridgeSpecific airbridgeSpecific = new AirbridgeSpecific();
airbridgeSpecific.setSemanticAction("工具"); // 动作
airbridgeSpecific.setSemanticLabel("锤子"); // 标签
airbridgeSpecific.setSemanticValue(10.0f); // 值
airbridgeSpecific.addSemanticAttribute("类型", "战士"); // 语义属性
airbridgeSpecific.addSemanticAttribute("分数", 20.0f); // 语义属性
// 添加 Airbridge 特定属性
analyticsAttributes.addModuleSpecificAttribute(airbridgeSpecific);
// 添加自定义属性
analyticsAttributes.addCustomAttribute("key1", "value1");
analyticsAttributes.addCustomAttribute("key2", "value2");
Analytics.sendEventWithAttributes("Quest Complete", analyticsAttributes);
API 參考: HIVEAnalytics:sendEventWithAttributes
#import <HIVEService/HIVEService-Swift.h>
HiveAnalyticsAttributes* analyticsAttributes = [[HiveAnalyticsAttributes alloc] init];
HiveAirbridgeSpecific* airbridgeSpecific = [[HiveAirbridgeSpecific alloc] init];
[airbridgeSpecific setSemanticAction: @"Tool"];
[airbridgeSpecific setSemanticAction: @"Hammer"];
[airbridgeSpecific setSemanticValue: 10.0f];
[airbridgeSpecific addSemanticAttribute: @"type" value: @"Warrior"];
[airbridgeSpecific addSemanticAttribute: @"score" value: @20.0f];
[analyticsAttributes addModuleSpecificAttribute: airbridgeSpecific];
[analyticsAttributes addCustomAttribute: @"key1" value: @"value1"];
[analyticsAttributes addCustomAttribute: @"key2" value: @"value2"];
[HIVEAnalytics sendEventWithAttributes: @"Quest Complete" attributes: analyticsAttributes];
API 參考: HIVEAnalytics:sendEventWithAttributes
#import HIVEService
// 创建 AnalyticsAttributes
let analyticsAttributes = AnalyticsAttributes()
// Airbridge 的特定属性
let airbridgeSpecific = AirbridgeSpecific()
airbridgeSpecific.setSemanticAction("工具")
airbridgeSpecific.setSemanticLabel("锤子")
airbridgeSpecific.setSemanticValue(10.0)
airbridgeSpecific.addSemanticAttribute("类型", value: "战士")
airbridgeSpecific.addSemanticAttribute("分数", value: 20.0)
// 添加 Airbridge 特定属性
analyticsAttributes.addModuleSpecificAttribute(airbridgeSpecific)
// 添加自定义属性
analyticsAttributes.addCustomAttribute("key1", value: "value1")
analyticsAttributes.addCustomAttribute("key2", value: "value2")
AnalyticsInterface.sendEventWithAttributes("任務完成", attributes: analyticsAttributes)
使用 Singular、Appsflyer 和 Firebase Analytics 手動追蹤事件¶
- 從每個歸因儀表板獲取所需的密鑰。參考每個歸因儀表板的指南以了解如何獲取密鑰。
- Singular: 從儀表板獲取 SDK 密鑰和 SDK 秘密密鑰。
- Appsflyer: 前往 AppsFlyer 配置 > 應用設置以獲取開發密鑰。
- Firebase Analytics: 不需要密鑰。
-
根據以下指南配置 hive_config.xml。欲了解更多詳情,請參見以下示例代碼。如果您使用 AppsFlyer 歸因與 Hive SDK iOS(原生、Unity、Unreal),則需要為 Apple AppID 設置
itunseConnectAppId
。<providers> <!-- 配置 Singular --> <!-- Singular 節點的名稱字段固定為 "Singular." --> <!-- 事件節點的名稱字段由遊戲工作室定義。但一旦設置,它應該與 sendEvent() 請求的所有其他市場歸因的名稱字段相同。--> <!-- 事件節點的值字段由遊戲工作室定義。 --> <Singular name="Singular" id="SDK_KEY" key="SDK_SECRET_KEY"> <events> <event name="TutorialComplete" value="教程完成"/> <event name="MissionClear" value="任務清除"/> </events> </Singular> <!-- 配置 AppsFlyer --> <!-- AppsFlyer 節點的名稱字段固定為 "AppsFlyer." --> <!-- 不要設置 AppsFlyer 節點的 id 字段。 --> <!-- 事件節點的名稱字段由遊戲工作室定義。但一旦設置,應該對所有其他營銷歸因的 sendEvent() 請求的名稱字段保持一致。--> <!-- 事件節點的值字段由遊戲工作室定義。 --> <AppsFlyer name="AppsFlyer" id="unused" key="DEV_KEY" itunseConnectAppId="909923112"> <events> <event name="TutorialComplete" value="教程完成"/> <event name="MissionClear" value="任務清除"/> </events> </AppsFlyer> <!-- 配置 Firebase 分析 --> <!-- 事件节点的名称字段由游戏工作室定义。但是一旦设置,它应该与 sendEvent() 请求的所有其他营销归因的名称字段相同。--> <!-- 事件节点的值字段由游戏工作室定义。 --> <firebase> <events> <event name="TutorialComplete" value="TutorialComplete"/> <event name="MissionClear" value="MissionClear"/> </events> </firebase> </providers>
-
呼叫分析 API sendEvent() 以發送事件。當您發送事件時,請在 hive_config.xml 中使用
事件名稱
。name
用作 sendEvent() 的請求參數,而您設置的value
將在每個歸因的儀表板上更新。Analytics.sendEvent("TutorialComplete");
Analytics.sendEvent("MissionClear");
透過 sendEvent() 發送事件¶
建議僅在用戶活動滿足特定條件時(例如完成教程)向歸因發送追蹤事件。在Analytics類中調用sendEvent()
方法以發送追蹤事件。作為sendEvent()
的第一個參數,輸入在hive_config.xml文件中定義的<event>
元素的name
屬性的值。
以下是發送 TutorialComplete 事件到市場歸因的示例代碼,以通知用戶已完成教程。
API 參考: hive.Analytics.sendEvent
API 參考: Analytics::sendEvent
API 參考: Analytics.sendEvent
API 參考: AnalyticsInterface .sendEvent
API 參考: HIVEAnalytics:sendEvent
API 參考: AnalyticsInterface.sendEvent
在 Firebase 環境中應用 Google Ads 裝置測量¶
要在Firebase環境中測量Google Ads提供的設備內轉換,您需要實現Firebase Google ODM解決方案。此解決方案需要用戶同意提供的電子郵件地址或電話號碼。在實施此解決方案的過程中,如果實施了Firebase身份驗證或開發者引入的單獨身份驗證環境,Hive SDK不會收集電子郵件地址,而是將在身份驗證後獲得的任何電子郵件地址直接傳遞給Firebase API。
Note
本指南僅適用於 iOS 應用程式。Android 應用程式不需要在 Firebase 環境中進行設備內轉換測量的單獨過程。
實施方法¶
在以下整个过程中,您必须确保用户设备上的个人识别信息不会泄露到外部。
- 下載Google Firebase ODM Unity 插件並將其添加到您的 Unity 項目中。
- 實現身份驗證以在登錄後獲取 IdP 電子郵件地址或電話號碼。
- 根據Firebase 定義的方法對電子郵件地址或電話號碼進行標準化。
- 實現將標準化的電子郵件地址/電話號碼傳遞給 Firebase。或者,實現將標準化的電子郵件地址/電話號碼的哈希值傳遞給 Firebase。請參考下面的示例代碼。
Note
插件 API 可以按顺序调用,但 后续调用在每个用户调用一次后基本上被忽略。
示例代码¶
以下是使用 Unity 插件時的範例代碼。