This API uses a publisher-subscriber architecture.
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.
This way, 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 that represents 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 who was shown the ad. | experiment5 |
MMPs are responsible for setting the values of these parameters. If you do not get data for one or more of these parameters, or if that data is not reliable, work with your MMP to ensure that they support all relevant parameters.
The following example shows how you subscribe to and process the events that the SDK broadcasts.
package «your.package.name»;
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
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")
}
}
@Override
public String getCommunicatorId()
{
return "«your_company_name_in_snake_case»";
}
}package «your.package.name»
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
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")
}
}
override fun getCommunicatorId(): String
{
return "«your_company_name_in_snake_case»"
}
}If "revenue" is -1, this indicates an error.