menu
Is this helpful?

# 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 ディレクトリにドラッグします。
  • 開発者 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"
    })
}