Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
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 Offerwall 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.
How often is the SDK updated?
The SDK is updated every couple of months. Please keep an eye out on our changelog.
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 offerwall?
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 (Playtime), 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 Advance, Advance+, and Playtime Campaigns?
We have more information about this in our docs. Please refer to them here.
What is the use of the GAID?
We use GAID to identify users. We provide these data to MMPs so they can count attribution.
Why does the user need to accept Access to Advertising Info?
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 (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 Offerwall?
Most parts of the Playtime Offerwall 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.
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.
There are 2 parts to implementing and using the Playtime SDK:
Part 1: Intialize the Playtime SDK
Part 2: Launch Playtime
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
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.
2.2.2
2.2.1
2.2.0
Android 16+
Gradle 7.2.2+
minSdkVersion
16+
compileSdkVersion
23+
Androidx apps are fully supported.
Starting April 1st 2025, version 3.0.0 will be the minimum supported version of the Playtime SDK. Please plan to upgrade accordingly.
Follow this guide to configure your app to work with the Playtime SDK using any of our supported wrappers.
Contact your adjoe 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 adjoe 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 Playtime SDK 2.2.2 uses the Play Services Resolver, you can download a version of the adjoe SDK which is compatible wit the Play Services Resolver here: https://pre-releases.adjoe.io/files/playtime/unity/2.2.2/adjoe_sdk_android_unity_2.2.2_psr.unitypackage. It contains only the source code and the AdjoeDependencies.xml file specifying the Playtime SDK.
Add the Playtime 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 Adjoe
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.
The primary function of the Playtime SDK is showing the offerwall to the users. The Playtime 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 . These campaigns are set by advertisers and allow for rewards once the completion of the campaign conditions are verified through the .
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 offerwall 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.
We recommend triggering the offerwall 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 launch the AdjoeActivity
and display the adjoe Playtime Offerwall. It is recommended to send any updated AdjoeParams
when launching the Playtime Offerwall.
You can set up a listener to be notified when the Playtime Offerwall is opened or closed, with the event type
always being offerwall
. To remove the listener, simply call Adjoe.removeOfferwallListener()
.
Looking for older versions of our docs? Find them here.
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 a request fails, we retry five more times, with each attempt spaced 30 seconds apart.
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.
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 .
Use to pass in the placement
information, i.e., where in the app the button was shown - for example: "Main Page".
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.
getVersion
Returns the internal version code of the adjoe SDK, for example 70
.
getVersionName
Returns the version name of the adjoe Playtime SDK, for example 2.1.1
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.
v2.2.0
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.
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
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.
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 Adjoe.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 Offerwall, 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 Offerwall 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 Adjoe.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 Adjoe.init
based on the result of isInitialized.
The SDK already performs its own initialization checks. Doing so again may degrade the user experience.
Playtime (time-based)
Rewards users for the time they spend in the advertised app, e.g. Earn 50 coins per minute for playing a game.
Advance+ (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".
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 .