Knowledge base

Personalized Placements guide (iOS)

Introduction to Personalized Placements

A Personalized Placement is the decision engine that ties together ads and in-app purchase (IAP) promotions, determining which format to serve based on player experience and impact to lifetime value (LTV). Each player receives the most meaningful engagements to maximize retention and revenue. Simply add IAP Promos to your rewarded or non-rewarded video ad Placements to increase their performance.

In this guide:

How it works

Personalized Placements optimize toward LTV for retention and sustainable revenue. Unity calculates the LTV of your users by projecting their total potential value over an infinite amount of time. The data model analyzes many factors to predict the LTV of monetization content relative to your user, not just the bid price. These data points include, but are not limited to, the likelihood of the player returning to the app, and the likelihood of churn, app usage, historical ad preference, genre preference, and propensity for in-app purchases.

The Personalized Placements machine learning decision engine.

The machine learning engine also benefits from being trained on all available data since the inception of the experiment. When a Personalized Placement requests content, its machine learning engine assigns an LTV score to each format, whether it’s an ad bid or IAP Promo. The format with the highest LTV score wins the impression.

Succeeding with Personalized Placements

To maximize profits with Personalized Placements, you follow a two-phase rollout process:

  1. Observation
    In the observation phase, Unity segments your users so that half receive optimized content, while the other half acts as a control group. This allows you to easily determine the optimization effects and make educated decisions about how to proceed.
  2. Scale
    When you’ve observed significant results (typically after roughly one month of data), you’ll enter the scaling phase. During this phase, Unity maximizes the number of users experiencing optimization, in order to maximize your revenue.

Because Personalized Placements work holistically to optimize your revenue, it’s important to ensure that your game’s overall economy and monetization strategy is healthy and effective to begin with. Unity’s machine learning model can dynamically adjust to your user’s preferences, to provide the best experience for each individual user. But if the underlying setup of your app or game is ineffective at driving monetization, the revenue lift will be smaller. This is especially important because the player’s journey, behavior, and creatives they experience directly impact the Personalized Placement’s valuations and choices.

This guide walks you through the path to success in three phases:

  1. Preparation
    Read the pre-integration section if you’re new to monetization design strategy and looking for guidance on implementing an effective monetization system.
  2. Implementation
    Read the integration section when you’re confident in your monetization design strategy and ready to execute on it by implementing Personalized Placements in your game.
  3. Scale for success
    Read the post-integration section when your game has been published long enough to observe and act on performance results to drive revenue higher.

If you have any more questions, contact your Unity representative or review the FAQ.

Define your monetization strategy

Before implementing Personalized Placements, it is important to clearly define your monetization strategy. If you need help getting started, Unity recommends these steps:

  1. Identify your game’s core loop.
  2. Identify surfacing points that will entice players to enhance their experience.
  3. Identify player archetypes engaging with your game, and create Promos that target them.

Define your game’s core loop

Your core loop is the fundamental sequence of activities a player follows and repeats throughout your game. These vary depending on the game and genre, but usually involve acquiring and spending resources to progress in the game. Your core loop is the mechanic that keeps players engaged with your content and incentivized to play. The steps between each activity in the core loop present the most fertile monetization opportunities.

Here is an abstract example of a core game loop:

Example of a generic core game loop.

Identify surfacing points that will entice players to enhance their experience

Natural breaks in gameplay or friction points occur between the phases of your core loop. These are surfacing points, and excellent locations to implement Placements because they present the player with choices or information without interrupting gameplay.

When identifying these opportunities, remember that similar surfacing points can occur in multiple locations, so you can use a single Placement in multiple surfacing points throughout your game. For example, you can use the same Placement anywhere a player loses a life, levels up, or defeats a boss.

You can further augment these surfacing points by implementing Standard Events that provide more context into in-game milestones of the player, which provides better data for machine learning-driven decisions (for more information, see section on Implementing Standard Events). These will ultimately be where you implement your Placements.

Common examples of surfacing points

Personalized Placements serve both ad and Promo content. Unity strongly recommends using rewarded ads in your implementation, and suggests reviewing the rewarded video best practices guide. Context is important. When considering these examples, think about what incentives make enticing rewards for each surfacing point if an ad wins the impression.

