The ayeT-Studios Unity SDK allows you to easily monetize your app and reward your users with in-app currency. Your users get access to our offerwall, allowing them to earn virtual currency.
2022-04-25: v1.8 - Updated to latest Android & iOS SDKs, fixed some warnings, based on Unity
2021 2020-06-11: v1.7.1 - Updated documentation to introduce new parameters to differentiate chargebacks from conversions
2020-07-29: v1.7 - Updated to latest Android & iOS SDKs, based on Unity 2019 LTS 2019-07-19: v1.6 - Updated wrapper & SDKs with adslot changes, recompiled iOS SDK with Swift 5
2019-02-01: v1.5 - Fixed conversion tracking issues under certain conditions (application lifecycle monitoring improved)
2018-12-04: v1.4 - Updated to Android SDK 3.0 - support for API 26+ build targets, bugfixes & improved handling under poor network conditions
2018-09-29: v1.3 - Updated iOS SDK to Xcode 10 and Swift 4.2, stripped debug symbols
2018-07-09: v1.2 - Removed Simulator Code from iOS SDK, fixed iTunes validation issues with Xcode 9+
2018-07-02: v1.1 - Updated Unity SDK (iOS) to Unity 2018 / Swift 4.1 / XCode 9.4, added post-install script for automatic XCode configuration
2018-01-20: v1.0 - Initial Release of our Publisher SDK (Unity)
Eligible Placement & AdSlot Combinations
The below table shows all Placement & AdSlot Type combinations that allow you to utilize the Unity SDK integration.
Placement Type
AdSlot Type
Eligible Integration Type
If you integrate the Unity SDK while using a different Placement & AdSlot combination in the ayeT-Studios dashboard, you won't be able to initialize the Offerwall.
Getting Started
Before you start with the integration, make sure you have:
You will find more details here:
You have to create separate placements and AdSlots for each platform you intend to build on.
Create one Placement and AdSlot for your Android App.
Create one Placement and AdSlot for your iOS App.
The minimum required OS version is iOS 11.0 (and Swift 5.x ABI) and Android 5.1+.
Download the SDK
You can download the lastest version of our publisher package here:
Add The Package To Your Unity Project
Open your Unity Project
Assets -> Import Package -> Custom Package
Select the AyetUnityPlugin_vVersion.unitypackage file
Press the "Import" button to complete the process
*Android Specific: Update Or Create AndroidManifest.xml File
If you're planning to build against Android, please make sure you have an AndroidManifest.xml file in Assets/Plugins/Android/. If no AndroidManifest exists, you can check out the following template: Appendix: AndroidManifest.xml Template.
<activityandroid:name="com.ayetstudios.publishersdk.OfferwallActivity"android:configChanges="orientation|screenSize"> <intent-filterandroid:label="offer"> <actionandroid:name="android.intent.action.VIEW" /> <categoryandroid:name="android.intent.category.DEFAULT" /> <categoryandroid:name="android.intent.category.BROWSABLE" /> <data android:scheme="offer" android:host="com.example.myapplication" /> <!-- Replace with your lower case package name -->
</intent-filter></activity><activity android:name="com.ayetstudios.publishersdk.VideoActivity" android:configChanges="orientation|screenSize" />
Initialize The SDK & Managed User Balances
In this step, we are going to initialize the SDK. We also use callbacks to track the user's account balance - this is optional and not required if you're planning to manage user balances on your own servers.
Attention: The username or external identifier passed in the init call (e.g. username, hashed email address, etc.) will be accessible in the conversion callbacks through the {external_identifier} parameter.
First, the SDK needs to be initialized like this (APP_KEY is the placement identifier you can find in your dashboard in the android or ios placement details):
showOfferwall starts our offerwall activity and displays available tasks for the user to complete.
Unity Example Script
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExampleScript : MonoBehaviour , SdkUserBalance , SdkDeductCallback {
public void userBalanceInitialized (int available_currency, int pending_currency, int spent_currency){
Debug.Log("ExampleScript::userBalanceInitialized => available_currency: " + available_currency.ToString() + " pending_currency: "+pending_currency.ToString() + " spent_currency: " + spent_currency.ToString() );
}
public void userBalanceChanged (int available_currency, int pending_currency, int spent_currency){
Debug.Log("ExampleScript::userBalanceChanged => available_currency: " + available_currency.ToString() + " pending_currency: "+pending_currency.ToString() + " spent_currency: " + spent_currency.ToString() );
}
public void deductSuccess (){
Debug.Log ("ExampleScript::deductSuccess");
}
public void deductFailed (){
Debug.Log ("ExampleScript::deductFailed");
}
void Start () {
}
void Update () {
if (Input.touchCount == 1) {
Touch touch = Input.touches [0];
if (touch.phase == TouchPhase.Ended) {
if (Input.GetTouch (0).position.y > (Screen.height/2)) {
//sdk initialization
AyetSdk.init ("abcde123abcde123abcde123", "user_id_123", this);
} else {
if (Input.GetTouch (0).position.x < (Screen.width/3)) {
//show offerwall
AyetSdk.showOfferwall("offerwall adslot name");
}
else if(Input.GetTouch (0).position.x > ((Screen.width/3)*2)){
//show user current balance
Debug.Log ("ExampleScript Available currency: " + AyetSdk.getAvailableCurrency());
Debug.Log ("ExampleScript Pending currency: " + AyetSdk.getPendingCurrency ());
Debug.Log ("ExampleScript Spent currency: " + AyetSdk.getSpentCurrency ());
}
else {
int amount = 1;
//deduct balance
AyetSdk.deductUserBalance (amount, this);
}
}
}
}
}
}
Proguard Rules / Release Builds
If you're going to use Proguard in your release build to obfuscate your application, make sure to add the following rules to your proguard-rules.pro files:
-keep class com.ayetstudios.publishersdk.messages.** {*;}-keep public class com.ayetstudios.publishersdk.AyetSdk-keepclassmembers class com.ayetstudios.publishersdk.AyetSdk { public *;}-keep public interface com.ayetstudios.publishersdk.interfaces.UserBalanceCallback { *; }-keep public interface com.ayetstudios.publishersdk.interfaces.DeductUserBalanceCallback { *; }-keep class com.ayetstudios.publishersdk.models.VastTagReqData { *; }
It's always highly recommended to test your release builds before publishing them on Google Play to verify that they behave as intended!