手動イベントトラッキング
インストール、オープン、アップデート、購入(アプリ内購入)を除いて、Hive SDKによって自動的に追跡されるものは、手動で追跡したい必要なイベントを追跡できます。これを行うには、各アトリビューションのダッシュボードにイベントを登録する必要があります。たとえば、ゲームチュートリアルの完了(TutorialComplete)やミッション目標の完了(MissionClear)など、特定のイベントを追跡できます。自動イベント追跡の設定が完了した後に、手動イベント追跡を実装する必要があります。
Adjustを使用した手動イベントトラッキング¶
- カスタムイベントを手動で追跡するには、Adjustダッシュボードでイベントを登録し、アプリトークンとイベントトークンを取得します。アプリトークンはダッシュボードのメインページで取得でき、イベントトークンはダッシュボード > すべての設定 > イベントで取得できます。トークンの取得方法については、Adjustダッシュボードガイドを参照してください。
- hive_config.xmlに各イベントのアプリトークンとイベントトークンを追加します。詳細については、以下の例コードを参照してください。
-
Adjustダッシュボードは、アプリのスプーフィング防止のためにSDK Signature V3を提供しています。SDK Signatureを使用するには、Adjustとの契約条件を確認する必要があります。
<providers> <!-- (スキップされました) --> <!-- Adjustノードのidフィールドは設定しないでください。 --> <!-- Adjustノードのnameフィールドは「Adjust」に固定されています。 --> <!-- eventノードの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>
-
Analytics APIを呼び出してイベントを送信します sendEvent()。イベントを送信する際は、hive_config.xmlに追加された
<event>
タグを使用します。<event>
タグの値の中で、name
はAPIを呼び出す際のパラメータとして使用され、value
は対応するアトリビューションのダッシュボードで確認できます。Analytics.sendEvent("TutorialComplete");
Analytics.sendEvent("MissionClear");
Airbridgeでのイベントの手動追跡¶
- 必要なトークンを取得します。トークンの取得方法については、Airbridge ダッシュボードガイドを参照してください。
- ダッシュボード > 設定 > トークン管理からアプリ SDK トークンとアプリ名を取得します。
- トークン、アプリ名、およびイベント設定を hive_config.xml に追加します。以下の hive_config.xml の例コードを参照してください。Windows では、トークンとアプリ名の設定は必要ありませんが、Hive コンソールの設定は必要です。
- Airbridge はアプリのなりすましを防ぐためにSDK シグネチャを提供しています。関連機能を使用するには、まず Airbridge と契約条件を確認する必要があります。キーを取得し、hive_config.xml に
secretId
、secret
の値として追加します。SDK シグネチャのセキュリティ情報についての詳細は、Airbridge ガイドを参照してください。これは Android および iOS のみサポートされており、Windows ではサポートされていません。 - Windows、Android、および iOS を同時に適用する場合は、Airbridge にプリセットについて問い合わせてください。
- Analytics API sendEvent() を呼び出してイベントを送信します。イベントを送信する際は、hive_config.xml に追加された
<event>
タグを使用します。<event>
タグの値の中で、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>
Singular、Appsflyer、Firebase Analyticsを使用して手動でイベントを追跡する¶
このセクションでは、Singular、Appsflyer、およびFirebase Analyticsのアトリビューションを使用してイベントを手動で追跡する方法について説明します。
- 以下のように各アトリビューションのダッシュボードで必要なキーを発行します。キーの発行方法については、各アトリビューションが提供するダッシュボードガイドを参照してください。
- Singular: ダッシュボードでSDKキーとSDKシークレットキーを受け取ります。
- Appsflyer: ダッシュボード > アプリ設定でDevキーを受け取ります。
- Firebase Analytics: キーの発行は必要ありません。
< - hive_config.xml ファイルを以下の例のように修正します。 特に、Hive SDK Native iOS または Unity Android & iOS および Unreal Engine Android & iOS で Appsflyer アトリビューションを使用する場合、Apple AppID 設定のために
itunseConnectAppId
値を設定します。<providers> <!-- Singular設定する --> <!-- Singularノードnameフィールドは"Singular"固定値です。 --> <!-- eventノードnameフィールドはゲーム会社が任意で設定します。ただし、sendEvent()呼び出しのために他のアトリビューションでも同じ値を使用する必要があります。--> <!-- eventノードvalueフィールドはゲーム会社が任意で設定します。 --> <Singular name="Singular" id="SDK_KEY" key="SDK_SECRET_KEY"> <events> <event name="TutorialComplete" value="Tutorial Complete" /> <event name="MissionClear" value="Mission Clear" /> </events> </Singular> <!-- AppsFlyerの設定 --> <!-- AppsFlyerノードのnameフィールドは「AppsFlyer」に固定されています。 --> <!-- AppsFlyerノードのidフィールドは設定しません。 --> <!-- eventノードのnameフィールドはゲーム会社が任意で設定します。ただし、sendEvent()を呼び出すために他のアトリビューションでも同じ値を使用する必要があります。--> <!-- eventノードのvalueフィールドはゲーム会社が任意で設定します。 --> <AppsFlyer name="AppsFlyer" id="unused" key="DEV_KEY" itunseConnectAppId="909923112"> <events> <event name="TutorialComplete" value="チュートリアル完了" /> <event name="MissionClear" value="ミッションクリア" /> </events> </AppsFlyer> <!-- Firebase Analytics 設定する --> <!-- event ノード name フィールドはゲーム会社が任意に設定します。ただし、sendEvent() を呼び出すために他のアトリビューションでも同じ値を使用する必要があります。--> <!-- event ノード value フィールドはゲーム会社が任意に設定します。 --> <firebase> <events> <event name="TutorialComplete" value="TutorialComplete" /> <event name="MissionClear" value="MissionClear" /> </events> </firebase> </providers>
- Analytics API sendEvent()を呼び出してイベントを送信します。 イベント送信時に、hive_config.xmlに追加した
<event>
タグの値を渡す引数として使用してイベントを送信します。<event>
タグの値の中でname
はAPI呼び出し時のパラメータとして使用され、value
は該当アトリビューションのダッシュボードで確認できます。Analytics.sendEvent("TutorialComplete");
Analytics.sendEvent("MissionClear");
sendEvent()로 이벤트 전송하기¶
어트리뷰션에 유저의 행동을 추적하는 이벤트를 전송하는 방법을 설명합니다.
アトリビューションにトラッキングイベントを送信する際、ユーザーのすべての行動を追跡するのではなく、「チュートリアル完了」のようにユーザーの行動が特定の条件を満たしたときに送信することを推奨します。
ユーザー行動追跡イベントを送信するには、Analytics APIの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
sendEventWithAttributes()で追加属性を送信する¶
sendEvent()
の代わりにsendEventWithAttributes()
関数を呼び出す場合、ユーザー定義の属性を追加して送信することができます。
sendEventWithAttributes()
関数の最初のパラメータ値は hive_config.xml 設定ファイルに定義した <event>
要素の name
属性値として入力します。
カスタム属性の追加¶
addCustomAttribute()
を呼び出すことで、Hive SDKがサポートするすべてのマーケティングアトリビューション(Airbridge、Adjust、Appsflyer、Singular、Firebase Analytics)にカスタム属性を追加して送信できます。
Note
カスタム属性(Custom Attribute)とは、ユーザーが定義した属性であり、String、Int、Float、Double、Booleanデータ形式をサポートします。ただし、Adjustに送信する場合、データ形式に関係なくすべてのデータ形式をStringに変換して送信します。
カスタム属性を追加して送信する例のコードは以下の通りです。
APIリファレンス: hive.Analytics.sendEventWithAttributes
#include "HiveAnalytics.h"
// アナリティクス属性を作成
FHiveAnalyticsAttributes AnalyticsAttributes;
// カスタム属性を追加
TSharedPtr<FJsonValue> CustomJsonValue1 = MakeShareable(new FJsonValueString("value1"));
AnalyticsAttributes.AddCustomAttribute(TEXT("key1"), CustomJsonValue1);
TSharedPtr<FJsonValue> CustomJsonValue2 = MakeShareable(new FJsonValueString("value2"));
AnalyticsAttributes.AddCustomAttribute(TEXT("key2"), CustomJsonValue2);
FHiveAnalytics::SendEventWithAttributes(strEventName, AnalyticsAttributes);
APIリファレンス: Analytics::sendEventWithAttributes
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
// アナリティクス属性を作成
AnalyticsAttributes analyticsAttributes;
// カスタム属性を追加
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
// Create AnalyticsAttributes
val analyticsAttributes = AnalyticsAttributes()
// カスタム属性を追加
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;
// Create AnalyticsAttributes
AnalyticsAttributes analyticsAttributes = new AnalyticsAttributes();
// カスタム属性を追加
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];
[analyticsAttributes addModuleSpecificAttribute: airbridgeSpecific];
[analyticsAttributes addCustomAttribute: @"key1" value: @"value1"];
[analyticsAttributes addCustomAttribute: @"key2" value: @"value2"];
[HIVEAnalytics sendEventWithAttributes: @"クエスト完了" attributes: analyticsAttributes];
APIリファレンス: HIVEAnalytics:sendEventWithAttributes
#import HIVEService
// Create AnalyticsAttributes
let analyticsAttributes = AnalyticsAttributes()
// カスタム属性を追加
analyticsAttributes.addCustomAttribute("key1", value: "value1")
analyticsAttributes.addCustomAttribute("key2", value: "value2")
AnalyticsInterface.sendEventWithAttributes("クエスト完了", attributes: analyticsAttributes)
Airbridgeにセマンティック属性を送信する¶
Airbridgeに追加属性を送信する際、カスタム属性に加えて以下のようなセマンティック属性を追加して送信することができます。
- アクション(Action)、ラベル(Label): Airbridgeレポートでグループバイに利用できる情報を収集します。
- 値(Value): 収益分析に使用される情報を収集します。
- セマンティックアトリビュート(Semantic Attribute): Airbridgeであらかじめ定義されたアトリビュートです。
- あらかじめ定義されたアトリビュート以外のアトリビュート文字列を入力すると、収集されない場合があります。
- セマンティックアトリビュートのデータ形式に合わないデータを持つイベントは収集されません。データ形式は各セマンティックアトリビュートによって異なるため、注意が必要です。
- 文字列のデータ形式を持つセマンティックアトリビュートは最大1024文字まで許可されます。整数または浮動小数点のデータ形式を持つセマンティックアトリビュートは最大64ビットまで許可されます。
APIリファレンス: hive.Analytics.sendEventWithAttributes
using hive;
// Create AnalyticsAttributes
var analyticsAttributes = new AnalyticsAttributes();
// Airbridgeの特定の属性
var airbridgeSpecific = new AirbridgeSpecific();
// アクション
airbridgeSpecific.SetSemanticAction("Tool");
// ラベル
airbridgeSpecific.SetSemanticLabel("Hammer");
// 値
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);
#include "HiveAnalytics.h"
// アナリティクス属性を作成する
FHiveAnalyticsAttributes AnalyticsAttributes;
// Airbridgeの特定属性
FHiveAirbridgeSpecific AirbridgeSpecific;
// アクション
AirbridgeSpecific.SetSemanticAction(TEXT("Tool"));
// ラベル
AirbridgeSpecific.SetSemanticLabel(TEXT("Hammer"));
// 値
AirbridgeSpecific.SetSemanticValue(10.0);
// セマンティック属性
TSharedPtr<FJsonValue> SemanticJsonValue1 = MakeShared<FJsonValueString>(TEXT("Warrior"));
AirbridgeSpecific.AddSemanticAttribute(TEXT("type"), SemanticJsonValue1);
TSharedPtr<FJsonValue> SemanticJsonValue2 = MakeShared<FJsonValueNumber>(20);
AirbridgeSpecific.AddSemanticAttribute(TEXT("score"), SemanticJsonValue2);
// Airbridge特有の属性を追加
AnalyticsAttributes.AddModuleSpecificAttribute(AirbridgeSpecific);
// カスタム属性を追加
TSharedPtr<FJsonValue> CustomJsonValue1 = MakeShareable(new FJsonValueString("value1"));
AnalyticsAttributes.AddCustomAttribute(TEXT("key1"), CustomJsonValue1);
TSharedPtr<FJsonValue> CustomJsonValue2 = MakeShareable(new FJsonValueString("value2"));
AnalyticsAttributes.AddCustomAttribute(TEXT("key2"), CustomJsonValue2);
FHiveAnalytics::SendEventWithAttributes(strEventName, AnalyticsAttributes);
APIリファレンス: Analytics::sendEventWithAttributes
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
// アナリティクス属性を作成
AnalyticsAttributes analyticsAttributes;
// Airbridgeの特定属性
AirbridgeSpecific airbridgeSpecific;
std::string semanticAction = "Tool";
std::string semanticLabel = "Hammer";
double semanticValue = 10.0;
// アクション
airbridgeSpecific.setSemanticAction(semanticAction);
// ラベル
airbridgeSpecific.setSemanticLabel(semanticLabel);
// 値
airbridgeSpecific.setSemanticValue(semanticValue);
// セマンティック属性
airbridgeSpecific.addSemanticAttribute("type", picojson::value("Warrior"));
airbridgeSpecific.addSemanticAttribute("score", picojson::value(20.0f));
// Airbridge特有の属性を追加
analyticsAttributes.addModuleSpecificAttribute(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
// アナリティクス属性を作成
val analyticsAttributes = AnalyticsAttributes()
// Airbridgeの特定属性
val airbridgeSpecific = AirbridgeSpecific().apply {
setSemanticAction("Tool") // アクション
setSemanticLabel("Hammer") // ラベル
setSemanticValue(10.0) // 値
addSemanticAttribute("type", "Warrior") // セマンティック属性
addSemanticAttribute("score", 20.0f) // セマンティック属性
}
// Airbridge特有の属性を追加
analyticsAttributes.addModuleSpecificAttribute(airbridgeSpecific)
// カスタム属性を追加
analyticsAttributes.addCustomAttribute("key1", "value1")
analyticsAttributes.addCustomAttribute("key2", "value2")
Analytics.sendEventWithAttributes("クエスト完了", analyticsAttributes)
APIリファレンス: Analytics.sendEventWithAttributes
import com.hive.Analytics;
import com.hive.analytics.provider.attributes.AirbridgeSpecific;
import com.hive.analytics.provider.attributes.AnalyticsAttributes;
// アナリティクス属性を作成
AnalyticsAttributes analyticsAttributes = new AnalyticsAttributes();
// Airbridgeの特定属性
AirbridgeSpecific airbridgeSpecific = new AirbridgeSpecific();
airbridgeSpecific.setSemanticAction("Tool"); // アクション
airbridgeSpecific.setSemanticLabel("Hammer"); // ラベル
airbridgeSpecific.setSemanticValue(10.0); // 値
airbridgeSpecific.addSemanticAttribute("type", "Warrior"); // セマンティック属性
airbridgeSpecific.addSemanticAttribute("score", 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.0];
[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: @"クエスト完了" attributes: analyticsAttributes];
APIリファレンス: HIVEAnalytics:sendEventWithAttributes
#import HIVEService
// Create 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)
Firebase環境におけるGoogle Adsのデバイス内測定の適用¶
Firebase環境でGoogle Adsによるデバイス上のコンバージョンを測定するには、Firebase Google ODMソリューションを実装する必要があります。このソリューションでは、ユーザーが提供することに同意したメールアドレスまたは電話番号が必要です。このソリューションの実装中に、Firebase Authenticationまたは開発者が導入した別の認証環境が実装されている場合、Hive SDKはメールアドレスを収集せず、認証後に取得したメールアドレスをFirebase APIに直接渡します。
Note
このガイドはiOSアプリ専用です。AndroidアプリはFirebase環境でのデバイス上のコンバージョンを測定するために別のプロセスを必要としません。
実装方法¶
以下のプロセス全体を通じて、ユーザーのデバイスから外部に個人情報が漏れないようにする必要があります。
- Google Firebase ODM Unity Pluginをダウンロードし、Unityプロジェクトに追加します。
- ログイン後にIdPのメールアドレスまたは電話番号を取得するために認証を実装します。
- Firebaseで定義された方法に従って、メールアドレスまたは電話番号を正規化します。
- 正規化されたメールアドレス/電話番号をFirebaseに渡す実装を行います。あるいは、正規化されたメールアドレス/電話番号のハッシュ値をFirebaseに渡す実装を行います。以下のサンプルコードを参照してください。
Note
プラグインAPIは順次呼び出すことができますが、ユーザーごとに一度呼び出された後は、以降の呼び出しは基本的に無視されます。
例のコード¶
以下はUnityプラグインを使用する際の例のコードです。