Level complete

Level transitions present a natural pause to display an ad or Promo without disrupting gameplay, and might be a good opportunity to reward or promote items that will help players with the upcoming challenge.

Level failed or player death

Failing a challenge presents both a break in gameplay and a friction point, where the player might be interested in extra lives or power-ups that improve their chances of success on the next attempt.

Example of an augmented core loop using level failure as a surfacing point.

Level-up

Leveling up often results in access to increased power or resources. This may present an opportunity to entice a non-paying player with a discounted purchase offer, or the option to watch an ad in exchange for a period of double rewards.

Example of an augmented core loop using leveling up as a surfacing point.

In-game store menu

Shops are resource sinks, and therefore good opportunities for rewarded Placements offering currency in exchange for watching an ad, or Promos for currency packs.

Create Products and Promos based on player archetypes

Who plays your game?

Now that you have a strategy for surfacing ads and Promo campaigns, consider the types of players engaged with your game. This helps inform the types of in-app purchases you want to promote. Consider the following example archetypes:

  • The "completionist" player desires resources to collect and craft the best items.
  • The "pitstop" player’s most valued resource is time, and therefore wants to speed things up and eliminate waiting.
  • The "conqueror" player enjoys raiding, battling, and competition. They are typically willing to pay for power.

What do they want?

Understanding your game’s audience helps identify what products they might desire. Remember, you don’t have to worry about matching the right player with the right offer, because the machine learning will do that for you. However, it’s important to account for every play style in your player base when choosing the types of Promos you’ll run.

For example, using the archetypes listed above, you might end up with a Promo strategy that looks like this:

Player archetypes Products Promos
Completionist Focus on collectable or crafting items, and unique non-consumables such as vanity items or skins.

  • Soft currency
  • Crafting resources
  • Unique skins
  • 100 Gems ($0.99)
  • 500 Gems ($4.99)
  • 2000 Gems ($19.99)
  • 2000 Gem Starter Pack ($9.99 for non-payers only)
  • 2000 Gem Sale ($14.99 for a limited time only)
  • Crafting Pack (500 Gems, 10 Wood, 20 Nails, 1 Hammer, $9.99)
  • Crafting Starter Pack (500 Gems, 10 Wood, 20 Nails, 1 Hammer, $4.99 for non-payers only)
  • Thor’s Crafting Hammer ($9.99 for a limited time only)
Pitstop Focus on consumable items that speed up ability to progress in the game.

  • Accelerators
  • Energy refills
  • XP boosts
  • Plant Growth Stimulant ($0.99)
  • Plant Growth Stimulant x6 ($4.99)
  • Plant Growth Stimulant x25 ($19.99)
  • Plant Growth Stimulant x25 Starter Pack ($9.99 for non-payers only)
  • Plant Growth Stimulant x25 Sale ($14.99 for a limited time only)
  • Booster Pack (Double XP Boost, Double Gems Boost, Plant Growth Stimulant x5, Coffee x5, $9.99)
  • Booster Starter Pack (Double XP Boost, Double Gems Boost, Plant Growth Stimulant x5, Coffee x5, $4.99 for non-payers only)
Conqueror Focus on items that increase power, or vanity items that distinguish the player from their peers.

  • Weapons
  • Armor
  • Consumables
  • Flame Blade ($4.99)
  • Flame Tunic ($4.99)
  • Inferno Blade ($9.99)
  • Inferno Mail ($9.99)
  • Phoenix Blade ($19.99)
  • Phoenix Robe ($19.99)
  • Phoenix Set (Phoenix Blade and Phoenix Robe, $34.99)
  • Phoenix Starter Set (Phoenix Blade and Phoenix Robe, $24.99 for non-payers only)
  • Phoenix Set Sale (Phoenix Blade and Phoenix Robe, $29.99 for a limited time only)
  • Inferno War Chest (Inferno Blade, Inferno Mail, Stamina Potion x5, Strength Potion x5, $19.99)
  • Inferno Starter Pack (Inferno Blade, Inferno Mail, Stamina Potion x5, Strength Potion x5, $9.99 for non-payers only)

