コンテンツにスキップ

Unity アプリケーションの統合


Unity アプリケーションのメトリクスデータを収集し、アプリケーションのパフォーマンスを可視化して分析します。

読み進め方

前提条件

注意

RUM Headless サービスをすでに有効にしている場合、前提条件は自動で設定されているため、そのままアプリケーションを統合できます。

アプリケーションの統合

  1. ユーザーアクセス監視 > アプリケーションを作成 > Android/iOS に移動します。
  2. Unity Android と Unity iOS それぞれにアプリケーションを作成し、Android および iOS プラットフォームからの RUM データを個別に受信できるようにします。
  3. 各プラットフォームのアプリケーションに対応するアプリケーション名とアプリケーション ID を入力します。
  4. アプリケーションの統合方式を選択します:

    • パブリックネットワーク DataWay:DataKit コレクターをインストールせずに RUM データを直接受信します。
    • ローカル環境へのデプロイ:前提条件を満たした上で RUM データを受信します。

インストール

ソースコードhttps://github.com/GuanceCloud/datakit-unity

デモhttps://github.com/GuanceCloud/datakit-unity/blob/dev/Assets/Scenes

  1. 最新の ft-sdk-unity.unitypackage をダウンロードします。
  2. Assets -> Import Package -> Custom Package... から ft-sdk-unity.unitypackage をインポートします。
  3. JSON 解析用のサードパーティライブラリ "com.unity.nuget.newtonsoft-json" を追加します。これは Package Manager -> Add Package by name ... から行えます。
  4. FTSDK.prefab を最初のシーンページにドラッグ&ドロップし、FTSDK.cs_InitSDK メソッド内で SDK を初期化します。
  5. FTViewObserver.prefab を他のシーンページにドラッグ&ドロップし、ページの View ライフサイクルやアプリケーションのスリープ・復帰を監視します。
  6. Application.logMessageReceived を使用して Unity のクラッシュデータと通常のログデータを監視・変換します。サンプルは クイックスタートデータ収集のカスタムルール を参照してください。
Assets/Plugins
├── Android
│   ├── FTUnityBridge.java                // Android ブリッジ
│   ├── InnerClassProxy.java              // Android 内部設定プロキシ
│   ├── ft-sdk-release.aar                // Android SDK
│   ├── gson-2.8.5.jar                    // Android SDK 依存サードパーティライブラリ
├── iOS
│   ├── FTMobileSDK.xcframework           // iOS SDK
│   ├── FTUnityBridge.mm                  // iOS ブリッジ
├── FTSDK.cs                              // FTSDK.prefab にバインドされたスクリプト
├── FTSDK.prefab                          // SDK 初期化プレハブ
├── FTUnityBridge.cs                      // Unity ブリッジ(iOS、Android などのプラットフォームメソッドを橋渡し)
├── FTViewObserver.cs                     // FTViewObserver.prefab にバインドされたスクリプト
├── FTViewObserver.prefab                 // View ページ監視プレハブ
├── UnityMainThreadDispatcher.cs          // UnityMainThreadDispatcher.prefab にバインドされたスクリプト
├── UnityMainThreadDispatcher.prefab      // メインスレッド消費キュー用プレハブ
  • ネイティブの Android および iOS プロジェクトにすでにネイティブ SDK が統合されている場合は、_InitSDK メソッドをコメントアウトして重複設定を避けてください。詳細なシナリオは ネイティブと Unity のハイブリッド開発 を参照してください。
  • iOS プラグインインスペクターの設定FTMobileSDK.xcframework は動的ライブラリであるため、Add to Embedded Binaries にチェックを入れてください。このオプションを選択すると、Unity が Xcode プロジェクトのオプションを設定し、プラグインファイルを最終的なアプリケーションバンドルにコピーします。

unity_ios_plugin_embedded

すでにネイティブ SDK を統合している場合、Android の gson-2.8.5.jarft-sdk-release.aar、および iOS の FTMobileSDK.framework は Unity プロジェクトから削除しても問題ありません。
Android の OkHttp リクエストと起動時間の計測機能は ft-plugin と併用する必要があります。詳細な設定は Android SDK を参照してください。

初期化について

最小限の初期化サンプルは クイックスタート をご覧ください。

完全な SDKConfig パラメーターの説明は SDK 初期化 をご覧ください。

詳細設定の入り口

データ収集のカスタムルール

Unity SDK では、現在主に手動メソッド呼び出しによってカスタム RUM データ収集を実装します。

Action

使用方法

/// <summary>
/// Action を追加
/// </summary>
/// <param name="actionName">アクション名</param>
/// <param name="actionType">アクションタイプ</param>
public static void StartAction(string actionName, string actionType)

/// <summary>
/// Action を追加
/// </summary>
/// <param name="actionName">アクション名</param>
/// <param name="actionType">アクションタイプ</param>
/// <param name="property">追加プロパティ</param>
public static void StartAction(string actionName, string actionType, Dictionary<string, object> property)

/// <summary>
/// Action を追加
/// </summary>
/// <param name="actionName">アクション名</param>
/// <param name="actionType">アクションタイプ</param>
public static void AddAction(string actionName, string actionType)

