# Unity Plugin – TopOn

Source: https://tenjin.com/docs/unity-plugin-topon/

NOTE: Please ensure you have the latest TopOn Unity SDK installed (version TopOn_Unity_Release_Android&iOS_5.9.51 or higher)


The Tenjin SDK can listen to TopOn impression level revenue data and send revenue events to Tenjin. This integration sends revenue information for each ad impression served from TopOn. Here are the steps to integrate:


1. Install the TopOn Unity SDK: [https://docs.toponad.com/#/en-us/unity/download/package?id=topon-unity-sdk-integration-tool](<https://docs.toponad.com/#/en-us/unity/download/package?id=topon-unity-sdk-integration-tool>)

2. When initializing the Tenjin SDK, subscribe to TopOn Impressions:


C#

```
var tenjin = Tenjin.getInstance("<SDK_KEY>");
tenjin.Connect();
tenjin.SubscribeTopOnImpressions();
```


Below is an example of TopOn Banner integration and subscribing to impression events.


C#

```
public class TopOnBehavior : MonoBehaviour
{
    void Start()
    {
        InitializeTopOn();
    }
    private void InitializeTopOn()
    {
        var tenjin = Tenjin.getInstance("<YOUR-TENJIN-SDK_KEY>");
        tenjin.Connect();
        tenjin.SubscribeTopOnImpressions();

        AnyThinkAds.Api.ATSDKAPI.setChannel("<YOUR-APP-CHANNEL>");
        AnyThinkAds.Api.ATSDKAPI.setSubChannel("<YOUR-APP-SUB-CHANNEL>");
        AnyThinkAds.Api.ATSDKAPI.setLogDebug(true);
        AnyThinkAds.Api.ATSDKAPI.setGDPRLevel(AnyThinkAds.Api.ATSDKAPI.PERSONALIZED);
        AnyThinkAds.Api.ATSDKAPI.initSDK("<YOUR-APP_ID>", "<SDK_KEY>");
        // Load Banner
        Dictionary<string, object> jsonmap = new Dictionary<string,object>();
#if UNITY_ANDROID && !UNITY_EDITOR
        AnyThinkAds.Api.ATSize bannerSize = new AnyThinkAds.Api.ATSize(320, 50, true);
#elif UNITY_IPHONE && !UNITY_EDITOR
        AnyThinkAds.Api.ATSize bannerSize = new AnyThinkAds.Api.ATSize(320, 50, false);
#else
        AnyThinkAds.Api.ATSize bannerSize = new AnyThinkAds.Api.ATSize(320, 50, false);
#endif
        jsonmap.Add(AnyThinkAds.Api.ATBannerAdLoadingExtra.kATBannerAdLoadingExtraBannerAdSizeStruct, bannerSize);
        AnyThinkAds.Api.ATBannerAd.Instance.loadBannerAd("<YOUR-PLACEMENT-BANNER-AD-ID>", jsonmap);
        // Show Banner
        AnyThinkAds.Api.ATBannerAd.Instance.showBannerAd("<YOUR-PLACEMENT-BANNER-AD-ID>", AnyThinkAds.Api.ATBannerAdLoadingExtra.kATBannerAdShowingPisitionBottom);
        //Ad Impression Data Event
        AnyThinkAds.Api.ATInterstitialAd.Instance.client.onAdShowEvent += (sender, args) => 
        {
            Debug.Log($"!!! Unity got ATInterstitialAd impression data - {args}");
        };
        AnyThinkAds.Api.ATBannerAd.Instance.client.onAdImpressEvent += (sender, args) => 
        {
            Debug.Log($"!!! Unity got ATBannerAd impression data - {args}");
        };
        AnyThinkAds.Api.ATRewardedVideo.Instance.client.onAdVideoStartEvent += (sender, args) => 
        {
            Debug.Log($"!!! Unity got ATRewardedVideo impression data - {args}");
        };
        AnyThinkAds.Api.ATNativeAd.Instance.client.onAdImpressEvent += (sender, args) => 
        {
            Debug.Log($"!!! Unity got ATNativeAd impression data - {args}");
        };
    }

    public void GoBack()
    {
      // Hide banner ad
       AnyThinkAds.Api.ATBannerAd.Instance.hideBannerAd("<YOUR-PLACEMENT-BANNER-AD-ID>");
    }
```


3. [IMPORTANT] If another dependency is already using TopOn Callbacks, the subscribe methods may not work. In this case, you can use the ` TopOnImpressionFromJSON(string json) ` method to manually send each impression with the fields listed in the table below. This requires Tenjin Unity SDK v1.13.1 or above.


Example of TopOn impression level revenue data:


| Parameter | Required? | Example |
| --- | --- | --- |
| adsource_index | No | 0 |
| ad_network_type | No | String |
| is_header_bidding_adsource | No | Int |
| ecpm_precision | No | String |
| adsource_id | No | 5656 |
| ecpm | No | 1 |
| scenario_id | No | String |
| custom_rule | No | String |
| sub_channel | No | testSubChannel |
| publisher_revenue | Yes | 0.001 |
| scenario_reward_name | No | String |
| channel | No | testChannel |
| topon_ad_format | No | String |
| segment_id | No | 0 |
| country | No | DE |
| show_id | No | String |
| scenario_reward_number | No | 0 |
| network_placement_id | No | ca-app-pub-3940256099942544%2F6300978111 |
| topon_placement_id | No | String |
| ecpm_level | No | 1 |
| reward_user_custom_data | No | String |
| network_firm_id | No | 2 |
| currency | No | USD |
| precision | No | String |