How you choose to organize your Promos is up to you. In this example, the Promos are organized around several campaign types:

  • Evergreen: Persistent content that is always available at a consistent price point.
  • Non-payer: Single-use discounts only available to players who have not spent money in the game.
  • Limited-time: Discounted items available to the entire player base, but only between specified dates.

Note: You can configure non-payer and limited-time offers in the final step of the IAP Promo creation process (targeting and scheduling). Unity generally discourages including discounted items in Personalized Placement Promos, as it can skew the machine-learning data towards sale items, but non-payer and limited-time offers work well because the model excludes them from consideration when the player is ineligible for those offers.

For more ideas on how to design effective Promo campaigns, see the IAP Promo monetization tips.

Back to top

Implementing Personalized Placements

With your monetization strategy set, you’re ready to implement Personalized Placements in your game.

Importing the Unity Monetization framework

To get started, download the latest version of the Monetization framework for iOS. Personalized Placements require the Monetization SDK 3.0 or later. For information on downloading and importing the SDK, see documentation on iOS integration.

Implementing Unity Ads

To implement rewarded or non-rewarded ads in your Unity Project, you must initialize the Unity Monetization SDK, then implement scripts at your surfacing points that access and display content through Placement IDs. For a comprehensive guide, see documentation on Unity Ads integration for iOS.

Unity also recommends reviewing the rewarded ads best practices guide as part of your implementation strategy.

Using mediation

If you use ads mediation, the integration process for Unity Ads differs as dictated by your mediation partner. You can find integration guides and SDK adapters for the following widely-used mediation partners below:

For more details, see documentation on Unity Ads mediation. If you have questions regarding compatibility with other mediators, please contact your Unity representative.

Implementing in-app purchasing

The Monetization SDK allows you to take advantage of Personalized Placements using a custom purchasing integration, by implementing a purchasing adapter. This adapter is required for Unity to hook into the necessary machine learning data. For a complete guide on implementing a purchasing adapter, see documentation on Custom purchase integration for iOS.

Implementing Standard Events

Standard Events track user experience and player behavior across your game. Implement a subset of game economy events so that Unity’s machine learning engine can optimize your Placement content. Game economy events help the Personalized Placements data model form a complete picture of each player’s preferences and actions in your game, then determine what actions to take accordingly.

The Monetization SDK allows you to use Unity Analytics APIs in iOS games that are not made with Unity. To implement these events in your game and fire the event at the user level to Unity’s endpoint, invoke the UnityAnalytics interface:

@interface UnityAnalytics: NSObject

Logging acquire and spend events

The following events help train Personalized Placements to know when it’s best to show a Promo.

Call the onItemAcquired event when players acquire a resource in-game.

+ (void) onItemAcquired: (NSString *) transactionId itemId: (NSString *) itemId transactionContext: (NSString *) transactionContext level: (NSString *) level itemType: (NSString *) itemType amount: (float) amount balance: (float) balance acquisitionType: (UnityAnalyticsAcquisitionType) acquisitionType;      

Call the onItemSpent event when players consume a resource in-game.

+ (void) onItemSpent: (NSString *) transactionId itemId: (NSString *) itemId transactionContext: (NSString *) transactionContext level: (NSString *) level itemType: (NSString *) itemType amount: (float) amount balance: (float) balance acquisitionType: (UnityAnalyticsAcquisitionType) acquisitionType;     
Parameter Data type Description Examples
transactionId NSString (Optional) A unique identifier for the specific transaction that occurred. You can use this to group multiple events into a single transaction.

Note: If the acquisitionType is premium (meaning the player purchased the commodity with real money), Unity recommends matching the transaction ID logged at the point of purchase with the one sent for onItemAcquired or onItemSpent, so the data model can easily associate the two as part of a single transaction. For more information, see documentation on Purchasing integration for iOS.
  • @"00001"
  • @"12345”
itemId NSString (Required) A name or unique identifier for the spent or acquired item.
  • itemId: @"Mana Potion"
  • itemId: @"Hay Bales"
  • itemId: @"Tokens"
transactionContext NSString (Required) The channel through which the item was spent or acquired.
  • transactionContext: @"IAP Store"
  • transactionContext: @"Shop"
  • transactionContext: @"Crafting"
