integrationlatestデータ連携 / Unityメッセージプッシュ統合ドキュメント
Unityメッセージプッシュ統合ドキュメント
1. FCMプッシュ
1.1 「プッシュID」の送信
- AEのLoginを呼び出した後、またはアカウントを切り替えた後に、FCMのTokenを送信します。
//AE SDKの初期化
TDAnalytics.Init("APPID", "SERVER");
//アカウントIDを設定
TDAnalytics.Login("ACCOUNT_ID");
//FCM tokenをAEシステムに送信
Firebase.Messaging.FirebaseMessaging.GetTokenAsync().ContinueWith(task => {
var result = task.Result;
//メインスレッドに切り替えて送信する必要があります。UnityMainThreadDispatcherは付録を参照してください
UnityMainThreadDispatcher.Instance.Enqueue(() =>
{
//FCM tokenをAEシステムに送信
TDAnalytics.UserSet(new Dictionary<string, object>() {
{ "fcm_token", task.Result }
});
});
});
- FCM Tokenが変更されたときに、ユーザープロパティを更新します:
private void Start()
{
// FCM Token 更新のデリゲートイベントを登録
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}
public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token)
{
//FCM token を AE システムに送信
TDAnalytics.UserSet(new Dictionary<string, object>() {
{ "fcm_token", token.Token }
});
}
1.2 プッシュクリックイベントの収集
ユーザーが通知をクリックしたときに、プッシュクリックイベントを送信します。プッシュパラメータはFCMのOnMessageReceivedコールバックで取得できます。
private void Start()
{
// FCM メッセージのデリゲートイベントを登録
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}
public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
{
// プッシュイベントの送信 (TETrackMessageReceivedは付録を参照)
if (e.Message.Data.ContainsKey("te_extras"))
{
this.TETrackMessageReceived(e.Message.Data);
}
}
1.3 プッシュメッセージの処理
次の2つの方式のいずれかを選択することをお勧めします。
- 通常パラメータ:TEHandlePushActionメソッドを呼び出します。
- パススルーパラメータ:TEHandlePassThroughActionメソッドを呼び出します。
private void Start()
{
// FCM メッセージのデリゲートイベントを登録
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}
public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
{
//通常パラメータを処理する場合は、次のメソッドを呼び出します (TEHandlePushActionは付録を参照)
this.TEHandlePushAction(e.Message.Data);
//パススルーパラメータを処理する場合は、次のメソッドを呼び出します
this.TEHandlePassThroughAction(e.Message.Data);
}
2. JPushプッシュ
ヒント
JPushの公式サイトでは現在Unityプラグインを提供していないため、JPushがメンテナンスしているオープンソースプラグインJPush Unity Pluginを参考にしてください。以下の内容はすべてJPush Unity Pluginをベースに実装しています。
2.1 「プッシュID」の送信
- AEのLoginを呼び出した後、またはアカウントを切り替えた後に、JPushのRegistration IDを送信します。
//AE SDKの初期化
TDAnalytics.Init("APPID", "SERVER");
//アカウントIDを設定
TDAnalytics.Login("ACCOUNT_ID");
//JPush Registration IDをAEシステムに送信
string jiguangId = JPushBinding.GetRegistrationId();
TDAnalytics.UserSet(new Dictionary<string, object>() {
{ "jiguang_id", jiguangId }
});
- JPushのOnGetRegistrationIdインターフェースで、JPushのRegistration IDを送信します。
void OnGetRegistrationId(string result)
{
//JPush Registration ID を AE システムに送信
TDAnalytics.UserSet(new Dictionary<string, object>() {
{ "jiguang_id", result }
});
}
2.2 プッシュクリックイベントの収集
void OnOpenNotification(string jsonStr)
{
IDictionary<string, object> json = ThinkingData.Analytics.Utils.TDMiniJson.Deserialize(jsonStr);
if (json.ContainsKey("te_extras"))
{
object v = json["te_extras"];
this.TETrackMessageReceived((IDictionary<string, string>)v);
}
}
2.3 プッシュメッセージの処理
次の2つの方式のいずれかを選択することをお勧めします。
- 通常パラメータ:TEHandlePushActionメソッドを呼び出します。
- パススルーパラメータ:TEHandlePassThroughActionメソッドを呼び出します。
void OnOpenNotification(string jsonStr)
{
Debug.Log("recv---openNotification---" + jsonStr);
IDictionary<string, object> json = ThinkingData.Analytics.Utils.TDMiniJson.Deserialize(jsonStr);
if (json.ContainsKey("extras"))
{
object v = json["extras"];
//通常パラメータを処理する場合は、次のメソッドを呼び出します
this.TEHandlePushAction((IDictionary<string, string>)v);
//パススルーパラメータを処理する場合は、次のメソッドを呼び出します
this.TEHandlePassThroughAction((IDictionary<string, string>)v);
}
}
付録
クライアントが受信するプッシュパラメータの例
以下は、クライアントが受信する拡張フィールドのパラメータのみを示しています
{
"te_extras": {
//プッシュクリック時の遷移方式
"ops_loading_type": "OPEN_APP",
//パススルーパラメータ
"passthrough_params": {
"param1": "abc",
"param2": 101,
"param3": [{
"subText1": "xyz",
"subText2": 2
}]
},
//AE運用チャネルのレシートプロパティ
"#ops_receipt_properties": {
"ops_task_id": "0082",
"ops_project_id": 1,
"ops_task_instance_id": "0082_20230331",
"ops_push_language": "default",
"ops_task_exec_detail_id": "55"
}
}
}
TETrackMessageReceived
private void TETrackMessageReceived(IDictionary<string, string> data)
{
//FCM messageイベントをAEシステムに送信
Dictionary<string, object> te_extras = ThinkingData.Analytics.Utils.TDMiniJson.Deserialize(data["te_extras"]);
Dictionary<string, object> properties = new Dictionary<string, object>();
if (te_extras.ContainsKey("#ops_receipt_properties"))
{
properties.Add("#ops_receipt_properties", te_extras["#ops_receipt_properties"]);
}
TDAnalytics.Track("te_ops_push_click", properties);
TDAnalytics.Flush();
}
TEHandlePushAction
private void TEHandlePushAction(IDictionary<string, string> data)
{
Dictionary<string, object> te_extras = ThinkingData.Analytics.Utils.TDMiniJson.Deserialize(data["te_extras"]);
string type = te_extras["ops_loading_type"].ToString();
if ("OPEN_APP".Equals(type))
{
// App を開くメッセージの処理、--> App を起動してください
}
else if ("OPEN_URL".Equals(type))
{
string url = te_extras["ops_url"].ToString();
if (!string.IsNullOrEmpty(url))
{
// URL を開くメッセージの処理、--> URL を処理してください
}
}
else if ("CUSTOMIZED".Equals(type))
{
string custom = te_extras["ops_customized"].ToString();
if (!string.IsNullOrEmpty(custom))
{
// カスタムメッセージの処理、--> カスタムメッセージを処理してください
}
}
}
TEHandlePassThroughAction
private void TEHandlePassThroughAction(IDictionary<string, string> data)
{
Dictionary<string, object> te_extras = ThinkingData.Analytics.Utils.TDMiniJson.Deserialize(data["te_extras"]);
string passThroughParams = te_extras["passthrough_params"].ToString();
//passThroughParamsはパススルーパラメータです。この後に具体的な業務ロジックを実装します
}
UnityMainThreadDispatcher
public class UnityMainThreadDispatcher : MonoBehaviour
{
private static readonly Queue<Action> _executionQueue = new Queue<Action>();
public static UnityMainThreadDispatcher Instance { get; private set; }
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(this.gameObject);
}
else
{
Destroy(gameObject);
}
}
public void Update()
{
lock (_executionQueue)
{
while (_executionQueue.Count > 0)
{
_executionQueue.Dequeue().Invoke();
}
}
}
public void Enqueue(IEnumerator action)
{
lock (_executionQueue)
{
_executionQueue.Enqueue(() => { StartCoroutine(action); });
}
}
public void Enqueue(Action action)
{
Enqueue(ActionWrapper(action));
}
IEnumerator ActionWrapper(Action a)
{
a();
yield return null;
}
}
このページは役に立ちましたか?

