Frequently Asked Questions (FAQ)
Can I create multiple projects?
Yes. You can create more than one projects if necessary.
Which game genre benefits the most and the least from TENTUPLAY?
TENTUPLAY uses different methods for different genres, but the AI is designed to adapt to any game environment in a similar manner. Regardless of genre, you will see an increase in LTV.
Cost and time investment for product integration?
Depends on the game size (MAU) & genre, and company size. On average, indie studios take less than 6 hours, and mid-to-large studios take about 2 to 3 days.
Which language does TENTUPLAY support?
It supports English, Korean, and Japanese.
Can TENTUPLAY provide a free trial period?
Yes, please consult a sales person at TENTUPLAY.
What are the games that are currently using TENTUPLAY?
Games from MMORPG and idle to SNG and narratives are currently using TENTUPLAY; MAU is as high as 3 hundred thousand. The exact titles cannot be revealed due to an NDA contract.
How is TENTUPLAY better than internal BI and O&M teams?
Low cost & Time-efficient & our AI algorithm is built on numbers of games, which means that we can easily adapt to any game environment at ease with promising performance.
What is included in Basic Analytics?
Basic Analytics includes daily/weekly/monthly retention and conversion statistics along with details about Paying Users and IAP. Cohort Analysis, Dormant Users, and In-Game Economy Analytics are included in Advanced Analytics.
What time zone does TENTUPLAY use? Can I change it?
TENTUPLAY uses UTC and currently you cannot change it. When events are uploaded, the time is automatically adjusted to UTC in our database. All data and graphs displayed in TENTUPLAY console reflect the UTC time an event was uploaded. For example, if a user registered the game at 1:00 AM KST (GMT+9) on March 2nd, the user will be counted as new registered user at March 1st (registered at 4:00 PM UTC on March 1st)
Does TENTUPLAY provide any consulting service?
We do not provide a standardized consulting service, but you may always set up a call with TENTUPLAY’s manager who is assigned to your project.
Does TENTUPLAY collect data on demographics?
No. TENTUPLAY only collects behavioral data.
Does TENTUPLAY extract data straight from the server database?
TENTUPLAY is a third-party SDK that collect data from your client side.
What if we are unwilling to send our data outside?
TENTUPLAY can also provide server-to-server service. Please consult a sales person at TENTUPLAY for further discussion.
What is the minimum amount of data needed for AI in-game shop? Does TENTUPLAY need any past data from our server?
On average, it takes one to two days worth of data for TENTUPLAY’s AI to set thresholds for personas and bucket players into appropriate personas. TENTUPLAY does not need any past data from your server side.
What is the minimum number of players needed for AI in-game shop?
AI in-game shop can run on a small player base, yet TENTUPLAY recommends MAU above 3,000 for a more accurate and diverse persona analysis.
How does the segmentation work?
TENTUPLAY SDK will automatically collect and analyze data on your implementation. TENTUPLAY’s AI segments players based on their play styles, and you can check the number of players included in each persona on the console.
Is segmentation solely based on player behavior?
We have both (1) behavioral economic segmentation and (2) purchase/retention-based segmentation.
Can we change the text in AI personalized offers?
Yes. You can edit the code on the console.
Is it better to log any many events as possible?
Not necessarily. It is best to log the events that are most relevant to your business model.
What is the difference between the general and genre-specific methods?
General methods such as
Join are essential to any game. Besides the general methods, some methods may or may not be relevant to your game depending on the genre. For example, for games that do not have cosmetic or consumable items, methods such as
UseConsumable are not needed.
How can we check the performance of AI in-game shop?
You can check open & conversion rate on our console for each player segments and each message. However, TENTUPLAY cannot confirm if any actual purchase has been made.
Can a player have multiple personas?
Personas are not necessarily mutually exclusive, which means that it is common for a player to be included in more than one persona.
Does 28 personas always appear in every game?
The number of personas that appear are different for every game, especially for different genres. On average, you will see 12-15 personas in an RPG/MMO games; 7-9 in idle games; 3-7 in casual/puzzle games.
If a player stays in a same persona group for a long time, will he receive the same offer the whole time?
TENTUPLAY can limit the number of times a same offer is sent to a player, or make changes to the settings.
Can I extract data from the console to cross-check with our server?
You can download CSV from the console.
How are the thresholds for each persona set?
Following SDK implementation, TENTUPLAY’s AI analyzes data for 24 to 72 hours to automatically set the thresholds. These thresholds will change as the game mature and player trend shifts.
Where will the AI in-game shop appear in our game?
You must set where you want to show the offers. You can choose to have AI personalized offers to pop up when a user logs in, or to appear only when a user clicks on a specific icon on the screen.
How do you receive information (price, image, etc) on our in-game products?
You must upload a CSV file on our console. If there is any change in product details, you must upload the newest version, which will replace the older version.
What exactly is purchase_link? **I see several urls in the purchase_link fields of the product information sample file (that is, sample.csv) in the documentation, but they don’t look like links where I can make any actual in-app purchases by clicking or tapping.
Notice that those urls are simply given as examples. If you have external links or internal deep links that work, you can put them into purchase_link directly. You can also leave the field empty and retrieve the purchase link of recommended product by using either
product_index as shown in the following example:
purchase_link = getProductUrl(purchasable_slug); // custom method for retrieving purchase_link
See also Step 2: Edit Code Within Unity for more information.
If the game supports multiple languages (for example, six languages), do we have to type each persona message in Message Content for every language manually?
We provide default message for each persona in three languages (that is, English, Korean, Japanese). For the others, they need to be translated and entered manually.
If we use the same code for a product being sold on both Android and iOS, isn’t it okay to leave
store is required and you still must enter a value in it even though you use the identical product code (for example, purchasable_slug or product_index) in every store.
What is the right size of UI to show AI in-game shop messages?
Given that the amount of message text shown on the screen varies depending on models, it would be appropriate if the UI is designed to accommodate changes in text length.
Can we forcibly trigger a certain delivery point?
No. But TENTUPLAY is considering making an update on custom events.
Can we type in multiple user ids as a list on the console?
You can manually create an audience group by typing in as many user ids as you want. You may also select and create offers for specific user ids from the whale & new paying user list on the console.
Can we send push notifications on TENTUPLAY’s console?
No. TENTUPLAY only supports in-game messages and pop-ups.
What is the difference between “Send Immediately” and “Campaign”?
“Send Immediately”, as it stands, sends a designated offer immediately to your target audience. (For example, you can immediately send a 20% discount coupon to Player AAA, ABC, and XYZ) “Campaign” runs over a designated period and sends a designated offer to players who trigger a designated delivery point during that time period. (For example, you can create a campaign to send a 20% discount coupon to any player who reaches stage 11 in the next two weeks)
When you run a campaign, will an offer be sent immediately after a player triggers a delivery point?
No. All offers for a campaign are sent all together the day after triggering a delivery point in UTC.
Is there a validation function to prevent wrongful use of personalized offers?
Yes. There is an API for offer verfication. See Verify Offer for more information.
Can I edit a campaign after creating it?
Yes and No. You are only allowed to edit the scheduling of a campaign that has already been created. If you need to make changes to the offer details and target audience, you can make a copy of the campaign you want to edit.
What are deep links?
Deep link contains information on your target product. Please refer to these two websites for a guide on how to create a deep link:
Can we change the pricing (of in-game items) on the console?
No, you must register each pricing on Google Play or App Store, before TENTUPLAY can implement them in an offer
Do I have to update SDK every time we make an update to our game?
Not necessarily. If you believe there is an update that changes your business model, we recommend that you discuss with TENTUPLAY’s tech team for assistance.
Can you provide the same service with API, instead of SDK?
Yes. Please contact TENTUPLAY’s tech team for more information.
Which engine does TENTUPLAY SDK support?
Unity Engine is supported.
Is there any QA process for checking proper SDK implementation?
You can debug your implementation on data collection and upload. Refer to Debug SDK. TENTUPLAY’s tech team consistently checks the server for any issues as well.
What are the classes that must be handled as exceptions when processing obfuscation?
Data type for some of TPStashEvent such as currency is float. What should I do when data beyond float type is used as input? The data that goes over its limit has any impact on the data in other methods when it comes to data upload?
If Built in Cast can be done properly, please do Built in Cast. But, in such case, an overflow has happened, so please take an extra step in data processing as follows:
float range: from 1.40129846432481707e-45 to 3.40282346638528860e+38
double range: from 1.7e-308 to 1.7e+308
When the value goes over 10^38, an overflow happens and TENTUPLAY receives the value as infinity, which causes an error. Our recommendation is to convert the input value into a logarithm, but one downfall is that you will see logarithmized value on your console.
For the second question, if one or more parameter values in
GetCurrency exceeds valid range of its data type, all the data in
GetCurrency will not be uploaded to server. It doesn’t however affect data upload in other methods like
If in setting we checked auto-upload, and then player close the app before the interval to upload reached, what happened to data that are already collected?
The data collected before upload term remains inside the player’s device, and is uploaded when the player plays the game next time. You can shorten the upload term but this is the trade off between frequent upload (that might cause increase in overhead on data transmission over the network) and missing out data.
How often should
TPStashEvent class be called?
How to use the TPStashEvent class: While Auto Upload is checked, for an event that is called multiple times, if you utilize the
new TPStashEvent() class and call the needed method uploads will occur automatically following the Upload Interval. (For example, in the case of gaining or using currency, call the collection methods via
new TPStashEvent().UseCurrency().) If
new TPStashEvent() is called only in the beginning of play, data collected is not uploaded while playing.
How can I check if the data is being uploaded properly? Is there a callback?
Currently, there is no callback function. Instead, if you are in TENTUPLAY Debug Mode, "TPDebug||Upload successful" will show up in the Unity console when upload is successful.
If upload fails, data collected remains in the player’s device until the next game play.
PlayerGetCharacter event always appear after
Join event at SDK status on the console. Why is that?
We automatically call
PlayerGetCharacter right after
Join, so there is no concern with that.
In documentation TPStashEvent.Join, it is used for user registration, is there some way to check if that user already registered before? (so that we can differentiate which user need to call join & login or just call login)
TentuPlay just uploads everything you called, so there is not much way to check if the user already registered, while not using TentuPlay. In many games,
TPStashEvent.Join is called with the event that is called first and once such as signing in with Google user.
In the event of server failure, how will TENTUPLAY SDK behave?
TENTUPLAY SDK will retry a few times, and will shutdown itself eventually. This process will not affect gameplay because it runs on a separate thread or a coroutine/callback if the game uses only one thread.
Then, on a loose schedule of about 3~5 days, SDK will check if the server has been repaired by performing health at the application startup. This will not affect gameplay as well.
How robust are your servers?
The server is capable of handling growing demand up to 200,000 DAU and 80,000 concurrent connections by using RDB or NoSQL depending on game genre and scale. For example, our MMORPG client with X00,000 DAU (where the exact number cannot be shared due to NDA) has not experienced any downtime so far.