Unity-3DSDKドキュメント
1 はじめに#
1.1. 適用範囲#
TapDB は、ゲーム開発者がゲームに統合できる SDK のセットを提供します。システムはプレーヤーデータを収集して分析し、最後にデータレポートを作成して、ゲーム開発者がプレーヤーの行動を分析し、ゲームを最適化するのに役立ちます。
Unity によって開発されたゲームの場合、Android は 4.0 以降のシステムをサポートし、iOS は 9.0 以降のシステムをサポートします。
1.2. 用語集#
| 名詞 | 意味 |
|---|---|
| アカウント | プレーヤーアカウントに対応して、一意の識別子が必要です。 |
| 機器 | 対応するゲームがインストールされている機器 |
| 有料 | プレイヤーはゲームの仮想コインやゲームの小道具と引き換えに実際の通貨を使用します |
| 下請けチャネル | コードで設定する必要があるゲームインストールパッケージチャネルのソースを識別します |
2. アクセス方法#
2.1. アプリケーション#
TapDB コンソールにゲームを登録し、ゲームに対応する APPID を取得します。これは 16 ビットの文字列です。iOS と Android は同じ APPID を共有できます。
2.2.SDK をプロジェクトにインポートする#
TapDB.unitypackage ファイルを含む最新の SDK を TapDBWeb サイトからダウンロードし、Unity3D コンパイラで[アセット]-> [パッケージのインポート]-> [カスタムパッケージ]を選択し、TapDB.unitypackage ファイルを見つけて、[開く]ボタンをクリックしてインポートします。正常に。その中で、demo.cs はサンプルコードであり、SDK に必要なコードではありません。
2.3.Android#
2.3.1. 許可#
SDK には次の権限が必要です。
| 権限 | 必要ですか | 目的 |
|---|---|---|
| android.permission.INTERNET | はい | ネットワークの使用許可 |
| android.permission.ACCESSNETWORKSTATE | はい | モバイルネットワーク接続ステータスを取得する |
| android.permission.ACCESS_WIFI_STATE | 是 | WIFI |
オプションの権限。追加することを強くお勧めします。SDK が IMEI を取得する場合、この権限が必要です。取得しなくても、関数の通常の使用には影響しません。IMEI は、統計結果をより正確にするためのデータ分析を支援するために使用されます。
| 権限 | 必要ですか | 目的 |
|---|---|---|
| android.permission.READ_PHONE_STATE | いいえ | 電話のステータス情報を取得する |
2.3.2. サードパーティのデバイス ID の説明#
注:デバイス ID を使用すると、データ統計がより正確になります。追加することをお勧めします。TapDBSDK は、OAID のデバイス ID の取得をサポートしています(OAID の SDK を手動で追加する必要があります)。取得したデバイス ID は次のようになります。データ分析を支援し、統計を作成するためにサーバーに報告されます。結果はより正確です。必要がない場合は、この手順をスキップできます
OAIDSDK はデバイス ID を取得します#
TapDB SDK は現在、OAID SDK 1.0.5〜1.0.25 バージョンをサポートしています。アプリケーションが統合されると、自動的に OAID を使用してデバイス ID を取得します。OAID 公式 Web サイトからダウンロードするか、ここからダウンロードできます[1.0.25 ](https://res.xdcdn.net/tapdb/Android/oaid/oaid_sdk_1.0.25.aar)バージョン[他のバージョンが必要な場合は、OAID公式ウェブサイトにアクセスしてダウンロードしてから、OAID SDK をインポートしてください(としてダウンロード aar)アプリケーションプロジェクトの目次へ
AndroidManifest.xml に次の権限を追加します
<!-- 必选权限 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 强烈建议权限 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />注意: SDK はデフォルトで HTTP を使用してデータを送信します。targetSdkVersion> = 28 の場合、AndroidManifest.xml に次の構成を追加する必要があります。
<application...android:usesCleartextTraffic="true".../>2.4.iOS#
2.4.1. 許可#
広告 ID(IDFA)を収集する必要がある場合は、次のインターフェースを呼び出すことができます。初期化前にお電話ください
TapDB.enableAdvertiserIDCollection(true);iOS 14 以降、IDFA を取得するには、個別の権限ステートメントを構成する必要があります、NSUserTrackingUsageDescription と info.plist の説明テキストを構成します。たとえば、xxx が IDFA を取得して使用し、より良いサービスを提供できるようにしてください。
TapDB バージョン 2.2.3 以降、Xcode12.3 以降を使用してください。
| 許可ステートメント | 意味 |
|---|---|
| NSUserTrackingUsageDescription | デバイスアドバタイズ ID を取得してデバイスを追跡するために使用されます |
iOS によってエクスポートされた Xcode プロジェクトには、次の依存フレームワークまたはライブラリを導入する必要があります
2.4.2. システムの依存関係#
Xcode プロジェクトには、次の依存フレームワークまたはライブラリを導入する必要があります
| 名詞 | 意味 | 備考 |
|---|---|---|
| AdSupport.framework | デバイス広告のロゴを取得してデバイスを追跡するために使用されます | |
| AdService.framework | 広告フレームワーク | オプション |
| AppTrackingTransparency.framework | iOS14 の新しいアプリ追跡フレームワーク | オプション |
| SystemConfiguration.framework | ||
| CoreMotion.framework | ||
| Security.framework | より良い永続ストレージのために | |
| libc++.tdb | c++ | |
| libresolv.tbd | ||
| libz.tbd | ||
| libsqlite3.0.tbd |
3. インターフェースの説明#
3.1. 初期化#
統計システム SDK を初期化します。このインターフェースを呼び出すことは、他のインターフェースを使用するための前提条件であり、できるだけ早く呼び出す必要があります。Unity の Start()で呼び出すことをお勧めします。
public static void onStart(string appId, string channel, string gameVersion);public static void onStartWithProperties(string appId, string channel, string gameVersion,Dictionary<string, object> properties)| フィールド | 空にすることができます | 説明 |
|---|---|---|
| appId | いいえ | ゲームの登録時に取得された APPID |
| channel | はい | 下請けチャネル、1.2 で導入されました。 |
| gameVersion | はい | ゲームバージョン。空の場合、ゲームインストールパッケージのバージョンが自動的に取得されます(Android は AndroidManifest.xml の versionName であり、iOS は Xcode 構成のバージョンです) |
| properties | いいえ | 初期化でアップロードされたカスタムプロパティ |
3.2. ログイン#
アカウントを記録し、アカウントがログインしたときに呼び出します。
public static void setUser(string userId)public static void setUserWithProperties(string userId,Dictionary<string, object> properties)| フィールド | 空にすることができます | 説明 |
|---|---|---|
| userId | いいえ | 長さが 0 より大きく 256 以下。数字、大文字と小文字、アンダースコア(_)、ダッシュ(-)、およびユーザー ID のみを含めることができます。異なるアカウントは ID の一意性を確保する必要があります |
| properties | いいえ | カスタムプロパティ |
3.3. アカウント名#
アカウント名を設定します。
public static void setName(string name)| フィールド | 空にすることができます | 説明 |
|---|---|---|
| name | いいえ | 長さが 0 より大きく 256 以下のアカウント名 |
3.4. アカウントレベル#
アカウントレベルを設定します。これは、アカウントがログインしたとき、またはアカウントがアップグレードされたときに呼び出されます。
public static void setLevel(int level)| フィールド | 空にすることができます | 説明 |
|---|---|---|
| level | いいえ | アカウントレベル |
3.5. アカウントサーバー#
アカウントがログインしたとき、またはゾーンサーバーが変更されたときに呼び出されるアカウントゾーンサーバーを設定します。
public static void setServer(string server)| フィールド | 空にすることができます | 説明 |
|---|---|---|
| server | いいえ | アカウントサーバー |
3.6. リチャージ#
再充電が成功したときに呼び出されます
注意:クライアントの動作により、投機家がリチャージをクラックしようとすることは避けられません。サーバーが検証に合格しない場合、データは不正確になります。リチャージデータのコールバックにはサーバーインターフェイスを使用することを強くお勧めします。(4.2。リチャージ
public static void onChargeSuccess(string orderId, string product, Int32 amount, string currencyType, string payment)| フィールド | 空にすることができます | 説明 |
|---|---|---|
| orderId | いいえ | 注文 ID |
| product | はい | 製品名 |
| amount | いいえ | リチャージ金額(単位ポイント、つまり、どの通貨でも、100 を掛ける必要があります) |
| currencyType | はい | 通貨タイプ、参照:人民元 CNY、米ドル USD;ユーロ EUR |
| payment | はい | 次のような支払い方法:Alipay |
3.7. ログアウト#
ログアウトするときは、次のインターフェイスを呼び出してユーザーデータをクリアする必要があります。
public static void clearUser()
3.8. カスタムイベント#
(カスタムイベントを開く必要がある場合は、テクニカルサポート QQ に連絡してください:)
カスタムイベントを送信する必要があるときに呼び出されます。カスタムイベントの eventName とプロパティは、SDK を使用して送信する前に、メタデータ管理で事前に構成する必要があります。
public static void trackEvent(string eventName, Dictionary<string, object> properties)ユーザーは、trackEvent メソッドを呼び出すことにより、追跡する必要のあるカスタムイベントをアップロードできます。eventName は、カスタムイベントのイベント名であり、「#」で始まる必要があります。値のルールについては、カスタム属性登録ページを参照してください。プロパティは、カスタムイベントに含まれるカスタムプロパティです(Key:Value の形式で保存されます)。ここで、Key はカスタムプロパティのプロパティ名を表し、Value はプロパティの値を表します。ここで、Key の命名規則は eventName と同じであり、「#」で始まることを確認する必要があることに注意してください。現在サポートされている値のタイプは、文字列、数値、ブール値です。文字列型は最大 256 の長さをサポートします。数値型の値の範囲は[-9E15、9E15]です。例として戦闘事件を取り上げます。
Dictionary<string, object> properties = new Dictionary<string, object>();properties.Add("#weapon", "axe");TapDB.trackEvent("#battle", properties);| フィールド | 空にすることができます | 説明 |
|---|---|---|
| eventName | いいえ | イベントコード。コントロールのバックグラウンドで事前に構成する必要があります |
| properties | はい | イベントプロパティ、特定のフィールドはコントロールバックグラウンドで事前設定する必要があります |
3.9. イベントの主な操作(アカウント、デバイス)#
TapDB のイベントサブジェクトは、アカウントとデバイスに分けられ、サブジェクトの特定の属性に対する関連操作をサポートします。
デバイス属性の初期化操作#
///デバイス属性操作を初期化します/// @ paramプロパティ属性辞書public static void deviceInitialize(Dictionary<string, object> properties)デバイスの一部のプロパティを初期化する必要がある場合は、deviceInitialize を呼び出して設定できます。対応する属性が以前に初期化されている場合、これらの属性の後続の初期化操作は無視されます。例として、最初のアクティブなサーバーを取り上げます。
Dictionary<string, object> properties = new Dictionary<string, object>();properties.Add("firstActiveServer", "server1");TapDB.deviceInitialize(properties);//現時点では、デバイステーブルの「firstActiveServer」フィールド値は「server1」です。
Dictionary<string, object> properties = new Dictionary<string, object>();properties.Add("firstActiveServer", "server2");TapDB.deviceInitialize(properties);//この時点では、デバイステーブルの「firstActiveServer」フィールド値はまだ「server1」ですデバイス属性の更新操作#
///デバイス属性操作を更新します/// @ paramプロパティ属性辞書public static void deviceUpdate(Dictionary<string, object> properties)デバイスの一部のプロパティを更新する必要がある場合は、deviceUpdate を呼び出して設定できます。このインターフェースを介してアップロードされた属性は、元の属性値を上書きします。例として現在のポイントを取り上げます。
Dictionary<string, object> properties = new Dictionary<string, object>();properties.Add("currentPoints", 10);TapDB.deviceUpdate(properties);//現時点では、デバイステーブルの「currentPoints」フィールド値は10です。
Dictionary<string, object> properties = new Dictionary<string, object>();properties.Add("currentPoints", 42);TapDB.deviceUpdate(properties);//この時点で、デバイステーブルの「currentPoints」フィールド値は42です。デバイス属性の累積演算#
///デバイス属性の蓄積操作/// @paramプロパティ属性ディクショナリは、当面は数値属性のみをサポートしますpublic static void deviceAdd(Dictionary<string, object> properties)Dictionary<string, object> properties = new Dictionary<string, object>();properties.Add("totalPoints", 10);TapDB.deviceInitialize(properties);//この時点で、デバイステーブルの「totalPoints」フィールド値は10です
Dictionary<string, object> properties = new Dictionary<string, object>();properties.Add("totalPoints", -2);TapDB.deviceInitialize(properties);//この時点で、デバイステーブルの「totalPoints」フィールド値は8です。アカウント属性の初期化操作#
///アカウント属性操作を初期化します/// @ paramプロパティ属性辞書public static void userInitialize(Dictionary<string, object> properties)アカウント属性の更新操作#
使用方法は、デバイス属性の更新操作と同じです。
///アカウント属性の更新操作/// @ paramプロパティ属性辞書public static void userUpdate(Dictionary<string, object> properties)アカウント属性の累積操作#
使用方法は、機器属性の累積演算と同じです。
///アカウント属性の累積操作/// @paramプロパティ属性ディクショナリは、当面は数値属性のみをサポートしますpublic static void userAdd(Dictionary<string, object> properties)3.10. 一般的なイベントプロパティを設定する#
各アップロードイベントに表示する必要のあるいくつかの重要な属性について、ユーザーはこれらの属性をグローバルユニバーサルカスタム属性として設定でき、静的ユニバーサル属性は固定値です。これらのユニバーサル属性は、登録後に TapDB にアップロードされます。ここでは、trackEvent で渡される属性優先度>静的一般属性優先度に注意する必要があります。trackEvent の属性は、静的一般属性を同じ名前で上書きします。
静的イベントプロパティを追加する#
///静的イベント属性を追加します。各イベントが送信されます/// @paramstaticProperties属性辞書public static void registerStaticProperties(Dictionary<string, object> properties)Dictionary<string, object> properties = new Dictionary<string, object>();properties.Add("channel", "TapDB");TapDB.registerStaticProperties(properties);//静的プロパティ「channel」が設定され、値は「TapDB」として固定されます
Dictionary<string, object> properties = new Dictionary<string, object>();properties.Add("#customEvent", "axe");TapDB.trackEvent("#custom1", custom);// trackEventメソッドを使用してカスタムイベントをアップロードします。この時点でアップロードされたイベントには、上記のパブリックプロパティ「channel」が設定されており、値は「TapDB」です。追加する必要のある一般プロパティの値がすべてのイベントで比較的固定されている場合は、registerStaticProperties メソッドを呼び出して静的一般プロパティを登録できます。
単一の静的イベント属性を削除します#
追加された静的一般プロパティを削除し、後続のすべてのイベントに表示したくない場合は、unregisterStaticProperty メソッドを呼び出して、不要な静的一般プロパティを削除できます。
///追加された静的イベント属性を削除します/// @parampropertyNameプロパティキーpublic static void unregisterStaticProperty(string propertyName)すべての静的イベント属性を削除します#
///追加された静的イベント属性を削除しますpublic static void clearStaticProperties()4. サーバープッシュインターフェース#
4.1. オンラインの人数#
SDK は正確なオンラインデータをプッシュできないため、サーバー側のオンラインデータプッシュインターフェイスを次に示します。ゲームサーバーは、5 分ごとにオンラインユーザーの数をカウントし、インターフェイスを介して TapDB にプッシュできます。TapDB はデータサマリー表示を行います。
インターフェース:https://se.tapdb.net/tapdb/online方法:POSTフォーマット:json必要なヘッダー情報:Content-Type:application / jsonコンテンツのリクエスト:
| パラメーター名 | パラメーターのタイプ | パラメーターの説明 |
|---|---|---|
| appid | 文字列 | ゲームの APPID |
| onlines | 配列 | 複数のオンラインデータ(最大 100) |
オンラインアレイの構造は次のとおりです。
| パラメーター名 | パラメーターのタイプ | パラメーターの説明 |
|---|---|---|
| server | 文字列 | サーバー。TapDB は、同じサーバーの 5 分ごとに 1 回だけデータを受け入れます |
| online | int | オンラインの人々 |
| timestamp | 長い | 現在の統計のタイムスタンプ(秒単位)。TapDB は自然な 5 分に従ってデータを整列します |
例:
{ "appid": "gkjasd13bbsa1sdk", "onlines": [ { "server": "s1", "online": 123, "timestamp": 1489739590 }, { "server": "s2", "online": 188, "timestamp": 1489739560 } ]}成功の判断:返された HTTP コードが 200 の場合、送信は成功したと見なされ、それ以外の場合は失敗と見なされます。
4.2. リチャージ#
SDK プッシュは不正確である可能性があるため、サーバー側で再充電してプッシュする方法を次に示します。SDK の関連するリチャージプッシュインターフェイスを無視する必要があります。
インターフェース:https://e.tapdb.net/eventコンテンツ(後で処理する必要があることに注意してください):
{ "module": "GameAnalysis",//固定パラメータ "ip": "8.8.8.8",//オプション。トップアップユーザーのIP "name": "charge",//固定パラメータ "index": "APPID",//必須。APPIDをTapDBのappidに置き換える必要があることに注意してください "identify": "userId",//必須。ユーザーID。SDKのsetUserインターフェイスで渡されたuserIdと同じである必要があり、ユーザーはSDKインターフェイスを介してプッシュされています "properties": { "order_id": "100000",//オプション。長さが0より大きく、256以下です。注文ID。注文IDを渡して再重み付けを実行し、複数の計算を防止します "amount": 100, //必須。0より大きく100000000000以下。充電量。単位分、つまり、どの通貨でも、100を掛ける必要があります "virtual_currency_amount": 100、//受け取った仮想通貨の金額は、渡す必要があり、0にすることができます "currency_type": "CNY",//オプション。通貨タイプ。国際的に認められている3文字表記で、空の場合のデフォルトはCNYです。参照:人民元CNY、米ドルUSD、ユーロEUR "product": "item1",//オプション。長さが0より大きく、256以下です。商品名 "payment": "alipay" //オプション。長さが0より大きく、256以下です。チャンネルを充電する }}ゲームの appid が abcd1234 であるとします。json 文字列を作成した後、スペースと改行を削除してから、urlencode を再度実行します。結果を POST データとしてプッシュ まず、改行とスペースを次のように置き換えます。
{"module":"GameAnalysis","name":"charge","index":"abcd1234","identify":"user_id","properties":{"order_id":"100000","amount":100,"virtual_currency_amount":100,"currency_type":"CNY","product":"item1","payment":"alipay"}}
すると、urlencode は次の形式になります。urlencode の一部のバージョンは、 :と 、をエンコードする場合がありますが、実際の使用には影響しません。
%7B%22module%22:%22GameAnalysis%22,%22name%22:%22charge%22,%22index%22:%22abcd1234%22,%22identify%22:%22user_id%22,%22properties%22:%7B%22order_id%22:%22100000%22,%22amount%22:100,%22virtual_currency_amount%22:100,%22currency_type%22:%22CNY%22,%22product%22:%22item1%22,%22payment%22:%22alipay%22%7D%7D
成功の判断:返された HTTP コードが 200 の場合、送信は成功したと見なされ、それ以外の場合は失敗と見なされます。