menu
Is this helpful?

# Unity Push Integration Document

# I. FCM Push

# 1.1 Report "Push ID"

  • Track the FCM Token after calling TE Login or switching accounts
//initialize TE SDK
ThinkingAnalyticsAPI.StartThinkingAnalytics("APP_ID", "SERVER_URL");
//set account ID
ThinkingAnalyticsAPI.Login("ACCOUNT_ID");
//report FCM token to TE system
Firebase.Messaging.FirebaseMessaging.GetTokenAsync().ContinueWith(task => {
    var result = task.Result;
    ThinkingAnalyticsAPI.UserSet(new Dictionary<string, object>() { 
        { "fcm_token", task.Result } 
    });
});
  • When FCM Token changes, update user properties:
private void Start()
{
    // register FCM Token and update delegate event
    Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
    Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token)
{
    //report FCM token to TE system
    ThinkingAnalyticsAPI.UserSet(new Dictionary<string, object>() { 
        { "fcm_token", token.Token } 
    });
}

# 1.2. Acquire Push Click Events

When clicking on the notification, the user can track the push click event and get the push parameters in onCreate or onNewIntent.

private void Start()
{
    // register FCM message delegate event
    Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
{
    // Report push event (see appendix for TETrackMessageReceived)
    this.TETrackMessageReceived(e.Message.Data);
}

# 1.3. Handle Push Messages

private void Start()
{
    // register FCM message delegate event
    Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
{
    // handle push messages (see appendix for TEHandlePushAction)
    this.TEHandlePushAction(e.Message.Data);
}

# II. JPush

WARNING

JPush official website does not provide Unity plugin yet, and you can refer to the open source plugin maintained by URORA: JPush Unity Plugin (opens new window).The following are implemented on the basis of JPush Unity Plugin (opens new window).

# 2.1 Report "Push ID"

  • Track the Registration ID of JPush after calling TE Login or switching accounts.
//initialize TE SDK
ThinkingAnalyticsAPI.StartThinkingAnalytics("APP_ID", "SERVER_URL");
//set account ID
ThinkingAnalyticsAPI.Login("ACCOUNT_ID");
// report JPush Registration ID to TE system
string jiguangId = JPushBinding.GetRegistrationId();
ThinkingAnalyticsAPI.UserSet(new Dictionary<string, object>() { 
    { "jiguang_id", jiguangId } 
});
  • Track the Registration ID of URORA in the OnGetRegistrationId of URORA.
void OnGetRegistrationId(string result)
{
    //report JPush Registration ID to TE system
    ThinkingAnalyticsAPI.UserSet(new Dictionary<string, object>() { 
        { "jiguang_id", jiguangId } 
    });
}

# 2.2. Acquire Push Click Events

void OnReceiveNotification(string jsonStr)
{
    IDictionary<string, object> json = ThinkingAnalytics.Utils.TD_MiniJSON.Deserialize(jsonStr);
    if (json.ContainsKey("extras"))
    {
        object v = json["extras"];
        this.TETrackMessageReceived((IDictionary<string, string>)v);
    }
}

# 2.3 Handle Push Messages

void OnOpenNotification(string jsonStr)
{
    Debug.Log("recv---openNotification---" + jsonStr);
    IDictionary<string, object> json = ThinkingAnalytics.Utils.TD_MiniJSON.Deserialize(jsonStr);
    if (json.ContainsKey("extras"))
    {
        object v = json["extras"];
        this.TEHandlePushAction((IDictionary<string, string>)v);
    }
}

# Appendix

# TETrackMessageReceived

private void TETrackMessageReceived(IDictionary<string, string> data)
{
    //report FCM token to TE system
    Dictionary<string, object> te_extras = ThinkingAnalytics.Utils.TD_MiniJSON.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"]);
    }
    ThinkingAnalytics.ThinkingAnalyticsAPI.Track("ops_push_click", properties);
}

# TEHandlePushAction

private void TEHandlePushAction(IDictionary<string, string> data)
{
    Dictionary<string, object> te_extras = ThinkingAnalytics.Utils.TD_MiniJSON.Deserialize(data["te_extras"]);
    string type = te_extras["ops_loading_type"].ToString();
    if ("OPEN_APP".Equals(type))
    {
        // handle open App message, --> please start App
    }
    else if ("OPEN_URL".Equals(type))
    {
        string url = te_extras["ops_url"].ToString();
        if (!string.IsNullOrEmpty(url))
        {
            // handle open URL message, --> please handle URL
        }
    }
    else if ("CUSTOMIZED".Equals(type))
    {
        string custom = te_extras["ops_customized"].ToString();
        if (!string.IsNullOrEmpty(custom))
        {
            // handle custom message, --> please handle custom message
        }
    }
}