admob-v2 plugin - test results

If you call ads.show() (without caching the ad) there’s no guarantee that the ad will show immediately. It might take several seconds for it to show up, which isn’t acceptable in many cases. That’s why ads.load() exists.

The reason why ads.load() is necessary for interstitials, is because of performance reasons. It will attempt to cache an ad. When you come to a point in your app where you want to display an ad you call ads.isLoaded() to see if an ad is cached. If it returns true call ads.show() otherwise don’t.

The caching will behave the same for both Android and iOS. 

You just answered question (2), but the major problem is the inconsistency & the current way is not making sense. If I don’t like to preload, it’s my business, why is it necessary? Why Android doesn’t need to? Even if there is no “guarantee”, why is there no callback to indicate any error or success? 

Please just let Corona answer these questions. 

Joe, I’m trying to get answers for you but I have no internet and limited access from my phone.

The issue with .load() not working in the sim is an oversite. It should be fixed soon. I know engineering was working on it today. But in the mean time you can wrap an if statement around it until it gets in.

The plugin is documented on its plugin page. I can’t copy and paste the URL for you at the moment.

Ingemar has addressed the how to use more eloquently than I can.

As for the callbacks in trying to get an answer for that.

Rob

Joe, I’m trying to get answers for you but I have no internet and limited access from my phone.

The issue with .load() not working in the sim is an oversite. It should be fixed soon. I know engineering was working on it today. But in the mean time you can wrap an if statement around it until it gets in.

The plugin is documented on its plugin page. I can’t copy and paste the URL for you at the moment.

Ingemar has addressed the how to use more eloquently than I can.

As for the callbacks in trying to get an answer for that.

Rob

Hi Rob

I know there are documentations for V2, I do have read them, but I am asking the formal documentation to note why ads.load() is necessary for iOS but not for Android, why is there no callback, etc. The current documentation only describes simply how each function is used.

You should ask your engineering about the callback and why ads.load() is a must for iOS but not for Android. 

I really need the callback event for ads since I show ads during a transition and need to know when the user closes the ad to complete the transition.  But on iOS, without the ad event callbacks, my app just gets stuck waiting for the callback that never comes.  This works fine and more or less the same for the other ad plugins I’m using (Vungle, Playhaven) across both Android and iOS.  And even Admob V2 is working this way on Android.  Just not on iOS.  Without a callback is there any other way to detect when an admob ad has been closed?

I agree with Joe, this really needs to be more consistent across platforms, and I would argue across different ad provider plugins.  I realize each provider handles things a bit differently, but surely the advantage of Corona SDK is that (ideally) it would shield me from as many of those differences as possible and provide a common interface to each ad network.  

I’ve been asking for a callback for a long time, there is no way to know when the ad has been shown so you can put up banner ads again or do anything else.

That was the whole point of having a generic ads.() system, so it would be the same, but it isn’t and it doesn’t support everything.

I guess without ads.() things would be 10x worse, it just seems like there are a few pieces that could easily adhere to that standard but don’t for whatever reason.

Thanks to ingmar for posting that fix, it really does help.

Also I am pleased to see the engineers are fixing the issue both with IOS and Android (come on android), you will make alot of people very happy.

And from me a thank you too Tom.

However, while this is good news can I ask why ads.loaded() is doing the same as ads.load() before the temp fix ?

Also if I query ads.loaded() do I get anything back ? a true or false to show its loaded?

(1) Where is the formal documentation?

http://docs.coronalabs.com/daily/plugin/ads-admob-v2/index.html

 

(2) Is ads.load() necessary for iOS? isn’t this just pre-load? Why is it necessary?

It shouldn’t be necessary.  That was a bug that was fixed yesterday in the plugin.  Now you can just call ads.show().

 

(3) In iOS, even I call ads.show() without ads.load, why is there no error (no callbacks)? It’s just plainly silent, which is also wrong!

There should be a call back.  Can you be more specific?

 

(4) Even if ads.load() is called in iOS and the full-screen show successfully, why is there no more callback?

There should be a call back.  Can you be more specific?

 

(5) Android can show the full-screen ad without ads.load & there is callback. Why does Android behave differently than iOS? 

It shouldn’t be necessary.  That was a bug that was fixed yesterday in the plugin.  Now you can just call ads.show().

 

(6) Why can Corona consistently avoid answering these questions?

We’re busy bees with limited amounts of time.

I just conducted a test with a modified version of the AdMob v1 sample app converted to v2 and to use loading.

My listener call back gets called successfully when ad.load() completes.  It also fires when the ad.show() for the banner completes as well.  I did not get a call back for ad.show() in the interstitial presumably because it’s already loaded.  I conducted the same test on my iPhone and got the same results.

Skipping ad.load() completely and only calling ad.show(), it works as expected on iOS and Android. I got a call back.  It  looks like the callbacks are working as I expect them too. 

Rob

At least in my case it would be very useful to have the listener call back when ad.show() is called even if the ad has already been preloaded with ad.load(). I rely on that callback to know I’m showing an ad so I can trigger a scene transition, but I would still like to be able to preload an ad to get rid of the pesky delay waiting for the ad to load.  Maybe I’m going crazy but I swear that was how it was already working on Android prior to last night.  

At least in my case it would be very useful to have the listener call back when ad.show() is called even if the ad has already been preloaded with ad.load()

In your logic to show an ad you can call ads.isLoaded() to check if an ad is ready for display. If that function returns true an ad *will* be shown and you can trigger your scene transition. 

The question is why it is designed this way?

  • When ads.load() is not called, there is callback

  • When ads.load() is called & ads.isLoaded() returns true, there will be no callback

If it is intended design for a reason, we will modify our code to tailor Corona design.

But what if it’s a bug or something that can be improved?

There is a callback for ads.load(). 

If you do not call ads.load() but call just ads.show() you get a call back.

The call back lets you know if the ad was downloaded and is available or not.  If an ad was successfully fetched, you don’t need a call back to actually show it.  Delivering ads is really three actions:

  1. Fetch the ad.

  2. Let  you know if the fetch succeeded or not

  3. if there was a fetched ad show it.

If you call ads.show() without ads.load(), it combines  all three of these actions into one.  For Interstitials, because it takes longer to download, the community wanted to separate the loading and showing process.  The callback is tied to the loading part and not the actual display part. 

.isLoaded() is a convenience function that lets you know if the ad was loaded outside of the callback function. 

Rob

Sorry to report again, but the plugin does not work.

It works in our landscape game but in the portrait game the banners are not shown (they work with the adMob v1 plugin).

The ADB console gives this:

06-14 17:12:37.554: W/Ads(26636): Not enough space to show ad. Needs 601x90 pixels, but only has 600x976 pixels.

Here is the config.lua if it helps:

application =
{    
    content =
    {
        width = 480,
        height = 800,
        scale = “letterbox”,
    },
}
 

Regards,

Damir.

Please file a bug report for this.

Thanks

Rob

Is Admob V2 plugin compatible with both the legacy and new Admob dashboard/reporting? Which are you guys on and any issues with ad serving? 

Ben

It should be. But as soon as you’ve upgraded your legacy account to their new one, you will not see any reporting in the old dashboard.

I upgraded my legacy Admob account a few months ago and all reporting goes to the new dashboard.

You’ll need to upgrade your legacy account, and start using AdmobV2 with the new Ad Unit ID’s in all your apps before Aug 31st otherwise your apps will stop serving Admob ads.

http://www.googblogs.com/legacy-admob-sunset-and-legacy-sdk-deprecation-reminder/