/// <summary>
/// Action を追加
/// </summary>
/// <param name="actionName">アクション名</param>
/// <param name="actionType">アクションタイプ</param>
/// <param name="property">追加プロパティ</param>
public static void AddAction(string actionName, string actionType, Dictionary<string, object> property)

コード例

FTUnityBridge.StartAction("click", "test");

View

使用方法

/// <summary>
/// View 開始
/// </summary>
/// <param name="viewName">現在のページ名</param>
public static void StartView(string viewName)

/// <summary>
/// View 開始
/// </summary>
/// <param name="viewName">現在のページ名</param>
/// <param name="property">追加プロパティ</param>
public static void StartView(string viewName, Dictionary<string, object> property)

/// <summary>
/// View 終了
/// </summary>
public static void StopView()

/// <summary>
/// View 終了
/// </summary>
/// <param name="property">追加プロパティ</param>
public static void StopView(Dictionary<string, object> property)

コード例

FTUnityBridge.StartView("TEST_VIEW_ONE");

FTUnityBridge.StopView();

Resource

使用方法

/// <summary>
/// リソース開始
/// </summary>
/// <param name="resourceId">リソース ID</param>
public static async Task StartResource(string resourceId)

/// <summary>
/// リソース開始
/// </summary>
/// <param name="resourceId">リソース ID</param>
/// <param name="property">追加プロパティ</param>
public static async Task StartResource(string resourceId, Dictionary<string, object> property)

/// <summary>
/// リソース終了
/// </summary>
/// <param name="resourceId">リソース ID</param>
public static async Task StopResource(string resourceId)

/// <summary>
/// リソース終了
/// </summary>
/// <param name="resourceId">リソース ID</param>
/// <param name="property">追加プロパティ</param>
public static async Task StopResource(string resourceId, Dictionary<string, object> property)

/// <summary>
/// ネットワーク転送コンテンツとメトリクスを追加
/// </summary>
/// <param name="resourceId">リソース ID</param>
/// <param name="resourceParams">データ転送コンテンツ</param>
public static async Task AddResource(string resourceId, ResourceParams resourceParams)

ResourceParams

メソッド名 必須 説明
url string はい URL アドレス
requestHeader string いいえ リクエストヘッダー。形式に制限はありません
responseHeader string いいえ レスポンスヘッダー。形式に制限はありません
responseConnection string いいえ レスポンスの connection
responseContentType string いいえ レスポンスの ContentType
responseContentEncoding string いいえ レスポンスの ContentEncoding
resourceMethod string いいえ リクエストメソッド(GET、POST など)
responseBody string いいえ レスポンスボディの内容

コード例

FTUnityBridge.StartResource(resourceId);

FTUnityBridge.StopResource(resourceId);

ResourceParams resourceParams = new ResourceParams();
resourceParams.url = url;
resourceParams.requestHeader = client.DefaultRequestHeaders.ToDictionary(header => header.Key, header => string.Join(",", header.Value));
resourceParams.responseHeader = response.Headers.ToDictionary(header => header.Key, header => string.Join(",", header.Value));
resourceParams.resourceStatus = (int)response.StatusCode;
resourceParams.responseBody = responseData;
resourceParams.resourceMethod = "GET";

FTUnityBridge.AddResource(resourceId, resourceParams);

Error

使用方法

/// <summary>
/// エラー情報を追加
/// </summary>
/// <param name="log">ログ</param>
/// <param name="message">メッセージ</param>
public static async Task AddError(string log, string message)

/// <summary>
/// エラー情報を追加
/// </summary>
/// <param name="log">ログ</param>
/// <param name="message">メッセージ</param>
/// <param name="property">追加プロパティ</param>
public static async Task AddError(string log, string message, Dictionary<string, object> property)

コード例

void OnEnable()
{
    Application.logMessageReceived += LogCallBack;
}

void OnDisable()
{
    Application.logMessageReceived -= LogCallBack;
}

void LogCallBack(string condition, string stackTrace, LogType type)
{
    if (type == LogType.Exception)
    {
        FTUnityBridge.AddError(stackTrace, condition);
    }
}

LongTask

使用方法

/// <summary>
/// 長時間タスクを追加
/// </summary>
/// <param name="log">ログ内容</param>
/// <param name="duration">持続時間(ナノ秒)</param>
public static async Task AddLongTask(string log, long duration)

/// <summary>
/// 長時間タスクを追加
/// </summary>
/// <param name="log">ログ内容</param>
/// <param name="duration">持続時間(ナノ秒)</param>
/// <param name="property">追加プロパティ</param>
public static async Task AddLongTask(string log, long duration, Dictionary<string, object> property)

コード例

FTUnityBridge.AddLongTask("long task test", 100002);

高度なシナリオ

よくある質問

グローバル変数を追加してフィールドの競合を回避する

カスタムフィールドと SDK データの競合を避けるため、タグ名には プロジェクトの略称 をプレフィックスとして付けることを推奨します(例:custom_tag_name)。プロジェクト内で使用する key の値はソースコードで確認できます。SDK のグローバル変数において RUM や Log と同じ変数が存在する場合、RUM と Log が SDK のグローバル変数を上書きします。

その他

フィードバック

このページは役に立ちましたか?