level NSString (Optional) The name or identifier of the player’s progression level when the item was spent or acquired. This value will be expressed differently depending on the game (for example, as a numerical level, as a title, or as progress on a map). A game with traditional player levels:

  • level: @"13"
  • level: @"72"

A game that gauges progression with titles:

  • level: @"Novice"
  • level: @"Grand Champion"

A game without player levels, that gauges progression through advancing to levels or maps:

  • level: @"Pirate Bay"
  • level: @"Elysian Fields"
itemType NSString (Optional) The category of the spent or acquired item. Unity recommends using one of the following categories for proper data modeling:
  • "Currency"
  • "Resource"
  • "Item"
  • "Other"
  • itemType: @"Currency"
  • itemType: @"Resource"
  • itemType: @"Item"
amount NSFloat (Required) The unit quantity of the spent or acquired item.
  • amount: 1.0F
  • amount: 200.0F
  • amount: 5000.0F
balance NSFloat (Optional) The player’s new (post-transaction) quantity of the spent or acquired item.
  • amount: 10.F
  • amount: 50.0F
  • amount: 120.0F
acquisitionType UnityAnalyticsAcquisitionType (Required) The UnityAnalyticsAcquisitionType can be either:

  • kUnityAnalyticsAcquisitionTypePremium indicates the item was purchased with real currency.
  • kUnityAnalyticsAcquisitionTypeSoft indicates the item was acquired with virtual currency or resources.
  • acquisitionType: kUnityAnalyticsAcquisitionTypePremium
  • acquisitionType: kUnityAnalyticsAcquisitionTypeSoft

Consider the following examples:

Use case Event(s) Example
The player acquires resources through the course of gameplay. Acquire A player loots a potion off a defeated enemy:

[UnityAnalytics onItemAcquired: @"00001" itemId: @"Health Potion" transactionContext: @"PvE Loot" level: @"Pirate Bay" itemType: @"Item" amount: 1.0F balance: 5.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];
The player acquires multiple items bundled through the course of gameplay. Acquire for each item, sharing the same transaction ID. A player receives a potion and silver pieces upon completing a quest:

[UnityAnalytics onItemAcquired: @"00002" itemId: @"Health Potion" transactionContext: @"PC Quest" level: @"Pirate Bay" itemType: @"Item" amount: 1.0F balance: 6.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];

[UnityAnalytics onItemSpent: @"00002" itemId: @"Silver" transactionContext: @"PC Quest" level: @"Pirate Bay" itemType: @"Currency" amount: 50.0F balance: 200.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];
The player acquires resources through an in-app purchase. Acquire (in the purchase handler). A player purchases a premium currency pack:

[UnityAnalytics onItemAcquired: @"00003" itemId: @"Gold Coin" transactionContext: @"Gold Vendor" level: @"Pirate Bay" itemType: @"Currency" amount: 300.0F balance: 300.0F acquisitionType: kUnityAnalyticsAcquisitionTypePremium];
The player acquires multiple items bundled through an in-app purchase. Acquire for each item (in the purchase handler), sharing the same transaction ID. A player spends real money to purchase an armor bundle:

[UnityAnalytics onItemAcquired: @"00004" itemId: @"Warlord Breastplate" transactionContext: @"Castle Armory" level: @"75" itemType: @"Item" amount: 1.0F balance: 1.0F acquisitionType: kUnityAnalyticsAcquisitionTypePremium];

A[UnityAnalytics onItemAcquired: @"00004" itemId: @"Warlord Helmet" transactionContext: @"Castle Armory" level: @"75" itemType: @"Item" amount: 1.0F balance: 1.0F acquisitionType: kUnityAnalyticsAcquisitionTypePremium];

[UnityAnalytics onItemAcquired: @"00004" itemId: @"Warlord Boots" transactionContext: @"Castle Armory" level: @"75" itemType: @"Item" amount: 1.0F balance: 1.0F acquisitionType: kUnityAnalyticsAcquisitionTypePremium];
The player consumes resources through the course of gameplay. Spend A player uses a potion in battle:

[UnityAnalytics onItemSpent: @"00005" itemId: @"Health Potion" transactionContext: @"Arena Combat" level: @"42" itemType: @"Item" amount: 1.0F balance: 5.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];
The player consumes a resource to acquire another resource. Spend and acquire, sharing the same transaction ID. A player spends silver pieces to acquire crafting resources:

