コンテンツにスキップ

手動イベントトラッキング

インストール、オープン、アップデート、購入(アプリ内購入)を除いて、Hive SDKによって自動的に追跡されるものは、手動で追跡したい必要なイベントを追跡できます。これを行うには、各アトリビューションのダッシュボードにイベントを登録する必要があります。たとえば、ゲームチュートリアルの完了(TutorialComplete)やミッション目標の完了(MissionClear)などの特定のイベントを追跡できます。自動イベント追跡の設定が完了した後に、手動イベント追跡を実装するべきです。

Adjustによる手動イベントトラッキング

  1. カスタムイベントを手動で追跡するには、Adjustダッシュボードでイベントを登録し、アプリトークンとイベントトークンを取得します。アプリトークンはダッシュボードのメインページで取得でき、イベントトークンはダッシュボード > すべての設定 > イベントで取得できます。トークンの取得方法については、Adjustダッシュボードガイドを参照してください。
  2. hive_config.xmlに各イベントのアプリトークンとイベントトークンを追加します。詳細については、以下のサンプルコードを参照してください。
  3. アプリの偽装を防ぐために、AdjustダッシュボードはSDK署名を提供しています。この機能を使用するには、Adjust契約の詳細を確認する必要があります。この機能を使用するには、必要なキーを取得し、hive_config.xmlに追加します(secretIdinfo1info2info3info4)。

    <providers>
    <!-- (スキップされました) -->
    <!-- Adjustノードのidフィールドを設定しないでください。 -->
    <!-- Adjustノードのnameフィールドは「Adjust」に固定されています。 -->
    <!-- イベントノードのnameフィールドはゲームスタジオによって定義されます。しかし、一度設定されると、sendEvent()リクエストのすべての他のマーケティングアトリビューションのnameフィールドと同じである必要があります。-->
    <Adjust name="Adjust" id="unused" key="APP_TOKEN" secretId="1" info1="5432112345" info2="334123" info3="555333" info4="111333">
            <events>
                    <event name="TutorialComplete" value="TutorialComplete_EVENT_TOKEN"/>
                    <event name="MissionClear" value="MissionClear_EVENT_TOKEN"/>
            </events>
    <!-- (スキップされました) -->
    </Adjust>
    </providers>
    
  4. アナリティクスAPI sendEvent() を呼び出してイベントを送信します。イベントを送信する際は、hive_config.xmlで event name を使用してください。name はsendEvent()のリクエストパラメータとして使用され、設定した value は各アトリビューションのダッシュボードに更新されます。

    • Analytics.sendEvent("TutorialComplete");
    • Analytics.sendEvent("MissionClear");

Airbridgeを使用したイベントの手動追跡

  1. 必要なトークンを取得します。トークンの取得方法については、Airbridgeダッシュボードガイドを参照してください。
    • ダッシュボード > 設定 > トークン管理からアプリSDKトークンとアプリ名を取得します。
  2. トークン、アプリ名、およびイベント設定をhive_config.xmlに追加します。以下の hive_config.xmlの例コードを参照してください。Windowsの場合、トークンとアプリ名の設定は必要ありませんが、Hiveコンソールの設定は必要です。
  3. Airbridgeはアプリの偽装を防ぐためにSDK署名を提供しています。関連機能を使用するには、まずAirbridgeとの契約条件を確認する必要があります。キーを取得し、hive_config.xmlにsecretIdsecretの値として追加します。 SDK署名のセキュリティ情報についての詳細は、Airbridgeガイドを参照してください。これはAndroidとiOSのみでサポートされており、Windowsではサポートされていません。
  4. Windows、Android、iOSを同時に適用する場合は、Airbridgeにプリセットについて問い合わせてください。
  5. Analytics API sendEvent()を呼び出してイベントを送信します。イベントを送信する際は、hive_config.xmlに追加されたevent<タグのnamevalueを使用します。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;    

// アナリティクス属性を作成
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("クエスト完了", analyticsAttributes);
#include "HiveAnalytics.h"

// コードの追加が必要です

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 = "Tool";
std::string semanticLabel = "Hammer";
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

// アナリティクス属性を作成
val analyticsAttributes = AnalyticsAttributes()

