Impression-Level User Revenue API for MMPs

This API uses a publisher-subscriber architecture in which the MAX SDK broadcasts MAX ad revenue events and MMPs subscribe to the max_revenue_events topic. AppLovin recommends that you subscribe to that topic immediately after your app launches, so that you will not miss events. Each broadcast event includes the following parameters:

Name Description Example
ad_format The ad format of the ad. BANNER, MREC, INTER, REWARDED
country_code The revenue’s country code. US (for the United States)
id Unique internal ID for the serve. 19017d954ffcded6c42772b09ec36699efe0bfc2
max_ad_unit_id The MAX Ad Unit ID. 65d8d0195e50bda6
network_name Display name of the network that showed the ad. AppLovin
revenue A double representing the revenue amount. 0.002067201
third_party_ad_placement_id The ad’s placement ID, if any (bidding may not have one). inter_regular
user_segment The user segment of the user to whom the ad was shown. experiment5

MMPs are responsible for setting the values of the parameters in these broadcast events. If you are not getting data for one or more of these parameters, or if that data is not reliable, work with your MMP to ensure that they are supporting all relevant parameters.

The following example shows how you subscribe to and process the events that the SDK broadcasts.

  • package your.package.name;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    import com.applovin.communicator.AppLovinCommunicator;
    import com.applovin.communicator.AppLovinCommunicatorMessage;
    import com.applovin.communicator.AppLovinCommunicatorSubscriber;
    
    import androidx.annotation.Nullable;
    
    public class ExampleActivity
            extends Activity
            implements AppLovinCommunicatorSubscriber
    {
      @Override
      protected void onCreate(@Nullable final Bundle savedInstanceState)
      {
        super.onCreate( savedInstanceState );
    
        AppLovinCommunicator.getInstance( getApplicationContext() ).subscribe( this, "max_revenue_events" );
      }
    
      @Override
      protected void onDestroy()
      {
        // Unsubscribe when subscription is no longer needed
        AppLovinCommunicator.getInstance( getApplicationContext() ).unsubscribe( this, "max_revenue_events" );
    
        super.onDestroy();
      }
    
      @Override
      public void onMessageReceived(final AppLovinCommunicatorMessage message)
      {
        // If you are subscribed to multiple topics, check for the desired one
        if ( "max_revenue_events".equals( message.getTopic() ) )
        {
          Bundle data = message.getMessageData();
          double revenue = data.getDouble( "revenue" );
    
          // Miscellaneous data
          String countryCode = data.getString( "country_code" ); // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD"
          String networkName = data.getString( "network_name" ); // Display name of the network which showed the ad (e.g. "AdColony")
          String adUnitId = data.getString( "max_ad_unit_id" ); // The MAX Ad Unit ID
          String thirdPartyAdPlacementId = data.getString( "third_party_ad_placement_id" ); // The ad's placement id, if any (bidding may not have one)
          String adFormat = data.getString( "ad_format" ); // The ad format of the ad (e.g. "BANNER", "MREC", "INTER", "REWARDED", "REWARDED_INTER")
          String userSegment = data.getString( "user_segment" ); // The user segment of the user to whom the ad was shown
        }
      }
    
      @Override
      public String getCommunicatorId()
      {
        return "your_company_name_in_snake_case";
      }
    }
  • package your.package.name
    
    import android.app.Activity
    import android.os.Bundle
    import com.applovin.communicator.AppLovinCommunicator
    import com.applovin.communicator.AppLovinCommunicatorMessage
    import com.applovin.communicator.AppLovinCommunicatorSubscriber
    
    class ExampleActivity : Activity(), AppLovinCommunicatorSubscriber
    {
      override fun onCreate(savedInstanceState: Bundle?)
      {
        super.onCreate( savedInstanceState )
    
        AppLovinCommunicator.getInstance( applicationContext ).subscribe( this, "max_revenue_events" )
      }
    
      override fun onDestroy()
      {
        // Unsubscribe when subscription is no longer needed
        AppLovinCommunicator.getInstance( applicationContext ).unsubscribe( this, "max_revenue_events" )
    
        super.onDestroy()
      }
    
      override fun onMessageReceived(message: AppLovinCommunicatorMessage)
      {
        // In the case that you are subscribed to multiple topics, check for the desired one
        if ( "max_revenue_events" == message.topic )
        {
          val data: Bundle = message.messageData
          val revenue = data.getDouble( "revenue" )
    
          // Miscellaneous data
          val countryCode = data.getString( "country_code" ) // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD"
          val networkName = data.getString( "network_name" ) // Display name of the network which showed the ad (e.g. "AdColony")
          val adUnitId = data.getString( "max_ad_unit_id" ) // The MAX Ad Unit ID
          val thirdPartyAdPlacementId = data.getString( "third_party_ad_placement_id" ) // The ad's placement id, if any (bidding may not have one)
          val adFormat = data.getString( "ad_format" ) // The ad format of the ad (e.g. "BANNER", "MREC", "INTER", "REWARDED")
          val userSegment = data.getString( "user_segment" ) // The user segment of the user to whom the ad was shown
        }
      }
    
      override fun getCommunicatorId(): String
      {
        return "your_company_name_in_snake_case"
      }
    }

The value of "revenue" may be -1 in the case of an error.