AdMob Rewarded videos not working on iOS

I have implemented rewarded videos in my little game and they work great on Android, really simple, however with the same code ( using my puggle library ) they don’t work on iOS.

They are loaded and displayed properly, and they are definately the “rewardedVideo” type as I am viewing the advert event.

The issue is that the “reward” phase is never reached.

This is using daily build 3056 and again it all works perfectly for Android.

Unfortunately I can’t reproduce the issue. I’ve tested using Corona 3060 and the “reward” event fires after the video completes. Tested on iOS 9 and iOS 10.

As you may already know, the “reward” event will not fire if the video is closed by tapping on the “x” during playback.

BTW.

You need to set up a new adUnitId of type “Rewarded Video” in the AdMob console.

You should not use an existing Interstitial AdUnit ID for rewarded videos.

The new unit is already setup and works. It gets displayed on iOS as a rewarded video ( and just to double-confirm, when watching the ad if I try to close it early it does warn me that doing so will lose the reward, so I can only assume it is definitely displaying as a rewarded video ).

The code works fine on Android and I’ve just tried iOS with daily 3060 and still no luck. It must be something silly I’m doing, I’ll keep investigating.

It sounds like you’re doing everything correctly…

What device/iOS version are you testing on?

It’s an iPad mini 2 with 10.2.1 on it.

I just thought I’d check again on Android in case I’ve managed to break anything since I last tested and nope, still works fine on there. I also realised that there is a “close” phase that also doesn’t get hit on iOS. I’ll keep looking.

OK, I think I’ve found the issue, however, it may be chalked up as “as designed” rather than an actual bug.

When I show a rewarded video I immediately try to load another one. This second loading, while an ad is being displayed, seems to stop the “closed” and “reward” phases ever happening on the first. I’ve now changed it so a new ad is only loaded when those phases are reached and all seems to be working.

Again, maybe this is just because I’m working with ads wrong however it’s strange that it works on Android this way but not iOS.

Yes it is “as-designed”.

There is only one active ad object per adUnitId at any one point in time. If a new ad is loaded the old object is discarded.

The fact that it happens to work on Android is that Android’s Garbage Collection is less aggressive in freeing up old objects so they stay around longer. On iOS the dealloc takes place immediately which nils out the listeners and once the ad has finished playing, it too is deallocated.

Ah right cool, that makes sense. Thanks!

Unfortunately I can’t reproduce the issue. I’ve tested using Corona 3060 and the “reward” event fires after the video completes. Tested on iOS 9 and iOS 10.

As you may already know, the “reward” event will not fire if the video is closed by tapping on the “x” during playback.

BTW.

You need to set up a new adUnitId of type “Rewarded Video” in the AdMob console.

You should not use an existing Interstitial AdUnit ID for rewarded videos.

The new unit is already setup and works. It gets displayed on iOS as a rewarded video ( and just to double-confirm, when watching the ad if I try to close it early it does warn me that doing so will lose the reward, so I can only assume it is definitely displaying as a rewarded video ).

The code works fine on Android and I’ve just tried iOS with daily 3060 and still no luck. It must be something silly I’m doing, I’ll keep investigating.

It sounds like you’re doing everything correctly…

What device/iOS version are you testing on?

It’s an iPad mini 2 with 10.2.1 on it.

I just thought I’d check again on Android in case I’ve managed to break anything since I last tested and nope, still works fine on there. I also realised that there is a “close” phase that also doesn’t get hit on iOS. I’ll keep looking.

OK, I think I’ve found the issue, however, it may be chalked up as “as designed” rather than an actual bug.

When I show a rewarded video I immediately try to load another one. This second loading, while an ad is being displayed, seems to stop the “closed” and “reward” phases ever happening on the first. I’ve now changed it so a new ad is only loaded when those phases are reached and all seems to be working.

Again, maybe this is just because I’m working with ads wrong however it’s strange that it works on Android this way but not iOS.

Yes it is “as-designed”.

There is only one active ad object per adUnitId at any one point in time. If a new ad is loaded the old object is discarded.

The fact that it happens to work on Android is that Android’s Garbage Collection is less aggressive in freeing up old objects so they stay around longer. On iOS the dealloc takes place immediately which nils out the listeners and once the ad has finished playing, it too is deallocated.

Ah right cool, that makes sense. Thanks!