tencent cloud

Cloud Log Service

Unityネットワークプローブプラグインの使用説明

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-12 15:13:57
AI翻訳

概要

Tencent Cloud CLSはUnityネットワーク診断SDKプラグインを提供し、UnityプロジェクトでICMP Ping、TCP Ping、HTTP Ping、DNS解決、MTRルート追跡などのさまざまなネットワーク検出操作をサポートします。検出結果は自動的にTencent Cloud CLSプラットフォームに報告され、ネットワーク品質分析と問題調査に役立ちます。
ダウンロードアドレス:こちらをクリックしてUnityネットワーク診断SDKプラグインをダウンロードできます。
サポート対象プラットフォーム:
プラットフォーム
サポート状況
Windows (Standalone)
✅ 対応しています。
Android
✅ 対応しています。
iOS
✅ 対応しています。
Unity Editor
✅ 対応しています(Windows DLLを使用)。

注意事項

初期化順序:最初に Unity_CLS.Initialize() を呼び出して初期化を完了してから、任意の検出操作を実行してください。
コールバックスレッド:検出コールバックは非メインスレッドで実行される可能性があるため、Unityオブジェクトを操作する際はスレッドセーフに注意してください。
メモリ管理:SDK内部はコールバック実行後にコールバック参照を自動的にクリーンアップするため、手動管理は不要です。
ネットワーク権限:Androidプラットフォームでは、INTERNETおよびACCESS_NETWORK_STATE権限が宣言されていることを確認する必要があります。
iOSビルド:Xcodeプロジェクト内のすべての依存Frameworkが正しくリンクされていることを確認してください。
HTTPプローブ:urlパラメータには完全なプロトコルヘッダー(http://またはhttps://)を含める必要があります。
DNSプローブ:domainパラメータにはドメイン名のみを入力し、プロトコルヘッダーを含めないでください。
Credentialセキュリティ:本番環境では、サーバー側からgeoTokenを配布し、クライアント側でのSecretId/SecretKeyのハードコードを避けることを推奨します。

統合ガイド

ステップ1:プラグインのインポート

インポート方法:Unity > Assets > Import Package > Custom Packageでcls.unitypackageを選択します。インポート後のディレクトリ構造は以下の通りです:
Assets/
└── Plugins/
└── Unity_CLS/
├── Unity_CLS.cs # C# 統一インターフェース層
├── Android/
│ └── libs/
│ ├── all-dependencies-1.0.0-shaded.jar #Androidに必要なjava依存関係
│ ├── network-diagnosis-release.aar #ネットワークプローブ依存関係
│ ├── producer-release.aar #ログ報告依存関係
│ └── unity-release.aar #unity連携依存関係
├── Windows/
│ └── cls_network_detect.dll #windowsネットワークプローブ+ログ報告動的ライブラリ
└── iOS/
├── UnityApi.h #iosと連携するためのブリッジコード
├── UnityApi.m
├── TencentCloudLogProducer.framework #cls ios sdkパッケージ
├── FMDB.framework #cls ios sdkに必要な依存関係
├── Protobuf.framework
└── Reachability.framework

ステップ2:マルチプラットフォーム統合

Windows統合時には追加設定は不要です。その他のプラットフォームでは以下の設定が必要です。
Android 設定:
Assets/Plugins/Android/AndroidManifest.xmlに以下の権限が追加されていることを確認してください:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
同時に、<application>タグに平文トラフィックサポート(HTTPプローブ用)を追加することをお勧めします:
<application android:usesCleartextTraffic="true">
iOS 設定:
iOS側は以下のFrameworkに依存しており、これらはプラグインディレクトリに含まれています:
TencentCloudLogProducer.framework:CLS コア SDK。
FMDB.framework:ローカルデータベースサポート。
Protobuf.framework:データシリアル化。
Reachability.framework:ネットワーク状態検出。
注意:
iOSプロジェクトをビルドした後、Xcodeで上記のFrameworkがEmbedded BinariesおよびLinked Frameworks and Librariesに正しくリンクされていることを確認してください。

ステップ3:クイックスタート

統合が完了したら、すぐに使用を開始できます。以下は完全なクイックスタートサンプルコードです。完全なサンプルコードが必要な場合は、完全な使用例を参照してください。
using System.Collections.Generic;
using UnityEngine;
using TencentCloudCLS;

public class NetworkDiagnosisDemo : MonoBehaviour
{
void Start()
{
// 1. SDKを初期化します。
Credential credential = new Credential();
credential.endpoint = "ap-guangzhou.cls.tencentcs.com";
credential.secretId = "お客様の SecretId";
credential.secretKey = "お客様の SecretKey";
credential.geoToken = "お客様の GeoToken";
Unity_CLS.Initialize(credential);
// 2. ユーザーカスタム拡張フィールドを設定します(任意)。
Dictionary<string, string> userCustomField = new Dictionary<string, string>();
userCustomField.Add("app_version", "1.0.0");
userCustomField.Add("user_id", "12345");
Unity_CLS.SetUserCustom(userCustomField);
// 3. TCP Pingプローブを実行します。
TcpPingRequest tcpRequest = new TcpPingRequest();
tcpRequest.target = "www.baidu.com";
tcpRequest.port = 80;
tcpRequest.callback = (response) =>
{
Debug.Log("TCP Ping 結果: " + response);
};
Unity_CLS.TcpPing(tcpRequest);
}
}

APIリファレンス

初期化

SDKを初期化します。この操作は、任意の検出操作を実行する前に呼び出す必要があります。
Unity_CLS.Initialize(Credential credential)
Credential パラメータの説明
フィールド
タイプ
必須
説明
endpoint
string
はい
CLSサービスエンドポイント。例えば「ap-guangzhou.cls.tencentcs.com」です。
secretId
string
はい
TencentCloud APIキーSecretId。取得方法はTencentCloud APIキーを参照してください。
secretKey
string
はい
TencentCloud APIキーSecretKey。取得方法はTencentCloud APIキーを参照してください。
topicId
string
いいえ
CLSログトピックID(geoTokenを使用する場合は省略可能)
geoToken
string
いいえ
ネットワークプローブToken。取得方法はキーの取得を参照してください。
例:
Credential credential = new Credential();
credential.endpoint = "ap-guangzhou.cls.tencentcs.com";
credential.secretId = "お客様の SecretId";
credential.secretKey = "お客様の SecretKey";
credential.geoToken = "お客様の GeoToken";

Unity_CLS.Initialize(credential);

ユーザーカスタム拡張フィールドの設定

グローバルユーザーカスタム拡張フィールドを設定します。設定後、後続のすべてのプローブレポートにこれらのフィールドが含まれます。
Unity_CLS.SetUserCustom(Dictionary<string, string> userCustomField)
例:
Dictionary<string, string> userCustomField = new Dictionary<string, string>();
userCustomField.Add("app_version", "1.0.0");
userCustomField.Add("user_id", "12345");
userCustomField.Add("channel", "official");

Unity_CLS.SetUserCustom(userCustomField);

TCP Pingプローブ

TCP接続を介してターゲットホストの接続性と遅延を検出します。
Unity_CLS.TcpPing(TcpPingRequest request)
TcpPingRequest パラメータの説明:
フィールド
タイプ
デフォルト値
プラットフォーム対応
説明
target
string
""
全プラットフォーム
ターゲットホスト名またはIPアドレス
port
int
-1
全プラットフォーム
ターゲットポート番号
count
int
1
全プラットフォーム
プローブ回数
timeout
int
1000
全プラットフォーム
タイムアウト時間(ミリ秒)
size
int
0
Windows/Android
送信データパケットサイズ(バイト)です。0はデータを送信しないことを表します。
payload
string
null
Windows/Android
ターゲットポートに送信するテストデータの内容
interval
int
300
Windows
プローブ間隔時間(ミリ秒)
enableVerification
int
1
Windows
接続検証を有効にするかどうか
1:有効
0:無効
prefer
int
0
Windows/iOS
IPバージョン優先設定
0:IPv4優先
1:IPv6優先
2:IPv4 only
3:IPv6 only
netId
int
0
Windows
ネットワークカードID
traceId
string
null
全プラットフォーム
トレースID(null可、自動生成)
src
string
null
Windows
ソース識別子
multiplePortsDetect
bool
true
Android
マルチポートプローブを実行するかどうか
enableMultiplePortsDetect
bool
false
iOS
マルチポートプローブを有効にするかどうか
detectCustomField
Dictionary
空の辞書
全プラットフォーム
検出拡張フィールド
callback
callback_response
null
全プラットフォーム
結果コールバック関数
例:
TcpPingRequest request = new TcpPingRequest();
request.target = "www.baidu.com";
request.port = 80;
request.count = 3;
request.timeout = 2000;
request.detectCustomField = new Dictionary<string, string>()
{
{ "scene", "login_page" }
};
request.callback = (response) =>
{
Debug.Log("TCP Ping 結果: " + response);
};

Unity_CLS.TcpPing(request);

ICMP Pingプローブ

ICMPプロトコルを介してターゲットホストの接続性と遅延を検出します。
Unity_CLS.Ping(PingRequest request)
PingRequest パラメータの説明:
フィールド
タイプ
デフォルト値
プラットフォーム対応
説明
target
string
""
全プラットフォーム
ターゲットホスト名またはIPアドレス
count
int
1
全プラットフォーム
プローブ回数
timeout
int
1000
全プラットフォーム
タイムアウト時間(ミリ秒)
packetSize
int
100
Windows/Android
データパケットサイズ(バイト、ICMPヘッダーを含まない)
interval
int
300
Windows/iOS
プローブ間隔時間(ミリ秒)
ttl
int
64
Windows
TTL値
prefer
int
0
Windows/iOS
IPバージョン優先設定
netId
int
0
Windows
ネットワークカードID
traceId
string
null
全プラットフォーム
トレースID
src
string
null
Windows
ソース識別子
multiplePortsDetect
bool
true
Android
マルチポートプローブを実行するかどうか
enableMultiplePortsDetect
bool
false
iOS
マルチポートプローブを有効にするかどうか
detectCustomField
Dictionary
空の辞書
全プラットフォーム
検出拡張フィールド
callback
callback_response
null
全プラットフォーム
結果コールバック関数
例:
PingRequest request = new PingRequest();
request.target = "www.baidu.com";
request.count = 5;
request.timeout = 3000;
request.callback = (response) =>
{
Debug.Log("Ping 結果: " + response);
};

Unity_CLS.Ping(request);

HTTPプローブ

HTTP/HTTPSリクエストを介してターゲットURLの接続性と応答時間を検出します。
Unity_CLS.Http(HttpRequest request)
HttpRequest パラメータの説明:
フィールド
タイプ
デフォルト値
プラットフォーム対応
説明
url
string
""
全プラットフォーム
ターゲットURL(http:// または https:// などのプロトコルヘッダーを含める必要があります)
count
int
1
Android/iOS
プローブ回数
timeout
int
1000
全プラットフォーム
タイムアウト時間(ミリ秒)
interval
int
300
Windows
プローブ間隔時間(ミリ秒)
ip
string
null
Android
指定IPアドレス(nullの場合はDNS解決を使用します)
downloadBytesLimit
int
0
Windows
ダウンロードバイト制限です。0は制限なしを表します。
downloadHeaderOnly
int
0
Windows
ヘッダーのみをダウンロードするかどうか
1:ヘッダーのみ
0:完全なコンテンツ
verifySslCert
int
0
Windows/iOS
SSL証明書を検証するかどうか
1:検証
0:検証しない
size
int
0
Android
送信データパケットサイズ
prefer
int
0
Windows/iOS
IPバージョン優先設定
netId
int
0
Windows
ネットワークカードID
traceId
string
null
全プラットフォーム
トレースID
src
string
null
Windows
ソース識別子
multiplePortsDetect
bool
true
Android
マルチポートプローブを実行するかどうか
enableMultiplePortsDetect
bool
false
iOS
マルチポートプローブを有効にするかどうか
detectCustomField
Dictionary
空の辞書
全プラットフォーム
検出拡張フィールド
callback
callback_response
null
全プラットフォーム
結果コールバック関数
例:
HttpRequest request = new HttpRequest();
request.url = "https://www.baidu.com";
request.timeout = 5000;
request.callback = (response) =>
{
Debug.Log("HTTP プローブ結果: " + response);
};

Unity_CLS.Http(request);

DNS解決プローブ

DNS解決の結果と所要時間を検出します。
Unity_CLS.Dns(DnsRequest request)
DnsRequest パラメータの説明:
フィールド
タイプ
デフォルト値
プラットフォーム対応
説明
domain
string
""
全プラットフォーム
ターゲットドメイン
type
string
null
Windows/Android
DNSクエリタイプ(「A」、「AAAA」など。nullの場合はデフォルトでA)
servers
string
null
全プラットフォーム
DNSサーバーリスト(カンマ区切り、例:「8.8.8.8,8.8.4.4」。nullの場合はシステムデフォルトを使用)
count
int
1
Android
プローブ回数
timeout
int
1000
全プラットフォーム
タイムアウト時間(ミリ秒)
size
int
0
Android
送信データパケットサイズ
prefer
int
0
Windows/iOS
IPバージョン優先設定
traceId
string
null
全プラットフォーム
トレースID
src
string
null
Windows
ソース識別子
multiplePortsDetect
bool
true
Android
マルチポートプローブを実行するかどうか
enableMultiplePortsDetect
bool
false
iOS
マルチポートプローブを有効にするかどうか
detectCustomField
Dictionary
空の辞書
全プラットフォーム
検出拡張フィールド
callback
callback_response
null
全プラットフォーム
結果コールバック関数
例:
DnsRequest request = new DnsRequest();
request.domain = "www.baidu.com";
request.servers = "8.8.8.8";
request.callback = (response) =>
{
Debug.Log("DNS 解析結果: " + response);
};

Unity_CLS.Dns(request);

MTRルートトレース

MTR(My Traceroute)ルート追跡を実行し、ターゲットホストの完全なルートパスと各ホップの遅延を取得します。
Unity_CLS.Mtr(MtrRequest request)
MtrRequest パラメータの説明:
フィールド
タイプ
デフォルト値
プラットフォーム対応
説明
target
string
""
全プラットフォーム
ターゲットホスト名またはIPアドレス
maxTtl
int
30
全プラットフォーム
最大TTL値(最大ホップ数、1~255)
times
int
10
全プラットフォーム
ホップごとのプローブ回数
timeout
int
1000
全プラットフォーム
タイムアウト時間(ミリ秒)
interval
int
300
Windows
検出間隔時間(ミリ秒)
protocol
string
"icmp"
Windows/Android
プロトコルタイプ(「icmp」、「tcp」、「udp」)
destPort
int
0
Windows
ターゲットポート(TCP/UDPプロトコルで使用)
maxPaths
int
1
Windows/Android
最大パス数(1~10)
size
int
0
Android
送信データパケットサイズ
prefer
int
0
Windows/iOS
IPバージョン優先設定
netId
int
0
Windows
ネットワークカードID
traceId
string
null
全プラットフォーム
トレースID
src
string
null
Windows
ソース識別子
multiplePortsDetect
bool
true
Android
マルチポートプローブを実行するかどうか
enableMultiplePortsDetect
bool
false
iOS
マルチポートプローブを有効にするかどうか
detectCustomField
Dictionary
空の辞書
全プラットフォーム
検出拡張フィールド
callback
callback_response
null
全プラットフォーム
結果コールバック関数
例:
MtrRequest request = new MtrRequest();
request.target = "www.baidu.com";
request.maxTtl = 30;
request.times = 5;
request.protocol = "icmp";
request.callback = (response) =>
{
Debug.Log("MTR 結果: " + response);
};

Unity_CLS.Mtr(request);

完全な使用例

以下は、すべてのプローブタイプを含む完全なサンプルスクリプトです。UnityシーンのGameObjectにアタッチできます。
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TencentCloudCLS;

public class NetworkDiagnosisManager : MonoBehaviour
{
void Start()
{
Debug.Log("[NetworkDiagnosis] 初期化を開始します...");
}

/// <summary>
/// SDKを初期化します(すべての検出操作の前に呼び出す必要があります)
/// </summary>
public void Init()
{
Credential credential = new Credential();
credential.endpoint = "ap-guangzhou.cls.tencentcs.com";
credential.secretId = "お客様の SecretId";
credential.secretKey = "お客様の SecretKey";
credential.geoToken = "お客様の GeoToken";

Unity_CLS.Initialize(credential);

// ユーザーカスタム拡張フィールドを設定します。
Dictionary<string, string> userCustomField = new Dictionary<string, string>();
userCustomField.Add("app_version", "1.0.0");
userCustomField.Add("scene", "main_menu");
Unity_CLS.SetUserCustom(userCustomField);

Debug.Log("[NetworkDiagnosis] 初期化が完了しました");
}

/// <summary>
/// TCP Pingプローブを実行します。
/// </summary>
public void DoTcpPing()
{
TcpPingRequest request = new TcpPingRequest();
request.target = "www.baidu.com";
request.port = 80;
request.count = 3;
request.detectCustomField = new Dictionary<string, string>()
{
{ "test_type", "tcp_ping" }
};
request.callback = (response) =>
{
Debug.Log("[TCP Ping] 結果: " + response);
};
Unity_CLS.TcpPing(request);
}

/// <summary>
/// ICMP Pingプローブを実行します。
/// </summary>
public void DoPing()
{
PingRequest request = new PingRequest();
request.target = "www.baidu.com";
request.count = 5;
request.detectCustomField = new Dictionary<string, string>()
{
{ "test_type", "icmp_ping" }
};
request.callback = (response) =>
{
Debug.Log("[Ping] 結果: " + response);
};
Unity_CLS.Ping(request);
}

/// <summary>
/// HTTPプローブを実行します。
/// </summary>
public void DoHttp()
{
HttpRequest request = new HttpRequest();
request.url = "http://www.baidu.com";
request.timeout = 5000;
request.detectCustomField = new Dictionary<string, string>()
{
{ "test_type", "http" }
};
request.callback = (response) =>
{
Debug.Log("[HTTP] 結果: " + response);
};
Unity_CLS.Http(request);
}

/// <summary>
/// DNS解決プローブを実行します。
/// </summary>
public void DoDns()
{
DnsRequest request = new DnsRequest();
request.domain = "www.baidu.com";
request.detectCustomField = new Dictionary<string, string>()
{
{ "test_type", "dns" }
};
request.callback = (response) =>
{
Debug.Log("[DNS] 結果: " + response);
};
Unity_CLS.Dns(request);
}

/// <summary>
/// MTRルート追跡を実行します。
/// </summary>
public void DoMtr()
{
MtrRequest request = new MtrRequest();
request.target = "www.baidu.com";
request.maxTtl = 30;
request.times = 3;
request.detectCustomField = new Dictionary<string, string>()
{
{ "test_type", "mtr" }
};
request.callback = (response) =>
{
Debug.Log("[MTR] 結果: " + response);
};
Unity_CLS.Mtr(request);
}
}

コールバック説明

すべてのプローブメソッドは、callbackコールバックを通じて結果を返します。コールバックシグネチャは以下の通りです:
public delegate void callback_response(string response);
コールバックパラメータresponseはJSON形式の文字列であり、プローブ結果データを含みます。その中には追跡識別に使用されるtraceIdフィールドが含まれます。
注意:
コールバックは非メインスレッドで実行される可能性があります。コールバック内でUnity UIを操作する必要がある場合は、メインスレッドディスパッチメカニズムを使用してください。
各プローブごとに一意のtraceIdが生成され、追跡に使用されます。traceIdの説明は以下の通りです:
request.traceIdが設定されていない場合、SDKは自動的にUUIDを生成し、traceIdとして使用します。
request.traceIdを手動で設定した場合、SDKはその前に短いUUIDプレフィックスを付加します(形式:{自動UUID}-{ユーザーtraceId})。これにより重複を防止します。
コールバックが返すJSONにはtraceIdフィールドが含まれており、CLSコンソールで対応するプローブ記録を検索するために使用できます。

拡張フィールドの説明

SDKは以下の2種類の拡張フィールドをサポートします。

ユーザー拡張フィールド(userCustomField)

Unity_CLS.SetUserCustom()で設定し、グローバルに有効になります。後続のすべてのプローブレポートに含まれます。ユーザーID、アプリバージョンなどのグローバル情報の識別に適しています。
Dictionary<string, string> userCustomField = new Dictionary<string, string>();
userCustomField.Add("user_id", "12345");
userCustomField.Add("app_version", "2.0.0");
Unity_CLS.SetUserCustom(userCustomField);

検出拡張フィールド(detectCustomField)

各RequestオブジェクトのdetectCustomFieldプロパティで設定し、その回のプローブにのみ有効です。プローブシーン、ビジネスTagなどの識別に適しています。
request.detectCustomField = new Dictionary<string, string>()
{
{ "scene", "game_loading" },
{ "server_region", "ap-shanghai" }
};

プラットフォーム差異の説明

パラメータプラットフォーム差異のまとめ

パラメータ
Windows
Android
iOS
interval(プローブ間隔)
✅
❌
部分的な対応
prefer(IPバージョン優先設定)
✅
❌
✅
netId(ネットワークカードID)
✅
❌
❌
src(ソース識別子)
✅
❌
❌
multiplePortsDetect
❌
✅
❌
enableMultiplePortsDetect
❌
❌
✅
enableVerification(TCP)
✅
❌
❌
payload(TCP)
✅
✅
❌
protocol(MTR)
✅
✅
✅

マルチポートプローブ

Android:multiplePortsDetectフィールドで制御され、デフォルトはtrueです。
iOS:enableMultiplePortsDetectフィールドで制御され、デフォルトはfalseです。
Windows:マルチポートプローブはサポートされていません。

基盤実装の差異

プラットフォーム
実現方法
Windows / Editor
DLL(cls_network_detect.dll)P/Invoke を介して C ネイティブライブラリを呼び出します。
Android
AndroidJavaClass を介して Java 層 SDK(AAR パッケージ)を呼び出します。
iOS
DllImport __Internal を介して Objective-C ブリッジ層(UnityApi.m → TencentCloudLogProducer.framework)を呼び出します。







ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック