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 )
end
We 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
end
Vungle 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.
沒有留言:
張貼留言