[UnityAnalytics onItemSpent: @"00006" itemId: @"Silver" transactionContext: @"Bazaar Trading Post" level: @"25" itemType: @"Currency" amount: 50.0F balance: 150.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];

[UnityAnalytics onItemAcquired: @"00006" itemId: @"Arrowhead" transactionContext: @"Bazaar Trading Post" level: @"25" itemType: @"Resource" amount: 25.0F balance: 25.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];
The player spends premium currency to acquire a virtual good. Spend and acquire, sharing the same transaction ID. A player purchases a weapon with premium currency:

[UnityAnalytics onItemSpent: @"00007" itemId: @"Gold Coin" transactionContext: @"Arena Store" level: @"Grand Champion" itemType: @"Currency" amount: 300.0F balance: 0.0F acquisitionType: kUnityAnalyticsAcquisitionTypePremium];

[UnityAnalytics onItemAcquired: @"00007" itemId: @"Vorpal Blade" transactionContext: @"Arena Store" level: @"Grand Champion" itemType: @"Item" amount: 50.0F balance: 200.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];
The player consumes multiple resources to acquire a virtual good. Spend for each resource spent, and acquired. A player gives the blacksmith currency and materials to make them a weapon:

[UnityAnalytics onItemSpent: @"00008" itemId: @"Silver" transactionContext: @"Royal Blacksmith" level: @"Royal Castle" itemType: @"Currency" amount: 100.0F balance: 50.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];

[UnityAnalytics onItemSpent: @"00008" itemId: @"Iron Ore" transactionContext: @"Royal Blacksmith" level: @"Royal Castle" itemType: @"Resource" amount: 1.0F balance: 0.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];

[UnityAnalytics onItemSpent: @"00008" itemId: @"Stinging Blade Mold" transactionContext: @"Royal Blacksmith" level: @"Royal Castle" itemType: @"Resource" amount: 1.0F balance: 0.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];

[UnityAnalytics onItemAcquired: @"00008" itemId: @"Stinging Blade" transactionContext: @"Royal Blacksmith" level: @"Royal Castle" itemType: @"Item" amount: 1.0F balance: 1.0F acquisitionType: kUnityAnalyticsAcquisitionTypeSoft];

Note: Make sure you implement these events anywhere inventory transactions occur, including in your callback handler for rewarded ads.

Logging level failure

Call the onLevelFail event when players fail a level or die in-game. The data model can use this to show a Promo for a Product that will help them pass the level on the next attempt.

+ (void) onLevelFail: (int) levelIndex;

Logging levels-up

Call the onLevelUp event when players progress or increase in power.

+ (void) onLevelUp: (int) newLevelIndex;

See the following code sample for an example implementation:

#import  

@interface ViewController : UIViewController 

@end 

@implementation ViewController 

// Call when a player acquires an item: 
- (void)acquireItem:(NSString *)transactionId itemId:(NSString *)itemId transactionContext:(NSString *)transactionContext level:(NSString *)level itemType:(NSString *)itemType amount:(float)amount balance:(float)balance acquisitionType:(UnityAnalyticsAcquisitionType)acquisitionType { 

    [UnityAnalytics onItemAcquired:transactionId itemId:itemId transactionContext:transactionContext level:level itemType:itemType amount:amount balance:balance acquisitionType:acquisitionType]; 

    // Add commodity to the player’s inventory. 
} 

// Call when a player consumes or sells an item: 
- (void)spentItem:(NSString *)transactionId itemId:(NSString *)itemId transactionContext:(NSString *)transactionContext level:(NSString *)level itemType:(NSString *)itemType amount:(float)amount balance:(float)balance acquisitionType:(UnityAnalyticsAcquisitionType)acquisitionType { 

    [UnityAnalytics onItemSpent:transactionId itemId:itemId transactionContext:transactionContext level:level itemType:itemType amount:amount balance:balance acquisitionType:acquisitionType]; 

    // Deduct commodity from the player’s inventory. 
} 

// Call when a player dies or fails a challenge: 
- (void)levelFail:(int)levelIndex { 

    [UnityAnalytics onLevelFail:levelIndex]; 

    // Deduct a life.  
    // Respawn the player or display the Game Over menu. 
} 