// Airbridgeの特定のプロパティ
val airbridgeSpecific = AirbridgeSpecific().apply {
    setSemanticAction("Tool")                // 動作
    setSemanticLabel("Hammer")               // レベル
    setSemanticValue(10.0f)                  // 値
    addSemanticAttribute("type", "Warrior")  // 意味属性
    addSemanticAttribute("score", 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 = new AnalyticsAttributes();

// Airbridgeの特定のプロパティ
AirbridgeSpecific airbridgeSpecific = new AirbridgeSpecific();
airbridgeSpecific.setSemanticAction("Tool");                // アクション
airbridgeSpecific.setSemanticLabel("Hammer");               // ラベル
airbridgeSpecific.setSemanticValue(10.0f);                  // 値
airbridgeSpecific.addSemanticAttribute("type", "Warrior");  // セマンティックプロパティ
airbridgeSpecific.addSemanticAttribute("score", 20.0f);     // セマンティックプロパティ

// Airbridge特有の属性を追加
analyticsAttributes.addModuleSpecificAttribute(airbridgeSpecific);

// カスタム属性を追加
analyticsAttributes.addCustomAttribute("key1", "value1");
analyticsAttributes.addCustomAttribute("key2", "value2");

Analytics.sendEventWithAttributes("クエスト完了", 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

// Create AnalyticsAttributes
let analyticsAttributes = AnalyticsAttributes()

// Airbridgeの特定のプロパティ
let airbridgeSpecific = AirbridgeSpecific()
airbridgeSpecific.setSemanticAction("Tool")
airbridgeSpecific.setSemanticLabel("Hammer")
airbridgeSpecific.setSemanticValue(10.0)
airbridgeSpecific.addSemanticAttribute("type", value: "Warrior")
airbridgeSpecific.addSemanticAttribute("score", 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による手動イベントトラッキング

  1. 各アトリビューションダッシュボードから必要なキーを取得します。キーの取得方法については、各アトリビューションダッシュボードのガイドを参照してください。
    • Singular: ダッシュボードからSDKキーとSDKシークレットキーを取得します。
    • Appsflyer: AppsFlyerの設定 > アプリ設定に移動してDevキーを取得します。
    • Firebase Analytics: キーは必要ありません。
  2. 以下のガイドに従ってhive_config.xmlを構成します。詳細については、以下の例コードを参照してください。Hive SDK iOS(ネイティブ、Unity、Unreal)でAppsFlyerアトリビューションを使用する場合は、Apple AppIDのためにitunseConnectAppIdを設定する必要があります。

    <providers>
            <!-- Singular用に設定 -->
            <!-- Singularノードのnameフィールドは「Singular」に固定されています。 -->
            <!-- eventノードのnameフィールドはゲームスタジオによって定義されます。しかし、一度設定されると、sendEvent()リクエストのすべての他のマーケティング帰属のnameフィールドと同じである必要があります。-->
            <!-- eventノードのvalueフィールドはゲームスタジオによって定義されます。 -->
            <Singular name="Singular" id="SDK_KEY" key="SDK_SECRET_KEY">
                    <events>
                            <event name="TutorialComplete" value="チュートリアル完了"/>
                            <event name="MissionClear" value="ミッションクリア"/>
                    </events>
            </Singular>
    
            <!-- AppsFlyerの設定 -->
            <!-- AppsFlyerノードのnameフィールドは「AppsFlyer」に固定されています。 -->
            <!-- AppsFlyerノードのidフィールドは設定しないでください。 -->
            <!-- イベントノードのnameフィールドはゲームスタジオによって定義されます。しかし、一度設定されると、sendEvent()リクエストの他のすべてのマーケティングアトリビューションのnameフィールドと同じである必要があります。-->
            <!-- イベントノードのvalueフィールドはゲームスタジオによって定義されます。 -->
            <AppsFlyer name="AppsFlyer" id="unused" key="DEV_KEY" itunseConnectAppId="909923112">
                    <events>
                            <event name="TutorialComplete" value="Tutorial Complete"/>
                            <event name="MissionClear" value="Mission Clear"/>
                    </events>
            </AppsFlyer>
    
            <!-- Firebase Analyticsの設定 -->
            <!-- イベントノードのnameフィールドはゲームスタジオによって定義されます。しかし、一度設定されると、sendEvent()リクエストの他のすべてのマーケティングアトリビューションのnameフィールドも同じである必要があります。-->
            <!-- イベントノードのvalueフィールドはゲームスタジオによって定義されます。 -->
            <firebase>
                    <events>
                        <event name="TutorialComplete" value="TutorialComplete"/>
                        <event name="MissionClear" value="MissionClear"/>
                    </events>
            </firebase>
    </providers>   
    
  3. アナリティクスAPI sendEvent() を呼び出してイベントを送信します。イベントを送信する際には、hive_config.xmlでevent nameを使用します。nameはsendEvent()のリクエストパラメータとして使用され、設定したvalueは各アトリビューションのダッシュボードに更新されます。

    • Analytics.sendEvent("TutorialComplete");
    • Analytics.sendEvent("MissionClear");

sendEvent() を介してイベントを送信

特定の条件、例えばチュートリアルの完了など、ユーザーの活動が満たされたときのみ、アトリビューションにトラッキングイベントを送信することをお勧めします。トラッキングイベントを送信するには、AnalyticsクラスのsendEvent()メソッドを呼び出します。sendEvent()の最初のパラメータとして、hive_config.xmlファイルで定義されている要素のnameプロパティの値を入力します。

以下は、ユーザーがチュートリアルを完了したことを通知するために、マーケティングアトリビューションにTutorialCompleteイベントを送信するサンプルコードです。

APIリファレンス: hive.Analytics.sendEvent

using hive;    
    String eventName = "TutorialComplete";    
Analytics.sendEvent(eventName);
#include "HiveAnalytics.h"

FString イベント名 = TEXT("TutorialComplete");
FHiveAnalytics::SendEvent(イベント名);

APIリファレンス: Analytics::sendEvent

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    string eventName = "TutorialComplete";    
Analytics::sendEvent(eventName);

APIリファレンス: Analytics.sendEvent

import com.hive.Analytics    
    val eventName = "TutorialComplete"    
Analytics.sendEvent(eventName)

APIリファレンス: AnalyticsInterface .sendEvent

import HIVEService    
    let eventName = "TutorialComplete"    
AnalyticsInterface.sendEvent(eventName)

APIリファレンス: HIVEAnalytics:sendEvent

#import <HIVEService/HIVEService-Swift.h>    
    NSString eventName = @"TutorialComplete";    
[HIVEAnalytics sendEvent: eventName];

APIリファレンス: AnalyticsInterface.sendEvent

#import HIVEService   
    let eventName = "TutorialComplete"
AnalyticsInterface.sendEvent(eventName)

Firebase環境におけるGoogle Adsのデバイス内測定の適用

Firebase環境でGoogle Adsによって提供されるデバイス上のコンバージョンを測定するには、Firebase Google ODMソリューションを実装する必要があります。このソリューションでは、ユーザーが提供することに同意したメールアドレスまたは電話番号が必要です。このソリューションの実装中に、Firebase Authenticationまたは開発者によって導入された別の認証環境が実装されている場合、Hive SDKはメールアドレスを収集せず、認証後に取得したメールアドレスをFirebase APIに直接渡します。

Note

このガイドはiOSアプリ専用です。AndroidアプリはFirebase環境でのデバイス内コンバージョンを測定するために別のプロセスを必要としません。

実装方法

以下のプロセス全体を通じて、ユーザーのデバイスから外部に個人情報が漏れないようにする必要があります。

  1. Google Firebase ODM Unity Pluginをダウンロードし、Unityプロジェクトに追加します。
  2. ログイン後にIdPのメールアドレスまたは電話番号を取得するための認証を実装します。
  3. Firebaseによって定義された方法に従って、メールアドレスまたは電話番号を正規化します。
  4. 正規化されたメールアドレス/電話番号をFirebaseに渡す実装を行います。あるいは、正規化されたメールアドレス/電話番号のハッシュ値をFirebaseに渡す実装を行います。以下の例のコードを参照してください。
Note

プラグインAPIは順次呼び出すことができますが、ユーザーごとに一度呼び出された後は、実質的に後続の呼び出しが無視されます。

例のコード

以下はUnityプラグインを使用する際の例コードです。

ハッシュ値を使用した例のコード

using hive;
// ハッシュ化され正規化されたメールアドレスを送信
GoogleODM.setHashedEmailAddress(ComputeSha256Hash("abc@abc.com"));
using hive;
// ハッシュ化され、正規化された電話番号情報を送信しています
GoogleODM.setHashedPhoneNumber(ComputeSha256Hash("+821012345678"));

プレーン値を使用した例のコード

using hive;
// 正規化されたメールアドレスを送信しています
GoogleODM.setEmailAddress("abc@abc.com");
using hive;
// 正規化された電話番号情報を送信中
GoogleODM.setPhoneNumber("+821012345678");