メインコンテンツまでスキップ

Corona

最終更新 2026/10/03
ヒント

接続する前に、まず接続前の準備をお読みください。

Corona SDKのソースコードはGitHubで入手できます。

Corona SDKはiOS、Androidプラットフォームで動作し、サイズは約0.5Mです

最新バージョン: v2.0.1

更新日: 2023-11-24

リソースのダウンロード: ソースコード、SDKダウンロード

注意

このドキュメントはv2.0.0以降のバージョンに適用されます。以前のバージョンについては、Corona接続ガイド(V1)、SDKダウンロード(v1.0.1)を参照してください

1. SDKの統合​

  • Coronaの設定を追加

    • Corona SDKのリソースファイルをダウンロードして解凍し、TDAnalytics.luaをCoronaディレクトリにコピーします
  • Androidの設定を追加

    • android/ThinkingPluginProxy.javaをandroid/plugin/src/main/java/plugin/libraryディレクトリにコピーします
    • Android StudioでAndroidプロジェクトを開き、表示モードをAndroidに切り替えて、build.gradle (Module :plugin)に依存関係を追加してから、「Sync Now」をクリックして更新します
dependencies {
implementation 'cn.thinkingdata.android:ThinkingAnalyticsSDK:3.0.0'
}
  • plugin.library.LuaLoaderにコードを追加します
ヒント

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 追加コード
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 追加コード
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 追加コード
@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 追加コード
@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ディレクトリにドラッグ&ドロップします
  • プロジェクトのARCサポートを有効にします。TARGETS -> App -> Build Settings -> Objective-C Automatic Reference Countingを順に選択し、YESに設定します
  • 一部のファイルではARCを無効にする必要があります。TARGETS -> App -> Build Phases -> Compile Sources -> ThinkingPluginLibrary.mmを順に選択し、-fno-objc-arcの設定を追加します

2. 初期化​

-- TDAnalyticsをインポート
local TDAnalytics = require("TDAnalytics")

-- TDAnalyticsを初期化
local params = {
appId = "YOUR_APP_ID",
serverUrl = "YOUR_SERVER_URL"
}
TDAnalytics.init(params)

注意:一部のデバイスではデフォルトで平文での通信が禁止されているため、HTTPS形式の受信側URLを使用することを強く推奨します。

3. よく使う機能​

3.1 アカウントIDの設定​

ユーザーがログインする際にloginを呼び出してユーザーのアカウントIDを設定できます。アカウントIDを設定すると、アカウントIDがユーザー識別IDとして使用されます。設定したアカウントIDは、logoutを呼び出すまで保持されます:

-- アカウントIDを設定
TDAnalytics.login("TA")

注意:このメソッドはユーザーのログインイベントを送信しません。

3.2 共通イベントプロパティの設定​

プレイヤーのサーバーやチャネルなど、一部の重要なプロパティはすべてのイベントに設定する必要があります。このような場合は、これらのプロパティを共通イベントプロパティとして設定できます。共通イベントプロパティとは、すべてのイベントに付与されるプロパティのことです。setSuperProperties()を呼び出して共通イベントプロパティを設定できます。イベントを送信する前に、共通イベントプロパティを設定しておくことを推奨します。

-- 共通イベントプロパティを設定
TDAnalytics.setSuperProperties({
channel = "App Store",
trip = {"Car", "Train"}
})

共通イベントプロパティはキャッシュに保存されるため、APPを起動するたびに呼び出す必要はありません。setSuperProperties()を呼び出して設定済みの共通イベントプロパティを送信した場合は、以前のプロパティが上書きされます。共通イベントプロパティとtrack()で送信したあるプロパティのKeyが重複する場合は、そのイベントのプロパティが共通イベントプロパティを上書きします。

3.3 自動収集の有効化​

初期化パラメータを設定することで、自動収集を有効にできます:

-- 自動収集を有効化
-- appInstall=インストールイベントの自動収集を有効化
-- appStart=開始イベントの自動収集を有効化
-- appEnd=終了イベントの自動収集を有効化
local params = {
appId = "YOUR_APP_ID",
serverUrl = "YOUR_SERVER_URL",
autoTrack = {
"appStart", "appEnd", "appInstall"
}
}
TDAnalytics.init( params )

注意:ゲストIDをカスタマイズする必要がある場合は、必ず自動収集機能を有効にする前にidentify()インターフェースを呼び出してゲストIDを設定してください。

3.4 イベントの送信​

事前に整理したドキュメントに従って、イベントのプロパティと送信条件を設定することを推奨します。イベント名はstring型で、英字で始める必要があり、数字、英字、アンダースコア "_" を含めることができます。最大長は50文字で、英字の大文字と小文字は区別されません。

TDAnalytics.track( "product_buy", {
product_name="商品名"
});
  • イベントプロパティはtable型で、各要素が1つのプロパティを表します。
  • イベントプロパティのKeyはプロパティ名で、string型です。英字で始める必要があり、数字、英字、アンダースコア "_" を含めることができます。最大長は50文字で、英字の大文字と小文字は区別されません。
  • プロパティ値には、文字列、数値、bool、Array、オブジェクト、オブジェクトグループの6種類のタイプを使用できます。

複雑なデータタイプとして、プロパティにはオブジェクトとオブジェクトグループを渡すことができます。

3.5 ユーザープロパティの設定​

一般的なユーザープロパティは、userSet()を呼び出して設定できます。このインターフェースで送信したプロパティは、既存のプロパティ値を上書きします。そのユーザープロパティが以前に存在しない場合は、新しく作成されます。

-- ユーザープロパティを設定
TDAnalytics.userSet({
user_name = "TE"
})

プロパティの形式の要件は、イベントプロパティと同じです。

4. ベストプラクティス​

次のサンプルコードには、上記のすべての操作が含まれています。次の手順で使用することをお勧めします:

-- TDAnalyticsをインポート
local TDAnalytics = require("TDAnalytics")

if isPrivacyPolicyAccepted then -- ユーザーがプライバシーポリシーに同意済み
-- SDKを初期化
local params = {
appId = "YOUR_APP_ID",
serverUrl = "YOUR_SERVER_URL"
}
TDAnalytics.init(params)

--ユーザーがログイン済みの場合は、ユーザーのアカウントIDを一意の識別子として設定できます
TDAnalytics.login("TA")

--共通イベントプロパティを設定すると、すべてのイベントに共通イベントプロパティが付与されます
local superProperties = {}
superProperties["channel"] = "ta" -- 文字列
superProperties["age"] = 1 -- 数値
superProperties["isSuccess"] = true -- ブール値
superProperties["birthday"] = os.date("%Y-%m-%d %H:%M:%S") -- 時間
superProperties["object"] = { key="value" } -- オブジェクト
superProperties["object_arr"] = { { key="value" } } -- オブジェクトグループ
superProperties["arr"] = { "value" } -- 配列
TDAnalytics.setSuperProperties(superProperties) -- 共通イベントプロパティを設定

--イベントを送信
TDAnalytics.track("product_buy", {
product_name="商品名"
});

--ユーザープロパティを設定
TDAnalytics.userSet({
user_name = "TE"
})
end
このページは役に立ちましたか?