Unity アプリケーションの統合¶
Unity アプリケーションのメトリクスデータを収集し、アプリケーションのパフォーマンスを可視化して分析します。
読み進め方¶
- 初めての統合:まずは クイックスタート をご覧ください。
- 完全な統合:引き続き本記事をお読みください。
- パラメータ詳細:SDK 初期化、RUM 設定、Log 設定、Trace 設定 をご覧ください。
- カスタム機能:カスタムタグの使用、データ収集のカスタムルール、データ収集のマスキング をご覧ください。
- 高度なシナリオ:ネイティブと Unity のハイブリッド開発 をご覧ください。
- トラブルシューティング:障害対応 をご覧ください。
前提条件¶
注意
RUM Headless サービスをすでに有効にしている場合、前提条件は自動で設定されているため、そのままアプリケーションを統合できます。
- DataKit をインストールする。
- RUM コレクター を設定する。
- DataKit をパブリックネットワークからアクセス可能にし、IP 地理情報データベースをインストールする。
アプリケーションの統合¶
- ユーザーアクセス監視 > アプリケーションを作成 > Android/iOS に移動します。
- Unity Android と Unity iOS それぞれにアプリケーションを作成し、Android および iOS プラットフォームからの RUM データを個別に受信できるようにします。
- 各プラットフォームのアプリケーションに対応するアプリケーション名とアプリケーション ID を入力します。
-
アプリケーションの統合方式を選択します:
- パブリックネットワーク DataWay:DataKit コレクターをインストールせずに RUM データを直接受信します。
- ローカル環境へのデプロイ:前提条件を満たした上で RUM データを受信します。
インストール¶
ソースコード:https://github.com/GuanceCloud/datakit-unity
デモ:https://github.com/GuanceCloud/datakit-unity/blob/dev/Assets/Scenes
- 最新の ft-sdk-unity.unitypackage をダウンロードします。
Assets->Import Package->Custom Package...からft-sdk-unity.unitypackageをインポートします。- JSON 解析用のサードパーティライブラリ
"com.unity.nuget.newtonsoft-json"を追加します。これはPackage Manager->Add Package by name ...から行えます。 FTSDK.prefabを最初のシーンページにドラッグ&ドロップし、FTSDK.csの_InitSDKメソッド内で SDK を初期化します。FTViewObserver.prefabを他のシーンページにドラッグ&ドロップし、ページのViewライフサイクルやアプリケーションのスリープ・復帰を監視します。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 プロジェクトのオプションを設定し、プラグインファイルを最終的なアプリケーションバンドルにコピーします。
すでにネイティブ SDK を統合している場合、Android の
gson-2.8.5.jar、ft-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)
コード例¶
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)
コード例¶
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)
コード例¶
高度なシナリオ¶
よくある質問¶
グローバル変数を追加してフィールドの競合を回避する¶
カスタムフィールドと SDK データの競合を避けるため、タグ名には プロジェクトの略称 をプレフィックスとして付けることを推奨します(例:custom_tag_name)。プロジェクト内で使用する key の値はソースコードで確認できます。SDK のグローバル変数において RUM や Log と同じ変数が存在する場合、RUM と Log が SDK のグローバル変数を上書きします。
