我們知道要如何加入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
end
Vungle沒有Banner Ads, 它自己會pre-load interstitial Ads,iAds無法pre-load interstitial Ads,
上面的說明應該很完整,
基本上只要照抄就可以了
沒有留言:
張貼留言