Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Maximize your app’s revenue and engagement effortlessly with the Playtime SDK, adjoe’s mobile-games-centric rewarded ad unit. Integrate it within your app, and start rewarding users with your in-app currency for playing advertised mobile games.
Playtime taps into your users' love for gaming, offering you industry-leading eCPM and engagement metrics in return. To learn more about how adjoe can boost your app's monetization, engagement, and retention, click here.
Now, let's move on to explore how to set up and integrate the SDK.
If you are not yet a customer, please reach out to our partnerships team.
Current version: v3.0.0
. View Changelog and Migration Guide.
Android 16+
Gradle 7.2.2+
minSdkVersion
16+
compileSdkVersion
23+
Androidx apps are fully supported.
Starting January 1, 2024, version 2.1.1 is the minimum supported version of the Playtime SDK.
Maximize your app’s revenue and engagement effortlessly with Playtime - adjoe’s mobile-games-centric rewarded ad unit for Android and iOS. Integrate it within your app, and start rewarding users with your in-app currency for playing advertized mobile games.
We offer a native SDK solution for Android and a web-based option for iOS. Playtime seamlessly integrates with our Reporting APIs, allowing you to track your KPIs, monitor Playtime's performance, and achieve your revenue targets. Select your preferred platform and get started!
Current version: v3.0.0
. View Changelog and Migration Guide.
Follow this guide to configure your app to work with the Playtime SDK using any of our supported wrappers.
Contact your Account Manager to get an SDK hash for your app. Or if you already have access, it can be retrieved from the Publisher Dashboard.
The SDK hash is a unique 32-character code that uniquely identifies your app within adjoe's systems. Each app receives a distinct hash. Remember to keep your hash confidential to prevent unauthorized use.
Important: Execute this step before the Playtime SDK is accessed on the device for the first time! You can always add more test devices, but only if the SDK hasn't been accessed on them yet.
To fully test the Playtime SDK integration and access all campaign types, configure your physical devices and emulators as test devices. Without this step, the types of available campaigns you get will be limited when using VPNs or emulators.
Find Your GAID (Google Advertising ID):
Open the Settings app or Google settings (depends on your device).
Go to "Google" > "Ads" in the Services section.
Your GAID is displayed at the bottom.
Register as a Test User:
With your GAID, go to the Publisher Dashboard. If you don't have dashboard access, contact your Account Manager.
In the dashboard, find "Test Users" under configuration settings and enter your GAID.
Please note: If you reset your device's GAID, remember to update the test device information in the dashboard with the new GAID before accessing the Playtime SDK again.
Add adjoe's repository to your root build.gradle
(project level):
Add the adjoe dependency to your app's build.gradle
(module level):
If you use Kotlin DSL for adding dependencies, add the repo in the settings.gradle.kts
Add adjoe's repository to the settings.gradle
file:
2. Add the adjoe dependency to your app's build.gradle
(module level):
https://github.com/adjoeio/adjoe-react-native-sdk
Open your project's package.json
file.
Add the adjoe as a dependency under the dependencies
section. You can change the version number to the desired version of Playtime SDK.
Open your build.gradle
file in the android folder and add the following section:
Run the command:
https://github.com/adjoeio/adjoe-flutter-sdk
To integrate the adjoe Flutter SDK into your Flutter project, follow these steps:
Open your project's pubspec.yaml
file.
Add the Playtime SDK as a dependency under the dependencies
section. You can change the version number to the desired version of Playtime SDK.
Save the pubspec.yaml
In your IDE run either of the the following two commands:
pub get
flutter pub get
Adjoe 3.0.0 uses the Play Services Resolver, you can download a version of the Playtime SDK which is compatible wit the Play Services Resolver here. It contains only the source code and the AdjoeDependencies.xml file specifying the Playtime SDK: https://releases.adjoe.io/files/playtime/unity/3.0.0/adjoe_sdk_android_unity_3.0.0_psr.unitypackage
Add the adjoe SDK to your app by clicking:
Assets > Import package > Custom package...
.
Select adjoe's .unitypackage
, click Open
and the select Import
. This will load the adjoe SDK into Assets/Adjoe
.
https://github.com/adjoeio/adjoe-cordova-sdk
Open your project's package.json
file.
Add the Playtime SDK as a dependency under the dependencies
section. You can change the version number to the desired version of Playtime SDK.
Save the package.json
and run the following command:
You have an option to integrate the dependencies via Groovy or Kotlin. To understand the differences of integrating dependencies via these platforms, refer to the official Android docs.
Enabling logging per device within the SDK is crucial for troubleshooting. Turn on logging and include the logs with any bug reports to help us accurately replicate and address issues.
Here’s how to enable logging:
Connect the device to your computer and enable ADB.
In a terminal window, run the following command to activate logging:
You can now filter LogCat using the Playtime
tag to monitor relevant log output. If you wish to disable logging, simply execute the command:
This sets the logging level to ERROR
, effectively reducing the verbosity of the logs.
Once a user meets the criteria for being rewarded, it's time to initiate the payout—sending the rewards to the user. Publishers issue these payouts upon receiving a payout request callback from adjoe's backend. The request is made to the S2S API URL
configured for the publisher for their SDK in the Publisher Dashboard.
To enable S2S payouts, set up an endpoint on your server to receive notifications about user rewards from adjoe. When a request is made to your endpoint, you then must manage the distribution of these rewards to the users. Be aware that once a reward is distributed, it cannot be allocated again.
The key names can be customized, or you can use the default names. Please ensure that no special characters should be included in the values, otherwise our backend may transform the request, which could cause issues with the payout. Some of these values include: []
.
=
Default
GET
/ https://example.com/example?sid={sid}&trans_uuid={trans_uuid}&user_uuid={user_uuid}¤cy={currency}&coin_amount={coin_amount}&device_id={device_id}&sdk_app_id={sdk_app_id}&app_id={app_id}&reward_level={reward_level}&app_name={app_name}&reward_type={reward_type}&publisher_sub_id1={publisher_sub_id1}&publisher_sub_id2={publisher_sub_id2}&publisher_sub_id3={publisher_sub_id3}&publisher_sub_id4={publisher_sub_id4}&publisher_sub_id5={publisher_sub_id5}&placement={placement}&ua_network={ua_network}&ua_channel={ua_channel}&ua_subpublisher_encrypted={ua_subpublisher_encrypted}&ua_subpublisher_cleartext={ua_subpublisher_cleartext}
Customized (Example)
GET
/ https://example.com/example?user_id={user_uuid}&sid={sid}&point_amount={coin_amount}&points={currency}&trans_uuid={trans_uuid}&ua_network={ua_network}&ua_channel={ua_channel}&playtime_placement={placement}&custom_id={publisher_sub_id1}
To achieve successful payouts, the user user_uuid
must match the value set in the SDK initialization. More details can be found in .
Example Response URL:
https://s2sexamplerequestendpoint.com/payout?user_uuid=a79d7158-6f9c-4e5b-ae7a-98143c77d396&sid=0de7e36d2965269f172d2d89bc9a8026da7f0819&coin_amount=100¤cy=dollars&trans_uuid=e7b1a95f-8c72-4ed8-af69-ecf8d06b1d89&sdk_app_id=example.test.app&ua_network=tiktok&ua_channel=direct&publisher_sub_id1=RandomString
If sdk_app_id
and/or device_id
are not present in the endpoint URL, they will be excluded from the sid
calculation. The sid
will then be calculated as follows:
Below is an example script that shows how to calculate the sid
and compare it to the value in the callback URL sent by adjoe. You would implement some version of this in your backend.
When we make payout request to publishers, we send an HTTP request from any of the following IP addresses:
To enhance security, use these IP addresses for IP-level blocking on endpoints receiving adjoe's S2S payout requests. Allow only these specific IPs access.
If we receive a 4xx / 5xx from your endpoint, we have an established retry logic for the failed S2S requests.
If a request fails, we retry after 10 minutes. A second failure prompts a retry in another 10 minutes. Subsequent failures lead to retries every 2 hours from the initial failed attempt. The time windows are additional, so it's roughly 12hrs in total.
If you observe an extended period of unsuccessful requests, contact your Account Manager for further investigation into the issue.
Follow these steps to verify the correct functioning of payouts:
Install games from the catalog, include "event-based" and "time-based" campaigns.
Play the games and complete the tasks required to earn rewards (e.g., finishing a task or playing for a specific duration).
Verify that the completed tasks are reflected in the game's reward card.
Ensure that the earned rewards, such as points, are credited to the app's wallet. For example, if you completed a task for 5 points, check that these points are available in the wallet.
Confirm that a 200 status code is logged in your records. Anything other than a 200 status code means that your endpoint has not been configured correctly to receive requests from adjoe.
If you payout with real money, we recommend that you implement KYC processes, reward cooldowns, and individual limits on the amount of rewards the user can get:
Reward Cooldowns: Temporarily restrict users from receiving additional rewards after receiving one. This helps maintain fairness and prevents exploitation of the rewards system, like receiving rewards too frequently.
Individual Limits: To prevent abuse of the rewards systems, set daily limits on the amount of rewards a user can earn. For example, you might cap rewards at $50 USD per day.
Is it necessary to provide the userId
at app start-up with the init
method?
No. Since the init
method should happen at app start-up, there are circumstances where you don’t yet have this data. For example, if the user hasn’t signed in yet. In these cases, it’s still critical to init
at the app start up, but you can pass in the UA Params or User ID in an OnResume
/ AppState
/ didChangeAppLifecycleState
function when you have the data.
Remember that the userId
is critical for doing S2S payouts, without it your users will not be able to get their rewards. It is also important to note that whatever the last supplied userId
was is what will be sent in the S2S payout URL. Therefore, the last supplied User ID was is what will be sent in the S2S payout URL.
Do I need to do anything with the Playtime SDK after the user logs out?
No. But if the user can only access the Playtime Catalog after logging-in, then you should remove any calls to init
when they log out.
What is the size of SDK?
SDK size depends on the wrapper, but it is roughly <0.5MB.
Can I show the adjoeActivity in a Fragment?
No, this is not supported.
How often is the SDK updated?
The SDK is updated every couple of months. Please keep an eye out on our .
What kind of data does the SDK track? I need to share this information with the Google Play Store.
All of the data that we collect can be found in the AndroidManifest.xml
of the SDK.
How do users know that they are able to receive a reward?
For Android users, we show a toast message on the top of the screen whenever a user is able to receive a reward.
I'm using Flutter or React Native - how can I use your Android SDK and iOS solution together?
Yes, you can use the Platform
properties provided by the Flutter and React Native libraries to set up the code in a way to conditionally execute certain code blocks based on the platform the app is running on. Since we only have an SDK on Android, you may need to use platform-based imports for RN or add platform-specific dependencies in the pubspec.yaml
for Flutter.
Example for React Native:
I'm not seeing campaigns/games in the catalog?
The most common reason this happens is because of VPN usage. If you use a VPN, you might not see any campaigns, even if you set yourself as a test user. We still filter out IP addresses that are anonymous.
After playing some time-based reward games, I stopped receiving rewards after 15 mins. Why?
It can happen because you stopped progressing through the game. To fix this, please keep playing and progressing through the game.
What's the difference between time-based and event-based campaigns?
What is the use of the GAID?
Why does the user need to accept Access to Advertising Info?
Why does the user need to accept TOS?
We hereby inform you that adjoe GmbH processes the following personal data within the framework of the use of Playtime:
Installed apps (including the use duration and use history)
The data will be connected to your end device via the device ID and sent, encrypted, to our servers. In order for app providers to finance our app suggestions, we must send them the device ID for billing purposes.
The processing of the above data is necessary to be able to recommend, via system messages, the installation of apps available in Playtime that match your interests, and calculate the bonuses acquired as a result of your use of the corresponding apps.
Consent
By clicking on ACCEPT, I give adjoe GmbH my consent to process my above-mentioned personal data and transmit it to other app providers so that I can use Playtime as described.
I am aware that a profile of interests will be generated using the above data, and depending on the types of apps I use, this may contain particularly sensitive personal data (e.g. health-related data or data about my sexual orientation, and any other data in special categories pursuant to Art. 9[1] GDPR). For that reason my consent also applies explicitly to the processing of this data. The full links to our Data Privacy Statement and Terms and Conditions of use are available here and here respectively.
How do I give one of my coworkers access to the dashboard?
You should reach out to your Account Manager. They can provide them with access.
What customization options do you provide for the Playtime Catalog?
Most parts of the Playtime Catalog can be customized so that it fits your branding - including images, colors, texts, fonts, and currency. Your Account Manager will reach out to you separately to set up these customizations.
Where can I track KPIs like Revenue or Active User Rates?
Solve any SDK issues quickly with this guide, covering common errors and setup problems. For more help or to suggest features, find support contact details below.
Your device has been blocked. If your device was previously configured as a test device, please inform us so we can address the issue. If not, follow these steps:
Uninstall the app containing the SDK. Ensure its data is also removed from any automatic backups.
Reset your GAID: Go to Settings > Google > Ads
and tap on Reset Ad-ID
.
using the new GAID.
Your device may be blocked. Proceed as described in the issue above.
Check your device's time setting; incorrect time (e.g., set to the future or past) often causes this. If the time is correct and the issue persists, contact us and we will investigate this issue.
This can happen when Gradle cannot resolve a dependency conflict, such as when two dependencies use the same transitive dependency but with different versions. To resolve this conflict you must either:
Remove one of the conflicting dependencies.
Align the versions of the conflicting dependencies to match.
If the affected dependency is one of your app's dependencies, simply adjust or remove it from the dependencies
list in your build.gradle
. If the affected dependency is transitive, you must exclude it from the dependency which specifies it as a transitive dependency.
androidx.work:work-runtime:$workVersion
.Our SDK supports pre-AndroidX projects, so we are using the work-runtime
library that predates AndroidX. There is an issue with the Android Gradle plugin <3.6.0
where the Jetifier does not correctly replace the dependency. If you are not already using a supported version of Gradle, you need to bump the version in your root project's build.gradle
file.
Please also ensure that you have enabled the Jetifier by placing the line android.enableJetifier=true
into your gradle.properties
file.
If you continue to have issues due to a conflict between the versions of the androidx.work:work-runtime
library in your project, you can fix this issue by adding the following to your app level build.gradle
file.
The currently supported version of work-runtime
is up to 2.0.1
Still need help with something? Have an idea for a Feature Request? Please use this template to reach out to your Account Manager for help.
Issue Type: [Bug/Feature Request]
Framework: [Android/Flutter/React Native/Unity/Cordova]
SDK Version:
Priority: [High/Medium/Low]
Crash: [Yes/No]
Devices Affected: (e.g., Samsung, Pixel)
User Impact: Number or percentage
Environment: [Production/Test]
Issue/Feature Description: Provide a detailed description. For feature requests, explain the necessity and potential business impact.
Reproduction Steps:
Expected Behavior:
Actual Behavior:
Please include any relevant logs, crash reports, API calls, or screenshots to support your query.
Maximize your app’s revenue and engagement effortlessly with PlaytimeWeb for iOS, adjoe’s mobile-games-centric rewarded ad unit. Integrate it within your app, and start rewarding users with your in-app currency for playing advertised mobile games.
Playtime taps into your users' love for gaming, offering you industry-leading and engagement metrics in return. To learn more about how adjoe can boost your app's monetization, engagement, and retention, click .
To seamlessly integrate PlaytimeWeb into your iOS app, you only need to offer users the option to open the PlaytimeWeb URL. We suggest placing this option prominently in your app, such as in a native banner or button on the homepage. The basic structure of the Redirect URL is:
The user_id
and idfa
parameters in the URL help accurately identify the user for rewarding purposes, ensuring any currency earned via PlaytimeWeb is promptly paid out.
A WebView or SFSafariViewController or iFrame can be used to show the PlaytimeWeb URL. You may need to configure the navigation actions to open the app-store URL, as the webView may have it's own protocols for intercepting the URL requests.
Allow the following url-schemes
https
itms-appss
itms-apps
about:srcdoc
Open PlaytimeWeb from your app.
Download a game.
Return to PlaytimeWeb. You should see the game under the "My Games" section.
If you do not see the game in "My Games" try resetting your IDFA.
When a game is downloaded, we receive a postback from the MMP letting us know. It is usually is delivered instantly. In some cases, it takes 24 hours. If the app was previously installed, you will not be able to receive rewards through PlaytimeWeb.
Delete the game if it was already installed.
Go to Settings > Privacy > Tracking
, toggle Allow Apps to Request to Track
off.
Return to PlaytimeWeb and select Ask Apps to Stop Tracking
(if prompted), then toggle Allow Apps to Request to Track
back on.
Install the game again from PlaytimeWeb.
Once a user meets the criteria for rewards, it's time to initiate the payout—sending the rewards to the user. Publishers issue these payouts upon receiving a payout request callback from adjoe's backend. The request is made to the S2S API URL
configured for the publisher for their SDK in the Publisher Dashboard.
To enable S2S payouts, set up an endpoint on your server to receive notifications about user rewards from adjoe. When a request is made to your endpoint, you then must manage the distribution of these rewards to the users. Be aware that once a reward is distributed, it cannot be allocated again.
The key names can be customized, or you can use the default names. Please ensure that no special characters should be included in the values, otherwise our backend may transform the request, which could cause issues with the payout. Some of these values include: []
.
=
Default
GET
/ https://example.com/example?sid={sid}&trans_uuid={trans_uuid}&user_uuid={user_uuid}¤cy={currency}&coin_amount={coin_amount}&device_id={device_id}&sdk_app_id={sdk_app_id}&app_id={app_id}&reward_level={reward_level}&app_name={app_name}&reward_type={reward_type}&publisher_sub_id1={publisher_sub_id1}&publisher_sub_id2={publisher_sub_id2}&publisher_sub_id3={publisher_sub_id3}&publisher_sub_id4={publisher_sub_id4}&publisher_sub_id5={publisher_sub_id5}&placement={placement}&ua_network={ua_network}&ua_channel={ua_channel}&ua_subpublisher_encrypted={ua_subpublisher_encrypted}&ua_subpublisher_cleartext={ua_subpublisher_cleartext}
Customized (Example)
GET
/ https://example.com/example?user_id={user_uuid}&sid={sid}&point_amount={coin_amount}&points={currency}&trans_uuid={trans_uuid}&ua_network={ua_network}&ua_channel={ua_channel}&playtime_placement={placement}&custom_id={publisher_sub_id1}
To achieve successful payouts, the user user_uuid
must match the value set in the SDK initialization. More details can be found in .
If sdk_app_id
and/or device_id
are not present in the endpoint URL, they will be excluded from the sid
calculation. The sid
will then be calculated as follows:
Below is an example script that shows how to calculate the sid
and compare it to the value in the callback URL sent by adjoe. You would implement some version of this in your backend.
When we make payout request to publishers, we send an HTTP request from any of the following IP addresses:
To enhance security, use these IP addresses for IP-level blocking on endpoints receiving adjoe's S2S payout requests. Allow only these specific IPs access.
If we receive a 4xx / 5xx from your endpoint, we have an established retry logic for the failed S2S requests.
If a request fails, we retry after 10 minutes. A second failure prompts a retry in another 10 minutes. Subsequent failures lead to retries every 2 hours from the initial failed attempt. The time windows are additional, so it's roughly 12hrs in total.
If you observe an extended period of unsuccessful requests, contact your Account Manager for further investigation into the issue.
If you payout with real money, we recommend that you implement KYC processes, reward cooldowns, and individual limits on the amount of rewards the user can get:
Reward Cooldowns: Temporarily restrict users from receiving additional rewards after receiving one. This helps maintain fairness and prevents exploitation of the rewards system, like receiving rewards too frequently.
Individual Limits: To prevent abuse of the rewards systems, set daily limits on the amount of rewards a user can earn. For example, you might cap rewards at $50 USD per day.
For security measures, a request signature is necessary to verify the authenticity of the request. It's important to calculate the sid
parameter in your backend and compare it with the parameter received in the callback URL. The sid
is generated as an using the required query parameters and the encoding is hexadecimal. Your Account Manager will provide you with the necessary parameter, the s2s_token
. The general format for this is as follows - no other parameters are included in the calculation:
: This verification process, used by businesses and financial institutions, confirms the identity of your users to prevent fraud. It involves collecting and verifying identification documents, such as government-issued IDs or proof of address, ensuring that users are who they claim to be.
We have more information about this in our docs. Please refer to them .
We use GAID to identify users. We provide these data to so they can count attribution.
We have more information about this in our docs. Please refer to them .
We have more information about this in our docs. Please refer to them . This is what the users sees in the TOS page:
These KPIs can be tracked in the . They are also available via API.
Additionally, you can include extra parameters in the URL, and these values will be sent back to you through the payout URL
To make the most of PlaytimeWeb, to maximize your revenue and provide the best user experience, use all of these parameters for data-driven optimizations. For instance, you can monitor the performance of different Playtime button placements or determine the effectiveness of different UA sources in the .
While the IDFA parameter is not required, we recommend including it. This means you should trigger the popup so the user can "Allow" tracking. When a user selects "Play Now" in the Playtime Offerwall, we use a pop-up to remind them to allow tracking.
For security measures, a request signature is necessary to verify the authenticity of the request. It's important to calculate the sid
parameter in your backend and compare it with the parameter received in the callback URL. The sid
is generated as an using the required query parameters and the encoding is hexadecimal. Your Account Manager will provide you with the necessary parameter, the s2s_token
. The general format for this is as follows - no other parameters are included in the calculation:
: This verification process, used by businesses and financial institutions, confirms the identity of your users to prevent fraud. It involves collecting and verifying identification documents, such as government-issued IDs or proof of address, ensuring that users are who they claim to be.
user_id*
A custom identifier you can assign to each user. If you haven't set one, adjoe generates it automatically. This ID is necessary for S2S Payouts, thus required. Ensure this value is url-safe
.
required
idfa*
The Identifier for Advertisers (IDFA) is a random device identifier assigned by Apple to a user’s device and is used by advertisers to track user's advertising data.
recommended
placement
The placement of the PlaytimeWeb button inside your app, e.g., "Main Screen"
, "Shop"
, "Interstitial"
, "More Diamonds Screen"
, etc.
optional
ua_channel
User Acquisition Channel. The channel within the network from which the user was acquired, e.g. incentivized
or video campaigns
.
optional
ua_network
User Acquisition Network. The network through which the user was acquired, e.g., Adwords
, Facebook
, or Organic
.
optional
ua_subpublisher_encrypted
The encrypted package name or app id of the sub-publisher app within the network from which the user was acquired.
optional
gender
There are three available options you can pass in: "female", "male", "unknown".
optional
age
The current age of the user, e.g., 32.
optional
pub_sub_id_1
These are optional identifiers used in your backend. They will be provided back in the S2S payout.
optional
pub_sub_id_2
See pub_sub_id_1
optional
pub_sub_id_3
See pub_sub_id_1
optional
pub_sub_id_4
See pub_sub_id_1
optional
pub_sub_id_5
See pub_sub_id_1
optional
user_uuid
Identifies the user eligible for rewards. This ID must align with the one provided during SDK initialization.
String
Required
sid
The request signature, used to verify request authenticity. Requires a token, which will be shared with you by your Account Manager. Detailed setup instructions below.
String
Required
trans_uuid
The unique transaction ID.
UUID v4
Required
coin_amount
The amount of virtual currency the user should get.
Integer
Required
currency
The name of the virtual currency.
String
Required
sdk_app_id
App ID of the SDK. Example: com.example.android.gamename
String
Optional
app_id
App ID that is used to generate usage.
String
Optional
device_id
Optional external device ID.
String
Optional
app_name
URL encoded app name in English
String
Optional
reward_level
The name of the reward level of the game. For Time-based (Playtime) campaigns, this will correspond to each of the 37 levels. For event-based campaigns (Advance+), this value will always be 0.
Integer
Optional
reward_type
The type of reward given. Example: Advance, Playtime, AdvancePlus, AdvancePlusWeb, CoinStreakBonus, Event.
String
Optional
ua_network
The network from which the user was acquired, e.g., adwords, facebook, organic.
String
Optional
ua_channel
The channel of the campaign in the network that led to the user's acquisition, e.g., incent, video.
String
Optional
ua_subpublisher_encrypted
The encrypted package name or app id of the sub-publisher app within the network from which the user was acquired.
String
Optional
ua_subpublisher_cleartext
The cleartext package name of app id of the sub publisher app in the network where the user was acquired, e.g., com.domain.appName
String
Optional
placement
The placement of Playtime inside your app, e.g., "Main Screen", "Shop", "Interstitial", "More Diamonds Screen", etc.
String
Optional
app_category
Category of the App that user played. Example: Board, Casino, Casual, Entertainment, Puzzle, Other
String
Optional
usage_seconds
Amount of seconds the current level requires. Time-based campaigns (Playtime) only.
Integer
Optional
total_usage_seconds
Total amount of seconds that user has played this game. Time-based campaigns (Playtime) only.
Integer
Optional
advanceplus_event_name
The name of the milestone/event that user completed to receive this reward. Event-based campaigns (Advance+) only.
String
Optional
advanceplus_event_description
The description of the milestone/event that user completed to receive this reward. Event-based campaigns (Advance+) only.
String
Optional
publisher_sub_id1
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id2
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id3
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id4
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id5
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
event_boost_factor
The boost factor for the current promotion. Example: 2x, returned as 2.
Integer
Optional
event_boost_start_date
Date when the boost factor began.
String
Optional
event_boost_stop_date
Date when the boost factor stopped.
String
Optional
install_date
Date when the game was installed.
String
Optional
user_uuid
Identifies the user eligible for rewards. This ID must align with the one provided during SDK initialization.
String
Required
sid
The request signature, used to verify request authenticity. Requires a token, which will be shared with you by your Account Manager. Detailed setup instructions below.
String
Required
trans_uuid
The unique transaction ID.
UUID v4
Required
coin_amount
The amount of virtual currency the user should get.
Integer
Required
currency
The name of the virtual currency.
String
Required
sdk_app_id
App ID of the SDK. Example: com.example.android.gamename
String
Optional
app_id
App ID that is used to generate usage.
String
Optional
device_id
Optional external device ID.
String
Optional
app_name
URL encoded app name in English
String
Optional
reward_type
The type of reward given. Example: Advance, Playtime, AdvancePlus, AdvancePlusWeb, CoinStreakBonus, Event.
String
Optional
ua_network
The network from which the user was acquired, e.g., adwords, facebook, organic.
String
Optional
ua_channel
The channel of the campaign in the network that led to the user's acquisition, e.g., incent, video.
String
Optional
ua_subpublisher_encrypted
The encrypted package name or app id of the sub-publisher app within the network from which the user was acquired.
String
Optional
ua_subpublisher_cleartext
The cleartext package name of app id of the sub publisher app in the network where the user was acquired, e.g., com.domain.appName
String
Optional
placement
The placement of Playtime inside your app, e.g., "Main Screen", "Shop", "Interstitial", "More Diamonds Screen", etc.
String
Optional
app_category
Category of the App that user played. Example: Board, Casino, Casual, Entertainment, Puzzle, Other
String
Optional
advanceplus_event_name
The name of the milestone/event that user completed to receive this reward. Event-based campaigns (Advance+) only.
String
Optional
advanceplus_event_description
The description of the milestone/event that user completed to receive this reward. Event-based campaigns (Advance+) only.
String
Optional
publisher_sub_id1
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id2
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id3
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id4
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id5
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
event_boost_factor
The boost factor for the current promotion. Example: 2x, returned as 2.
String
Optional
event_boost_start_date
Date when the boost factor began.
String
Optional
event_boost_stop_date
Date when the boost factor stopped.
String
Optional
install_date
Date when the game was installed.
String
Optional
Does the the PlaytimeWeb use cookies?
We only keep cookies in the page during the session. It allows us to keep track of the user (like after authentication) and make sure that they get their rewards.
I'm using Flutter or React Native - can I use your Android SDK and iOS solution together?
Yes, you can use the Platform
properties provided by the Flutter and React Native libraries to set up the code in a way to conditionally execute certain code blocks based on the platform the app is running on. Since we only have an SDK on Android, you may need to use platform-based imports for RN or add platform-specific dependencies in the pubspec.yaml
for Flutter.
Example for React Native:
What is the use of the IDFA?
We use the IDFA to identify users and to accurately identify the user for rewarding purposes, ensuring any currency earned via PlaytimeWeb is promptly paid out. We provide the IDFA to MMPs so they can count attribution.
Why does the user need to accept App Tracking?
We have more information about this in our docs. Please refer to them here.
Why does the user need to accept TOS?
We have more information about this in our docs. Please refer to them here. This is what the users sees in the TOS page:
We hereby inform you that adjoe GmbH processes the following personal data within the framework of the use of Playtime:
Installed apps, IDFA
The data will be connected to your end device via the device ID and sent, encrypted, to our servers. In order for app providers to finance our app suggestions, we must send them the device ID for billing purposes.
Clicking the accept button means that you agree to the data privacy & terms and conditions.
How do I give one of my coworkers access to the dashboard?
You should reach out to your Account Manager. They can provide them with access.
What customization options do you provide for the Playtime Catalog?
Most parts of the PlaytimeWeb Catalog can be customized so that it fits your branding - including images, colors, texts, fonts, and currency. Your Account Manager will reach out to you separately to set up these customizations.
Where can I track KPIs like Revenue or Active User Rates?
These KPIs can be tracked in the Publisher Dashboard. They are also available via API.
Still need help with something? Have an idea for a Feature Request? Please use this template to reach out to your Account Manager for help.
Issue Type: [Bug/Feature Request]
Issue/Feature Description: Provide a detailed description. For feature requests, explain the necessity and potential business impact.
Reproduction Steps:
Expected Behavior:
Actual Behavior:
Please include any relevant logs or screenshots to support your query.
There are 2 parts to implementing and using the Playtime SDK:
Part 1: Intialize the Playtime SDK
Part 2: Launch Playtime
Below is a full example implementation of the Playtime SDK. It uses Jetpack Compose to set up a button that leads the user to the Playtime Offerwall. To run the example:
Add the dependency
Add your SDK hash
If you're using an emulator, add it as a test device.
In the future we will update this page with examples for our other wrappers. Please check back soon.
The adjoe Revenue API allows publishers to query user data and generate detailed reports. The required parameter for using this API is the SSP API Token
, which you can obtain from your adjoe Account Manager. You can retrieve a report for all apps, as well as for a specific app.
GET
https://prod.adjoe.zone/v1/ssp-api/<your_token>/aggregation/daily
Required values:
<your_token>: A 32-character hex string provided by your adjoe Account Manager.
You can query data for specific time frames. To query data for a single day, set both start_at
and stop_at
to that day. Data grouping is customizable; by default, it's grouped by date, country, and platform. For alternative groupings, supply a comma-separated list of fields in the groupBy
parameter.
start_at
Date
Start date
stop_at
Date
End date
group_by
String
Possible options: date, sdk_hash,
platform, country
Response: OK Returns a JSON object with the report URL
Content-Type: application/json; charset=utf-8
Content: [ { "SDKHash":"11123ABCDF123123123123123", "StoreID":"de.adjoe.com", "AppName":"happy adjoe app", "Platform": "android", "Date":"2019-02-11", "Revenue":995.00, "Currency": "USD", "eCPM": 209.95, "OfferwallShown":4739, "SDKBootups":275887, "CoinSum":300 } ]
Response: Bad Request "start_at date format is wrong. Please use YYYY-MM-DD"
Content-Type: application/json; charset=utf-8
Content:
Response: Unauthorized "Invalid Token"
Content-Type: application/json; charset=utf-8
Content:
GET
https://prod.adjoe.zone/v1/ssp-api/<your_token>/aggregation/sdkHash/<sdk_hash>/daily
Required values:
<your_token>: A 32-character hex string token provided by your adjoe Account Manager.
<sdk_hash>: The unique identifier for the SDK, also provided by your adjoe Account Manager.
Data can be queried for specific time ranges. To query for a single day, ensure start_at
and stop_at
parameters are the same. The default data grouping is by date and app platform. For custom groupings, input a comma-separated list of desired fields in the group_by
parameter.
start_at
Date
Start date
stop_at
Date
End date
group_by
String
Possible options: date, sdk_hash, platform, country
Response: OK Returns a JSON object with the report URL
Content-Type: application/json; charset=utf-8
Content: [ { "SDKHash":"11123ABCDF123123123123123", "StoreID":"de.adjoe.com", "AppName":"happy adjoe app", "Platform": "android", "Date":"2019-02-11", "Revenue":995.00, "Currency": "USD", "Country" : "DE", "eCPM": 209.95, "OfferwallShown":4739, "SDKBootups":275887, "CoinSum":300 } ]
Response: Unauthorized "Invalid Token"
Content-Type: application/json; charset=utf-8
Content: {"error" : "invalid token"}
Response: Bad Request start_at date format is wrong. Please use YYYY-MM-DD
Content-Type: application/json; charset=utf-8
Content:
Example Request:
Date
Date
SDKHash
The unique identifier to the SDK.
Platform
Android or iOS.
Country
2-letter country code. Example: de
, us
, fr
.
UserUUID
Used by adjoe to identify the user.
eCPM
Revenue
Revenue in USD for this user on this date.
Currency
Type of currency Example: USD or Euro.
OfferwallShown
Number of times the offerwall was shown to all users.
StoreID
Android package name or iOS Appstore ID. Example: com.king.candycrush.
SDKBootups
Count of the SDK initializations.
CoinSum
Sum of the total number of rewards.
Data is available daily from 2:00 UTC, covering the previous day's activities. To ensure successful API queries, initiate calls after 2:00 UTC.
To make all of the features of the Playtime SDK available, you need to initialize it first. This initialization happens asynchronously in the background, with its completion indicated by a callback method. Make sure to initialize the SDK immediately after the app launches and each time it returns to the foreground.
Initialize early: Initialize the SDK as soon as possible after your app starts. This ensures all Playtime SDK features are ready for use right away.
Initialize after your app authentication: Once a user signs up or logs in, initialize the SDK again with the latest user details. This updates the userID within the SDK.
Initialize regularly: For the best user experience, call the init
method every time your app comes into the foreground. Doing so will not affect your app's performance.
Initialization triggers: Call the init
method at the app start and resume (when the app comes back into the foreground).
Important: Initialization must happen on the main thread since it's a UI-related action. Calling any of the init
methods off the main thread could lead to app disruptions.
Pass the following additional options to the Playtime SDK during initialization:
User ID
String
A custom identifier you can assign to each user. If you haven't set one, the Playtime SDK generates it automatically. It is accessible through Playtime.getUserId(Context)
. This ID is necessary for S2S payouts, thus required. Ensure this value is url-safe
and that the value is never empty.
Object
Object
Extensions
Object
When initializing the SDK, you should include additional User Acquisition and Playtime placement parameters. These parameters allow you to track and analyze Playtime's performance within your app.
To make the most of the Playtime SDK, to maximize your revenue and provide the best user experience, use all of these parameters for data-driven optimizations. For instance, you can monitor the performance of different Playtime button placements or determine the effectiveness of different UA sources.
You can provide these parameters in any combination, both at initialization and at any point in the app's lifecycle—such as when a user launches the Playtime Catalog interacts with a campaign or requests a payout.
These values must be url-safe
as they could potentially be returned as query parameters in the S2S Payout request.
UA Network
String
User Acquisition Network. The network through which the user was acquired, e.g., Adwords
, Facebook
, or Organic
.
UA Channel
String
User Acquisition Channel. The channel within the network from which the user was acquired, e.g. incentivized
or video campaigns
.
User Acquisition Sub Publisher Cleartext
String
The cleartext package name of the sub-publisher's app ID within the network from which the user was acquired, e.g., com.domain.appName
.
User Acquisition Sub Publisher Encrypted
String
The encrypted package name or app ID of the sub-publisher's app from the network where the user was acquired.
Placement
String
The placement of the Playtime Catalog inside your app, e.g., "Main Screen"
, "Shop"
, "Interstitial"
, "More Diamonds Screen"
, etc.
Our game recommendations are personalized through algorithms that consider users' preferences and gender information. If a user consents to share their gender and/or birthday, you can share this information with adjoe to enhance the customization of game suggestions.
The code below is for demonstration purposes and can be modified to best suit your app's set-up. The important thing is that you get the user's birthday and gender information from your backend and pass in the data to adjoe when initializing.
The birthday data should be in ISO format. If your data doesn't already look like that, please make sure to format it so that it is. Example: 2023-07-17T22:25:00.000Z
These are optional identifiers used in your backend. They will be provided back in the S2S payout URL.
We recommend to verify the SDK is correctly initialized. Each wrapper provides an Playtime.isInitialized
method for this purpose. When executed, this method returns true
if the SDK is initialized, and false
otherwise. Use IsInitialized
for debugging or to verify SDK initialization before calling other methods.
Important: Do not call Playtime.init
based on the result of isInitialized.
The SDK already performs its own initialization checks. Doing so again may degrade the user experience.
The primary function of the Playtime SDK is showing the catalog to the users. The Playtime catalog lists various campaigns that the users can complete to receive a reward in the app's native in-app currency.
Games displayed to users are chosen programmatically based on their preferences and profile, while the specific campaigns available to them depend on the permissions granted or country.
Advertisers define ad formats and target countries through campaigns, which are then featured in the Playtime Catalog. These campaigns are set by advertisers and allow for rewards once the completion of the campaign conditions are verified through the MMP.
Time-based
Rewards users for the time they spend in the advertised app, e.g. Earn 50 coins per minute for playing a game.
Event-based
Rewards users for achieving a designated combination of events within advertised apps, e.g. in-app purchases, viewing video ads, and/or reaching specified game levels. Users are rewarded after completing each task. Example: "Up to 5 Coins per Task" or "Complete Level 10".
Users need to accept adjoe's Terms of Service (TOS) to use Playtime and access games. Agreeing to the TOS is mandatory before installing any partner apps. After users accept the TOS, we can identify the types of apps/games they have installed, allowing our algorithm to tailor game suggestions on the catalog based on their preferences.
We also ask the user to accept the App Usage Permissions. This allows us to monitor the time spent in each game or app. Without accepting these permissions, users won't be eligible to participate in Playtime campaigns and will be limited to only Advance or Advance+ campaigns.
The Playtime algorithm prioritizes displaying games to users based on their potential to generate maximum revenue and likelihood of being downloaded.
When the placement button for Playtime appears, whether clicked or not, please send us the teaser event. This notifies adjoe when and where the placement is shown, which is crucial for tracking user engagement and enhancing the user experience.
Use playtimeParams to pass in the placement
information, i.e., where in the app the button was shown - for example: "Main Page".
We recommend triggering the catalog via a button or UI element (within the SDK it is housed in a separate activity). Rather than launching the activity directly, we provide an Intent for you to initiate it, enabling, for example, transition animations for a smoother user experience Use the code below to display the adjoe Playtime Offerwall. It is recommended to send any updated PlaytimeParams
when launching the Playtime Catalog.
You can set up a listener to be notified when the Playtime Catalog is opened or closed, with the event type
always being catalog
. To remove the listener, simply call Playtime.removeCatalogListener()
.
getVersion
Returns the internal version code of the Playtime SDK, for example 70
.
getVersionName
Returns the version name of the Playtime SDK, for example 3.0.0
hasAcceptedTOS
Checks whether the user has accepted the adjoe Terms of Service (TOS). Returns true
if the user has accepted the TOS and false
otherwise.
getUserId
Returns the unique ID of the user by which the user is identified.
hasAcceptedUsagePermission
Checks whether the user has given access to the usage statistics. Returns true
when the user has given access, false
otherwise.
The adjoe User Ad Data Report API allows publishers to request user data reports. The required parameter for using this API is the SSP API Token
, which you can obtain from your adjoe Account Manager.
There are two steps to using the User Ad Data Report API:
Get the Report URL: Use your SSP API Token
and Date
to request a URL.
Download the Report: Access the URL to obtain your report.
GET
https://prod.adjoe.zone/v1/ssp-api/<your_token>/user-ad-data-report/app/<your_app_id>?date=[YYYY-MM-DD]
Required values:
<your_token> - 32-character hex string provided by the adjoe Account Manager.
<your_app_id> - Android package name or iOS Appstore ID. Example: com.king.candycrush
Response: OK, Returns a JSON object with the report URL
Content-Type: application/json; charset=utf-8
Content: {"ReportURL": "https://prod-adjoe-user-ad-data.s3.eu-central-1.amazonaws.com/acbd18db4cc2f85cedef654fccc4a4d8/2020-02-01_6f2fb2d3def4f99053edab239195f146.csv"}
Response: Unauthorized "Invalid Token"
Content-Type: application/json; charset=utf-8
Content: {"error" : "invalid token"}
After obtaining the URL, download the report in CSV format. A successful download will prompt an HTTP 200: OK
status, along with the CSV file. An empty file indicates no data is available yet.
Example Report 1:
Example Report 2:
Data is available daily from 2:00 UTC, covering the previous day's activities. To ensure successful API queries, initiate calls after 2:00 UTC. Access to reports is granted after your Account Manager has authorized them. For example, if your report is enabled on 2024-01-01, you can access it from 2:00 UTC on 2024-01-02. Note: Reports for periods before the enablement date, such as before 2024-01-01, are not accessible.
The primary function of PlaytimeWeb is showing the catalog to the users. The Playtime lists various campaigns that the users can complete to receive a reward in your app's native in-app currency.
Games displayed to users are chosen programmatically based on their preferences and profile, while the specific campaigns available to them depend on the permissions granted or country.
Advertisers define ad formats and target countries through campaigns, which are then featured in the Playtime Catalog. These campaigns are set by advertisers and allow for rewards once the completion of the campaign conditions are verified through the . PlaytimeWeb only supports "event-based" campaigns. Meaning that the user will get rewarded for completing different levels or tasks.
Users need to accept adjoe's Terms of Service (TOS) to use Playtime and access games. Agreeing to the TOS is mandatory before installing any partner apps.
The Playtime algorithm prioritizes displaying games to users based on their potential to generate maximum revenue and likelihood of being downloaded.
Published: November 11th, 2024
Breaking Changes 🚨
Adjoe
has been renamed to Playtime
.
Offerwall
has been renamed to Catalog
.
For React Native Only:
user-id
has been renamed to userId
The following APIs have been impacted by these changes. Please update your code so that the correct APIs are used.
Bug fixes 🪲
Fix a crash regarding loading resources in WebView
Remove additional =
in playtime notification for certain translations
Fix not opening installed campaign apps for Android >= 13
Stop using setDataDirectorySuffix
of WebView
Fix crash related to the visibility of AdjoeActivity
Features and Improvements ✨
Add API Reference
Support customisable texts in reward notifications
Automatically redirect users to the app after accepting the Android usage permissions
Open the usage permission screen within the app rather than the Android Settings
Add type definitions in React Native Wrapper
Add enhanced detection of suspicious users
Improve error handling and performance through removal of unused internal classes
Improve security of WebView settings
Update usages of Adjoe
to Playtime
.
Update usages of Offerwall
to Catalog
.
For React Native Only:
Update usages of user-id
to userId
setProfile
- Instead you should use setUserProfile
with PlaytimeOptions
during the init.
canShowOfferwall
/ canShowCatalog
Published: 17 July 2024
Bug fixes 🪲
Fix ANR related to protection library
2.2.1 Has a known ANR, please do not use this version.
Published: 24 May 2024
Bug fixes 🪲
Fix "webpage not available" error which occurred occasionally when returning back to Playtime from the Play Store
Fix Proguard issue that occurred while building a release version of the APK
Improve the SDK's “notification” logic.
Fix exception caused by running multiple processes
Features and Improvements ✨
Deprecate canShowOfferwall
API
Deprecate setProfile
API
Improve Korean translations
Add enhanced detection of suspicious users
Published: 21 March 2024
Bug fixes 🪲
Improve usage permission handling on Android 13+
Features and Improvements ✨
Add enhanced detection of suspicious users
Add cash currency support in reward notifications
Published at: 19 December 2023
Bug fixes
Enhance Fraud detection
Translation fixes for the notifications
Fix for users that were not getting rewarded for the installed apps after they updated an SDK.
Supporting all React Native versions.
Published at: 28 July 2023
Bug fixes
Enhance Fraud detection
Usage collection enhancement
Fixed an inconsistency in the External User ID
You can now use the Adjoe.setUAParams(adjoeParams : AdjoeParams)
to add additional parameters.
Added translation for additional 7 languages ( in, it, ja, ko, pl, pt and tr) in addition to en, de, es, fr
consistent update cross all wrappers to mark this update as the new base line
Published at: 16 Mar 2023
Android 13 support
Depreciation of safetynet and replacing it with play integrity
New fraud update [VPN-detection]
Published at: 11 Nov 2022
Fix issues with notification.
Enhancements and improvements of workmanager and threading.
Bug fixes.
Published at: 14 Sep 2022
Fix issues with rewards.
Allow multiple init without throwing Already Initialised
Exception.
Error visibility enhancement.
Bug fixes.
Published at: 11 Mar 2022
Migrate SDK to Androidx.
Add full support to android12.
Adding android:export
in Manifest.
Update workManager
library to 2.7.1.
Add flag IMMUTABLE and MUTABLE to pendingIntent.
Bug fixes.
Further enhancement.
Published at: 8 Oct 2021
Further enhancements on crash reports
Bugfixes
Published at: 14.09.2021
Additional scenarios to display Advance campaigns.
Enhance crash reports.
Fix Network issues.
Bugfixes.
Published at: 08.06.2021
Added App Info Fields to Campaigns.
Added Support for Advance.
Usage/Reward Enhancements.
Bugfixes.
Published at: 24.03.2021
Made the SDK lighter on permissions.
Published at: 10.03.2021
Resolved potential compatibility issues surrounding the WorkManager library.
Published at: 03.03.2021
Full support for android 11 on targetSDKVersion 30.
Improved the Toast Notification to give users immediate feedback.
Improved the usage collection reliability.
Changed Sub-ID handling with AdjoeParams object to provide further context on the users (such as User Acquisition data and the Playtime placement).
Published at: 28.01.2021
Improved initialization speed.
Improved onboarding user flow on Android 10+.
Bugfix for potential crashes.
Published at: 30.11.2020
Bugfixing for calling the init method outside the main process.
Bugfix for accepting the TOS without a network connection.
Published at: 04.11.2020
Bugfixes for building on Windows.
Published at 29.10.2020
Bugfixes for apps using minified R8/ProGuard builds.
Published at 07.10.2020
Bugfixes.
Published at 25.09.2020
Kotlin: Fixed Adjoe.Options
in Kotlin.
Unity: Added inline documentation.
Unity: The methods now output logs when called inside the Unity Editor.
Published at: 16.09.2020
in USD.
Values for the User Acquisition and Playtime placement information. These values must be url-safe
. More on this .
Birthday and gender data of the app users. This data is used by adjoe to provide the best for the user. More on this .
These are optional identifiers used in your backend. They will be provided back in the .
For iOS users Apple provides an opportunity to use the service, which can be enabled in the device settings. If the user has it enabled, then we cannot track the user’s real IP, since all the requests would be proxied via Apple servers. This can have an impact on our ability to reward users for playing games. In cases where iCloud Private Relay enabled, users would see the following messages asking them to disable it. We will not permit users to play games without disabling this feature.
Added the method Adjoe.isAdjoeProcess
to check whether the current process is the :adjoe
child process. See for a description in which situations to use this.
Added logs to more easily trace and reproduce bugs. See .
date*
date
Reports are queried by date, with only one date allowed per SDK token query. Format:[YYYY-MM-DD]
Date
Date
SDK Hash
The unique identifier to the SDK.
Platform
Android or iOS.
Package Name
Either the Android Package name or the iOS App Store ID of the SDK app.
Country Code
2-letter country code. Example: de
, us
, fr
.
Google Advertiser ID | IDFA
A Google Advertising ID, also known as an Android ID, Android Device ID, or Android Advertising ID (AAID), is Google’s unique device identifier. The IDFA (identifier for advertisers) is a random iOS device identifier given by Apple.
UserUUID
Used by adjoe to identify the user.
External User ID
Used by the publisher to identify the user.
SDKSubID1
Sub ID 1 set in the SDK.
SDKSubID2
Sub ID 2 set in the SDK.
eCPM
Effective Cost Per Mille in USD.
Revenue
Revenue in USD for this user on this date.
Impression Count
The number of impressions for this user on this date.
Adjoe.init()
Playtime.init()
Adjoe.isInitialized()
Playtime.isInitialized()
Adjoe.sendUserEvent()
Playtime.sendUserEvent()
Adjoe.getOfferwallIntent()
Playtime.getCatalogIntent()
Adjoe.setOfferwallListener()
Playtime.setCatalogListener()
Adjoe.removeOfferwallListener()
Playtime.removeCatalogListener()
AdjoeOfferwallListener
PlaytimeCatalogListener
AdjoeNotInitializedException
PlaytimeNotInitializedException
AdjoeInitialisationListener
PlaytimeInitialisationListener
Adjoe.Options
PlaytimeOptions
AdjoeParams
PlaytimeParams
AdjoeGender
PlaytimeGender
AdjoeExtensions
PlaytimeExtensions
Event-Based
Rewards users for achieving a designated combination of events within advertised apps, e.g. in-app purchases, viewing video ads, and/or reaching specified game levels. Users are rewarded after completing each task. Example: "Up to 5 Coins per Task" or "Complete Level 10".