Git Product home page Git Product logo

defold-maxsdk's Introduction

AppLovin Max SDK

This is a native extension for Defold engine with partial implementation of AppLovin Max SDK. Compatible with Default 1.4.0+ (to use with earlier versions see specific releases.

ATTENTION! Currently only Android SDK is supported! No iOs support in current implementation! Even for Android only AdColony, AppLovin, Google AdMob, InMobi, ironSource, Meta Audience Network, myTarget, Tapjoy, Unity Ads, Vungle, Yandex mediation adapters are supported.

Supported ad types: Interstitials, Rewarded Ads, Banners, MRECs

Used AppLovin Max SDK v11.6.0.

Disclaimer: This extension is independent and unofficial, and not associated with AppLovin in any way.

Installation

You can use the Max SDK extension in your own project by adding this project as a Defold library dependency. Open your game.project file and in the dependencies field under project add:

https://github.com/alexeyfeskov/defold-maxsdk/archive/master.zip

or point to the ZIP file of a specific release.

Android

Since some mediation adapters requires minSdk 19 (Android 4.4) needs to set minimum_sdk_version = 19 (or above) in game.project file.

Add SDK key from Applovin Dashboard and Google AdMob app ID to game.project file by adding lines:

[applovin]
sdk_key_android = YOUR_SDK_KEY_HERE
admob_appid_android = YOUR_ADMOD_APPID_HERE

Example

See the example folder for understand how to use extension. Especially ads.gui_script file.

LUA Api

Please, read original Android API docs

---------------------------------------
-- Initialize SDK and start load ads --
---------------------------------------
if maxsdk then
    -- To enable LDU with geolocation https://developers.facebook.com/docs/audience-network/guides/ccpa
    maxsdk.set_fb_data_processing_options("LDU", 0, 0)
    maxsdk.set_has_user_consent(true) -- GDPR
    maxsdk.set_is_age_restricted_user(false)
    maxsdk.set_do_not_sell(false) -- CCPA for all others mediated networks

    maxsdk.set_muted(false)
    maxsdk.set_verbose_logging(true)
    
    maxsdk.set_callback(maxsdk_callback)
    maxsdk.initialize()
end

-----------------------
-- Start loading ads --
-----------------------
if maxsdk then
    -- After SDK was initialized (`maxsdk.MSG_INITIALIZATION` event) - you can start loading ads
    maxsdk.load_interstitial(interstitial_ad_unit)
    maxsdk.load_rewarded(rewarded_ad_unit)
    maxsdk.load_banner(banner_ad_unit, maxsdk.SIZE_BANNER)
    -- Supported banner sizes:
    -- maxsdk.SIZE_BANNER
    -- maxsdk.SIZE_LEADER
    -- maxsdk.SIZE_MREC (use separate ad_unit, all other APIs are same to banners)

    -- To validate integration you can use Mediation Debugger
    -- https://dash.applovin.com/documentation/mediation/android/testing-networks/mediation-debugger
    maxsdk.open_mediation_debugger()
end

--------------
-- Show ads --
--------------
-- all `show_***` functions have optional `string` parameter to define placement
if maxsdk and maxsdk.is_interstitial_loaded() then
    maxsdk.show_interstitial()
end

if maxsdk and maxsdk.is_rewarded_loaded() then
    maxsdk.show_rewarded()
end

if maxsdk and maxsdk.is_banner_loaded() then
    maxsdk.show_banner(maxsdk.POS_TOP_CENTER)
    -- Supported banner positions:
    -- maxsdk.POS_BOTTOM_CENTER
    -- maxsdk.POS_BOTTOM_LEFT
    -- maxsdk.POS_BOTTOM_RIGHT
    -- maxsdk.POS_NONE
    -- maxsdk.POS_TOP_LEFT
    -- maxsdk.POS_TOP_CENTER
    -- maxsdk.POS_TOP_RIGHT
    -- maxsdk.POS_CENTER

    -- Also you can: temporary hide banner
    maxsdk.hide_banner()
    -- ..show in other position
    maxsdk.show_banner(maxsdk.POS_BOTTOM_CENTER)
    -- ..or unload
    maxsdk.destroy_banner()
end

------------------------
-- Receive SDK events --
------------------------
function maxsdk_callback(self, message_id, message)
    if message_id == maxsdk.MSG_INITIALIZATION then
        print("MSG_INITIALIZATION")

    elseif message_id == maxsdk.MSG_INTERSTITIAL then
        if message.event == maxsdk.EVENT_CLOSED then
            print("EVENT_CLOSED: Interstitial AD closed")
        elseif message.event == maxsdk.EVENT_CLICKED then
            print("EVENT_CLICKED: Interstitial AD clicked")
        elseif message.event == maxsdk.EVENT_FAILED_TO_SHOW then
            print("EVENT_FAILED_TO_SHOW: Interstitial AD failed to show", message.code, message.error)
        elseif message.event == maxsdk.EVENT_OPENING then
            print("EVENT_OPENING: Interstitial AD is opening")
        elseif message.event == maxsdk.EVENT_FAILED_TO_LOAD then
            print("EVENT_FAILED_TO_LOAD: Interstitial AD failed to load", message.code, message.error)
        elseif message.event == maxsdk.EVENT_LOADED then
            print("EVENT_LOADED: Interstitial AD loaded. Network:", message.network)
        elseif message.event == maxsdk.EVENT_NOT_LOADED then
            print("EVENT_NOT_LOADED: can't call show_interstitial() before EVENT_LOADED", message.code, message.error)
        elseif message.event == maxsdk.EVENT_REVENUE_PAID then
            print("EVENT_REVENUE_PAID: Interstitial AD revenue: ", message.revenue, message.network)
        end

    elseif message_id == maxsdk.MSG_REWARDED then
        if message.event == maxsdk.EVENT_CLOSED then
            print("EVENT_CLOSED: Rewarded AD closed")
        elseif message.event == maxsdk.EVENT_FAILED_TO_SHOW then
            print("EVENT_FAILED_TO_SHOW: Rewarded AD failed to show", message.code, message.error)
        elseif message.event == maxsdk.EVENT_OPENING then
            print("EVENT_OPENING: Rewarded AD is opening")
        elseif message.event == maxsdk.EVENT_FAILED_TO_LOAD then
            print("EVENT_FAILED_TO_LOAD: Rewarded AD failed to load", message.code, message.error)
        elseif message.event == maxsdk.EVENT_LOADED then
            print("EVENT_LOADED: Rewarded AD loaded. Network:", message.network)
        elseif message.event == maxsdk.EVENT_NOT_LOADED then
            print("EVENT_NOT_LOADED: can't call show_rewarded() before EVENT_LOADED", message.code, message.error)
        elseif message.event == maxsdk.EVENT_EARNED_REWARD then
            print("EVENT_EARNED_REWARD: Reward: ", message.amount, message.type)
        elseif message.event == maxsdk.EVENT_REVENUE_PAID then
            print("EVENT_REVENUE_PAID: Rewarded AD revenue: ", message.revenue, message.network)
        end

    elseif message_id == maxsdk.MSG_BANNER then
        if message.event == maxsdk.EVENT_LOADED then
            print("EVENT_LOADED: Banner AD loaded. Network:", message.network)
        elseif message.event == maxsdk.EVENT_OPENING then
            print("EVENT_OPENING: Banner AD is opening")
        elseif message.event == maxsdk.EVENT_FAILED_TO_LOAD then
            print("EVENT_FAILED_TO_LOAD: Banner AD failed to load", message.code, message.error)
        elseif message.event == maxsdk.EVENT_FAILED_TO_SHOW then
            print("EVENT_FAILED_TO_SHOW: Banner AD failed to show", message.code, message.error)
        elseif message.event == maxsdk.EVENT_EXPANDED then
            print("EVENT_EXPANDED: Banner AD expanded")
        elseif message.event == maxsdk.EVENT_COLLAPSED then
            print("EVENT_COLLAPSED: Banner AD coppalsed")
        elseif message.event == maxsdk.EVENT_CLICKED then
            print("EVENT_CLICKED: Banner AD clicked")
        elseif message.event == maxsdk.EVENT_CLOSED then
            print("EVENT_CLOSED: Banner AD closed")
        elseif message.event == maxsdk.EVENT_DESTROYED then
            print("EVENT_DESTROYED: Banner AD destroyed")
        elseif message.event == maxsdk.EVENT_NOT_LOADED then
            print("EVENT_NOT_LOADED: can't call show_banner() before EVENT_LOADED", message.code, message.error)
        elseif message.event == maxsdk.EVENT_REVENUE_PAID then
            print("EVENT_REVENUE_PAID: Banner AD revenue: ", message.revenue, message.network)
        end
    end
end

Feel free to push a Pull Request with other features implementation.

defold-maxsdk's People

Contributors

alexeyfeskov avatar dr-klaus avatar agulev avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.