// Call when a player gains a level or similarly upgrades: 
- (void)levelUp:(int)theNewLevelIndex { 

    [UnityAnalytics onLevelFail:theNewLevelIndex]; 
    // Increase the player’s stats. 
    // Unlock new skills. 
} 
@end 

Configuring Personalized Placements

Create Placements for your monetization surfacing points (as described in the pre-integration guide), or convert existing ones in your game. To create or convert a Personalized Placement, simply enable both Ads and IAP Promo content in the Content Settings menu.

Unity recommends multiple Personalized Placements in your game, to give the player a consistent experience throughout.

Converting an existing video Placement

If you already have a live Placement that you wish to convert, simply add IAP Promo offers to your rewarded or non-rewarded video Placement. To do so, navigate to the desired Placement’s settings menu, then select Content Types and check IAP Promo. Make sure you associate your Promo campaigns with your active Placements.

Activating Placements

Provide your Unity representative with the Game ID and Personalized Placement ID(s) you wish to activate in your Project.

Important: Be sure to revisit your mediation integration and update the Placement ID(s) you’re using.

Configuring IAP Promos

The final step is to configure Promos. Begin by importing the Product Catalog you created when implementing IAP to the Operate dashboard. Each Product requires an associated creative in order to be included with Promos.

Next, follow the Promo configuration wizard for each Promo you wish to include in your Personalized Placements. The setup consists of the following steps:

  • Name the Promo.
  • Select Products to include in the Promo.
  • Select the Personalized Placements through which to promote the Promo.

Testing Promos

To verify that your Placements are configured to receive Promo content as well as ads, follow the testing steps detailed in the ads integration guide. If the Placement is configured properly, you will see a custom test ad indicating that Promos are enabled.

Back to top

Scaling to maximize value

As every game is unique, Unity strives to ensure that you’re comfortable with the performance of Personalized Placements in your game before optimizing the experience of your entire player base. This rollout consists of two phases: observation and scaling.

LTV reporting

When your Personalized Placements are live, Unity monitors phase one performance and enables an LTV Reporting tab on the Operate dashboard when statistically significant data is available. The report will appear on the left navigation bar of your Organization-level menu.

This report lets you view how Personalized Placements impact your revenue and retention. It includes analytics for eCPM lift, revenue lift, and average revenue per daily active user (ARPDAU).

LTV reporting data in the Developer Dashboard.

Note: During the beta period, the LTV reporting period defaults to performance over the past 30 days, which allows for statistically significant results.

What to expect in the observation phase

  • Unity randomly assigns half of your users to an exposed group, while the other half constitutes a control group. The exposed users will experience content optimization, while the control group will not, to clearly demonstrate the difference in performance.
  • As Unity collects data on the preferences of every user in the Unity network (even those who have just entered your game), you will generally see an immediate impact to your game.
  • The observation phase typically lasts about a month, to generate statistically significant results. During this period, you will likely see a revenue impact within the first week of Placement conversion. However, to ensure solid data-driven decisions, Unity refrains from scaling optimized content to all users until the significance of that impact is clear.

    Note: The number of active Personalized Placements, size of your game, and complexity of its economy will heavily influence the actual length of the observation period. Unity recommends personalizing as many of your Placements as possible to improve the data sampling.

What to expect in the scaling phase

  • Once you’ve accrued sufficient data, Unity adjusts the distribution of users to 90% exposed and 10% control. This allows Unity to maximize your revenue and still demonstrate the effect of optimization on your users.
  • After this change, your revenue lift will be projected by normalizing the data of both groups, so Unity can compare the results from two differently-sized experiment populations correctly.

During the beta, your account manager will work closely with you to handle the transition between phases. Your dashboards will change automatically, adjusting to the new optimization settings.

Note: If you use ads mediation, Unity is working to allow your mediation platform (e.g. Admob and Mopub) to correctly utilize the additional revenue you receive from our optimization in their autoranking of your meditation waterfall. This will be available in the near future, and allow you to correctly rank Unity against other monetization partners automatically.

Back to top

Still need help? Get in touch!
Last updated on 19th Aug 2019