All pages
Powered by GitBook
1 of 4

Loading...

Loading...

Loading...

Loading...

Plugins & Wrappers

Flutter

The Flutter SDK allows you to easily monetize your app or website. Your users get access to our offerwall, allowing them to earn currency for completing offers.

This is a non-official Flutter SDK and is NOT supported by ayeT-Studios, but built by the community. You are integrating this SDK at your own risk.

Eligible Placement & AdSlot Combinations

The below table shows all Placement & AdSlot Type combinations that allow you to utilize the Flutter SDK integration.

Placement Type
AdSlot Type
Eligibile Integration Type

Android App

Offerwall

Flutter SDK

iOS App

Offerwall

Flutter SDK

Website

Offerwall

Flutter SDK

If you integrate the Flutter 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:

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 Website.

  • Create one Placement and AdSlot for your Android App.

  • Create one Placement and AdSlot for your iOS App.

Flutter Package

Conversion Callbacks & Currency Handling

Learn about:

  • Setting up callbacks

  • IP Whitelists

  • Securing callbacks using HMAC Security Hash

  • Testing callbacks

Click on the link below:

Unity

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.

Updates History

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.

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

  1. Assets -> Import Package -> Custom Package

  2. Select the AyetUnityPlugin_vVersion.unitypackage file

  3. Press the "Import" button to complete the process

*Android Specific: Update Or Create AndroidManifest.xml File

Add these app permissions to the manifest:

Add our Offerwall activity to your scope:

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):

Implement the SdkUserBalance interface in order to get notified when user balance changes occur:

userBalanceInitialized is triggered after calling AyetSdk.init().

userBalanceChanged is triggered if the user balance changes while running the app.

If you want to spend user currency, for example if the user clicks a "purchaseInAppItem" button, you can utilize the deductUserBalance function:

Implement the SdkDeductCallback interface in order to get notified if a deduction succeeded:

Check User Balances (Managed Currency Handling)

After initializing the SDK, you can check the current user balances anywhere in your code:

Show the Offerwall

showOfferwall starts our offerwall activity and displays available tasks for the user to complete.

Unity Example Script

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:

It's always highly recommended to test your release builds before publishing them on Google Play to verify that they behave as intended!

Conversion Callbacks & Currency Handling

Learn about:

  • Setting up callbacks

  • IP Whitelists

  • Securing callbacks using HMAC Security Hash

  • Testing callbacks

Click on the link below:

Appendix: Assets/Plugins/Android/AndroidManifest.xml Template

Placement Type
AdSlot Type
Eligible Integration Type

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:

🖥️Dashboard Setup
💡Callbacks & Testing

Android App

Offerwall

Unity SDK

iOS App

Offerwall

Unity SDK

<uses-permission android:name="android.permission.INTERNET" /> <!-- mandatory permission -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- optional -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- optional -->
<activity
    android:name="com.ayetstudios.publishersdk.OfferwallActivity"
    android:configChanges="orientation|screenSize">
    <intent-filter android:label="offer">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android: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" />	    
#if UNITY_IOS
AyetSdk.init ("<YOUR_IOS_PLACEMENT_APP_KEY>", "<username (external identifier)>", this);
#endif
#if UNITY_ANDROID
AyetSdk.init ("<YOUR_ANDROID_PLACEMENT_APP_KEY>", "<username (external identifier)>", this);
#endif
public void userBalanceInitialized (int available_currency, int pending_currency, int spent_currency){
        Debug.Log("Your::Script::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("YourScript::userBalanceChanged => available_currency: " + available_currency.ToString() + "  pending_currency: "+pending_currency.ToString() + "  spent_currency: " + spent_currency.ToString() );
}
AyetSdk.deductUserBalance (<DEDUCT_AMOUNT>, this);
public void deductSuccess (){
    Debug.Log ("YourScript::deductSuccess");
}
public void deductFailed (){
    Debug.Log ("YourScript::deductFailed");
}
AyetSdk.getAvailableCurrency();
AyetSdk.getPendingCurrency ();
AyetSdk.getSpentCurrency ();
AyetSdk.showOfferwall("your offerwall adslot name");
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);
                    }
                }
            }
        }

    }
}
-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 { *; }
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication" <!-- Replace with your lower case package name -->
	android:versionCode="1" android:versionName="1.0" xmlns:tools="http://schemas.android.com/tools" android:installLocation="preferExternal">

    <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />

    <application android:theme="@style/UnityThemeSelector" android:icon="@drawable/app_icon" android:label="@string/app_name">
        <activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>

        <activity android:name="com.ayetstudios.publishersdk.OfferwallActivity"
	    android:configChanges="orientation|screenSize">
	    <intent-filter android:label="offer">
	        <action android:name="android.intent.action.VIEW" />
	        <category android:name="android.intent.category.DEFAULT" />
	        <category android:name="android.intent.category.BROWSABLE" />
	        <data android:scheme="offer" android:host="com.example.myapplication" /> <!-- Replace with your lower case package name -->
	    </intent-filter>
	</activity>

    </application>
    <uses-permission android:name="android.permission.INTERNET" /> <!-- mandatory permission -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- optional -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- optional -->
</manifest>	                
Appendix: AndroidManifest.xml Template.

React Native

This covers the ayeT-Studios React Native Publisher SDK. This npm package is a wrapper for our web offerwall that allows effortless integration in react native apps.

Eligible Placement & AdSlot Combinations

The table below shows all Placement & AdSlot Type combinations that allow you to utilize the React Native SDK integration.

Placement Type
AdSlot Type
Eligible Integration Type

Website

Offerwall

React Native SDK

If you integrate the React Native 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:

When working on multiple platforms, we recommend a single "Website" placement and a separate "Offerwall" adslot for each.

This allows better targeting, offer control and individual reporting and history & earnings for every user are available cross-platform:

  • One "Offerwall" adslot for your Website.

  • One "Offerwall" adslot for the associated React Native Android App.

  • One "Offerwall" adslot for the associated React Native iOS App.

Integration Docs

Example App

You can check out our example app here:

Conversion Callbacks & Currency Handling

Learn about:

  • Setting up callbacks

  • IP Whitelists

  • Securing callbacks using HMAC Security Hash

  • Testing callbacks

Click on the link below:

Dashboard Setup
Callbacks & Testing
🖥️
💡
🖥️Dashboard Setup
💡Callbacks & Testing
LogoGitHub - ayetstudios/ayetstudios_flutter_sdk: AyeT-Studios Offerwall Flutter SDKGitHub
Logonpm: ayetsdknpm
LogoGitHub - ayetstudios/ayetstudios_react_native_sdk_demoGitHub
AyeT-Studios React Native SDK Example App
488KB
AyetUnityPlugin_v1.8.unitypackage