# Corona
TIP
実装する前にデータアクセスの準備を確認しておいてください。
Corona SDK は iOS、Android に対応しており、サイズは約 0.5Mとなります。
:::
最新バージョン: v2.0.1
更新時間: 2023-11-24
ソースコード: Source Code (opens new window)SDKダウンロード (opens new window)
# SDK実装
- Corona 構成追加
- Corona SDK (opens new window)リソース ファイルをダウンロードし、ファイルを解凍して、TDAnalytics.lua を Corona ディレクトリにコピーします
- Android 構成追加
- android/ThinkingPluginProxy.java を android/plugin/src/main/java/plugin/library ディレクトリにコピーします
- Android Studio を使用して Android プロジェクトを開き、表示モードを Android に切り替え、build.gradle に依存関係を追加し、[今すぐ同期] をクリックして更新します
dependencies {
implementation 'cn.thinkingdata.android:ThinkingAnalyticsSDK:3.0.0'
}
- plugin.library.LuaLoader にコードを追加
WARNING
plugin.library.LuaLoader で関数を拡張しない場合は、android/LuaLoader.java を android/plugin/src/main/java/plugin/library ディレクトリに直接コピーして、元の LuaLoader.java ファイルを上書きできます。
public int invoke(LuaState L) {
NamedJavaFunction[] luaFunctions = new NamedJavaFunction[] {
...
// ThinkingAnalyticsSDK: add code
new ThinkingBridgingWrapper(),
...
};
String libName = L.toString( 1 );
L.register(libName, luaFunctions);
return 1;
}
public void dispatchEvent(final String message) {
CoronaEnvironment.getCoronaActivity().getRuntimeTaskDispatcher().send( new CoronaRuntimeTask() {
@Override
public void executeUsing(CoronaRuntime runtime) {
LuaState L = runtime.getLuaState();
CoronaLua.newEvent( L, EVENT_NAME );
...
// ThinkingAnalyticsSDK: add code
JSONObject jsonObject = null;
String newMessage = null;
String type = null;
try {
jsonObject = new JSONObject(message);
newMessage = jsonObject.optString("message");
type = jsonObject.optString("type");
} catch (Exception ignored) {
}
if (!TextUtils.isEmpty(newMessage) && !TextUtils.isEmpty(type)) {
L.pushString(newMessage);
L.setField(-2, "message");
L.pushString(type);
L.setField(-2, "type");
} else {
L.pushString(message);
L.setField(-2, "message");
}
...
try {
CoronaLua.dispatchEvent( L, fListener, 0 );
} catch (Exception ignored) {
}
}
} );
}
...
// ThinkingAnalyticsSDK: add code
@SuppressWarnings({"WeakerAccess", "SameReturnValue"})
public int thinkingBridging(LuaState L) {
CoronaActivity activity = CoronaEnvironment.getCoronaActivity();
if (activity == null) {
return 0;
}
String word = L.checkString( 1 );
JSONObject params = null;
try {
params = new JSONObject(word);
} catch (JSONException e) {
params = new JSONObject();
}
String method = params.optString("method");
if (method.length() > 0) {
try {
Class aClass = Class.forName("plugin.library.ThinkingPluginProxy");
Method aMethod = aClass.getDeclaredMethod(method, JSONObject.class);
JSONObject jsonObject = (JSONObject) aMethod.invoke(aClass, params);
if (jsonObject != null && jsonObject.getClass() == JSONObject.class && jsonObject.has("message")) {
(new Thread() {
@Override
public void run() {
dispatchEvent(jsonObject.toString());
}
}).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}
...
...
// ThinkingAnalyticsSDK: add code
@SuppressWarnings("unused")
private class ThinkingBridgingWrapper implements NamedJavaFunction {
@Override
public String getName() {
return "thinkingBridging";
}
@Override
public int invoke(LuaState L) {
return thinkingBridging(L);
}
}
...
iOS 構成追加
- Xcode を使用して ios プロジェクトを開き、ios ディレクトリの ThinkingAnalyticsSDK フォルダーを App ディレクトリにドラッグします。
- Xcode を使用して ios プロジェクトを開き、ios ディレクトリの ThinkingAnalyticsSDK フォルダーを App ディレクトリにドラッグします。
開発者 ARC サポート、次の選択で TARGETS -> App -> Build Settings -> Objective-C Automatic Reference Counting,および YES に設定
TARGETS -> App -> Build Phases -> Compile Sources -> ThinkingPluginLibrary.mm,追加設定 -fno-objc-arc
# 初期設定
-- import TDAnalytics
local TDAnalytics = require("TDAnalytics")
-- initialize TDAnalytics
local params = {
appId = "YOUR_APP_ID",
serverUrl = "YOUR_SERVER_URL"
}
TDAnalytics.shareInstance(params)
注: 一部のデバイスでは、デフォルトで平文の送信が禁止されているため、HTTPS 形式の受信側アドレスを使用することを強くお勧めします。
# メイン機能
# 3.1 アカウントIDを設置
ユーザーがログインする時に、login
を呼び出して、ユーザーのアカウントIDを設定できます。TEプラットフォームはアカウントIDを身分識別IDとしてlogout
を呼び出しする前までに保留します。login
を数回呼び出すと、前のアカウントIDが上書きされます。
-- The login unique identifier of the user, corresponding to the #account_id in data tracking. #Account_id now is TE
TDAnalytics.login("TE")
この方法ではログインイベントを送信されません
# 3.2 共通イベントプロパティ設定
共通イベントプロパティは全てのイベントに含まれるプロパティとなります。setSuperProperties
を呼び出しして設定することできます。イベント送信する前に、共通イベントプロパティを設定しておいてください。
例えば:プレイヤーのレベル、戦闘力、所持資源などのプロパティ
-- set super properties
TDAnalytics.setSuperProperties({
channel = "App Store",
trip = {"Car", "Train"}
})
共通イベントプロパティはキャッシュに保存されるため、アプリを起動するたびに呼び出す必要はありません。 setSuperProperties()
を呼び出して、以前に設定された共通イベントプロパティをアップロードすると、以前のプロパティは上書きされます。共通イベントプロパティが track()
によってアップロードされたプロパティのキーと同じである場合、イベントのプロパティは共通イベントプロパティを上書きされます。
# 3.3 自動集取イベントを有効化
構成の初期化パラメータを呼び出すことで有効できます。
-- enable auto-tracking
-- appInstall=enable auto-track APP installation
-- appStart=enable auto-track open APP
-- appEnd=enable auto-track close APP
local params = {
appId = "YOUR_APP_ID",
serverUrl = "YOUR_SERVER_URL",
autoTrack = {
"appStart", "appEnd", "appInstall"
}
}
TDAnalytics.shareInstance( params )
注: ゲストID をカスタマイズする必要がある場合は、自動集取機能を有効にする前に、
identify()
インターフェイスを呼び出してゲストID を設定してください。
# 3.4 イベント送信
事前に整理したデータプランに従って、イベントのプロパティと情報を送信するための条件を設定することをお勧めします。イベント名は、文字でのみ開始できる文字列型で、数字、文字、および" _ "を含めることができ、最大長は 50 文字で、大文字と小文字は区別されません。
TDAnalytics.track("product_buy", {product_name="product name"});
- イベントプロパティは
table
タイプで、エレメントごとでプロパティを示します - イベントプロパティKey は、文字列型の名称です。文字でのみ開始でき、数字、文字、および "_" を含めることができ、最大長は 50 文字であることが規定されています。
- プロパティ値に対応できるタイプ:文字列、数値、bool、Array、オブジェクト、オブジェクトグループ。複雑データタイプは、オブジェクトとオブジェクトグループで格納できます。
# 3.5 ユーザープロパティ設定
一般のユーザープロパティに関しては、userSet()
を利用して設定することができますが、 UserSet
は元の値を上書きされます。本来該当プロパティに値がない場合は、プロパティが新規作成されます。以下はコード例となります。
-- set user properties
TDAnalytics.userSet({user_name = "TE"})
プロパティ形式の要件は、イベントプロパティと一致しています。
# コード例のまとめ
以下のコード例で全ての操作が含まれます、以下の順で利用推奨しております:以下示例代码包含以上所有操作,我们推荐按照如下步骤使用:
-- import TDAnalytics
local TDAnalytics = require("TDAnalytics")
if (privacy policy is authorized) {
-- initialize SDK
local params = {
appId = "YOUR_APP_ID",
serverUrl = "YOUR_SERVER_URL"
}
TDAnalytics.init(params)
-- if the user has logged in, the account ID of the user could be set as the unique identifier
TDAnalytics.login("TE")
-- After setting super properties, each event would have super properties
local superProperties = {}
superProperties["channel"] = "TE" -- string
superProperties["age"] = 1 -- number
superProperties["isSuccess"] = true -- boolean
superProperties["birthday"] = os.date("%Y-%m-%d %H:%M:%S") -- time
superProperties["object"] = { key="value" } -- object
superProperties["object_arr"] = { { key="value" } } -- array object
superProperties["arr"] = { "value" } -- array
ThTDAnalytics.setSuperProperties(superProperties) -- set super properties
-- enable auto-tracking
TDAnalytics.track("product_buy", {
product_name="book"
-- set user properties
TDAnalytics.userSet({
user_name = "TE"
})
}