For iAds and Vungle, we can use the similar way to add them.
We just consider how to support multiple networks here.
That it, we want to select AdMob, iAds or Vungle dynamically, no matter it is for Fill Rate, eCPM or any other reasons.
Add plugin
First, we need add plug-in in build.settings:
settings = { plugins = { ["plugin.google.play.services"] = { publisherId = "com.coronalabs" }, ["CoronaProvider.ads.iads"] = { publisherId = "com.coronalabs", supportedPlatforms = { iphone=true, ["iphone-sim"]=true }, }, ["CoronaProvider.ads.vungle"] = { publisherId = "com.vungle", }, }, android = { usesPermissions = { "android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", }, }, }
Init the Ads
local adsProvider = {"adMob1","adMob2","vungle","iAds"} local ads = require( "ads" ) local adMobAdProvider = "admob" local iAdsAdProvider = "iads" local vungleAdProvider = "vungle" local vungleAppId = "55e4xxxxxx" local bannerAppID = "ca-app-pub-xxxxxx" local interstitialAppID = "ca-app-pub-xxxxxx" local appID = "com.gmail.MyCompany.App" if ( isAndroid ) then bannerAppID = "ca-app-pub-xxxxx" interstitialAppID = "ca-app-xxxxxx" vungleAppId = "com.gmail.My_Company.App" end local lastAdsTypeShown = "none" local currentAds = 1 local function adMobListener( event ) local msg = event.response -- Quick debug message regarding the response from the library print( "Message from the adMob library: ", msg ) if (event.type == "banner") then if ( event.isError ) then changeToNextAds() else end elseif(event.type == "interstitial") then if ( event.isError ) then changeToNextAds() elseif ( event.phase == "loaded" ) then elseif ( event.phase == "shown" ) then end end end local function iAdsListener( event ) local msg = event.response print("Message received from the iAds library: ", msg) if event.isError then changeToNextAds() else end end local function vungleListener( event ) print("Message received from the vungleListener library: ", event.type) if ( event.type == "adStart" and event.isError ) then changeToNextAds() elseif ( event.type == "adEnd" ) then -- Ad was successfully shown and ended; hide the overlay so the app can resume. else print( "Received event", event.type ) end return true end function adsInit() ads.init( adMobAdProvider, bannerAppID, adMobListener ) if(isAndroid == false) then ads.init( iAdsAdProvider, appID, iAdsListener ) end ads.init( vungleAdProvider, vungleAppId, vungleListener ) endWe have to call ads.init() for AdMob,iAds and Vungle separately.
The parameters in their callback functions are different.
In above codes, we change to next Ads network when we get error.
Change Ads Network
We set new Ads network by function ads:setCurrentProvider().
local function changeToNextAds() currentAds = currentAds + 1 if(currentAds > 3) then currentAds = 1 end if(adsProvider[currentAds] == "iAds") then ads:setCurrentProvider(iAdsAdProvider) elseif(adsProvider[currentAds] == "vungle") then ads:setCurrentProvider(vungleAdProvider) else ads:setCurrentProvider(adMobAdProvider) end end
Show Ads
function showAds(type,px,py) if(adsProvider[currentAds] == "adMob") then if(type == "banner") then ads.show( type, { x=px, y=py, appId=bannerAppID} ) return true elseif(type == "interstitial") then if(ads.isLoaded(type))then ads.show( type, { x=px, y=py, appId=interstitialAppID } ) return true else return false end end elseif(adsProvider[currentAds] == "vungle") then if (type == "interstitial" and ads.isAdAvailable() ) then ads.show( "interstitial" ) return true else return false end elseif(adsProvider[currentAds] == "iAds") then ads.show( type, { x=px, y=py} ) return true end return false end function loadAds() if(adsProvider[currentAds] == "adMob") then ads.load( "interstitial", { appId=interstitialAppID} ) end endVungle does not have Banner Ads and it will pre-load interstitial Ads itself.
iAds cannot pre-load interstitial Ads,
The codes shown above are very completed.
You can just copy them directly and make it work.
沒有留言:
張貼留言