我們知道要如何加入AdMob Ads,
要加入iAds和Vungle的話,作法很類似,
在這裡我們討論如果要同時支援的話該如何處理,
也就是說,我們可以動態選擇 AdMob, iAds, Vungle,
不管是因為Fill Rate, eCPM或者其它原因...
Add plugin
首先,我們需要在build.settings加入plug-in:
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", }, }, }另外,Android需要增加網路存取的權限
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我們需要針對AdMob,iAds和Vungle各自呼叫ads.init(),
因為callback回傳的參數不同,所以各自傳入不同callback function,
上面的程式裡,我們在callback function裡發現有錯誤時就換下一個Ads,
至於changeToNextAds()是什麼,看下一段
Change Ads Network
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我們透過呼叫ads:setCurrentProvider()來設定新的Ads Network,
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沒有Banner Ads, 它自己會pre-load interstitial Ads,
iAds無法pre-load interstitial Ads,
上面的說明應該很完整,
基本上只要照抄就可以了
沒有留言:
張貼留言