Vungle reliability

Hi all,

I’m currenlty developping an iOS/Android game with Corona, and I’m relying on Vungle to display video ads, which is the only one supported by Corona to provide video ads I’m aware of.

During my tests, I encountered many many issues with Vungle video ads, on both iOS and Android. I recently run some tests focused on Android, and the very bad results I get are the reason I seriously doubt of the reliability of this ad provider.

I built with Corona simulator 2015.2772.

I tested on the following devices:

  • Galaxy Note 3 with Android 5.0

  • Google Nexus 7 2012 with Android 5.1.1

  • HTC Sensation with Android 4.0.3

  • Wiko Cink Slim with Android 4.1.1

All these devices run the same version of my app, and are connected on the same wifi.

I tested with a Vungle App Id flagged as “Test Mode”, and one “Active”. Here are the results are get, expressed in approximate percent of success:

- Galaxy Note 3: Test Mode: 90% ; Active: 60%

- Nexus 7: Test Mode: 40% ; Active: 60%

- HTC Sensation: Test Mode: 0% ; Active: 0%

- Wiko: Test Mode: 0% ; Active: 50%

These results are really worrying. On some device, Vungle video ads just never work.

When it doesn’t work, the call to ads.init(“vungle”, vungleId, vungleListener) never triggers the vungleListener callback function. Even on the most successful devices, it never works at 100%. Sometimes, after 2 ads, it stops working. I have to kill the app or sometimes clear the data and relaunch it to make it work again. All this seems quite random.

I tried many other things, like changing the device langage, or connecting through a VPN to test if I had better luck in different countries, but it didn’t seem to affect something.

Here are my questions:

  • Do you encounter similar issues with Vungle?

  • Is it an issue on Vungle side, or on Corona plugin side?

Thank you

Yannick

When it doesn’t work, sometimes I get that just after the call to ads.init(“vungle” …)

E/Vungle ( 5182): VunglePub initialization failed E/Vungle ( 5182): com.vungle.publisher.cb E/Vungle ( 5182): at com.vungle.publisher.inject.ConfigurablePublisherModule.b(vungle:171) E/Vungle ( 5182): at com.vungle.publisher.inject.ConfigurablePublisherModule$$ModuleAdapter$ProvideOldAdTempDirectoryProvidesAdapter.get(vungle:183) E/Vungle ( 5182): at com.vungle.publisher.inject.ConfigurablePublisherModule$$ModuleAdapter$ProvideOldAdTempDirectoryProvidesAdapter.get(vungle:147) E/Vungle ( 5182): at com.vungle.publisher.VunglePubBase.init(vungle:91) E/Vungle ( 5182): at CoronaProvider.ads.vungle.LuaLoader.init(LuaLoader.java:173) E/Vungle ( 5182): at CoronaProvider.ads.vungle.LuaLoader$InitWrapper.invoke(LuaLoader.java:143) E/Vungle ( 5182): at com.ansca.corona.JavaToNativeShim.nativeResize(Native Method) E/Vungle ( 5182): at com.ansca.corona.JavaToNativeShim.resize(JavaToNativeShim.java:378) E/Vungle ( 5182): at com.ansca.corona.graphics.opengl.CoronaGLSurfaceView$CoronaRenderer.onSurfaceChanged(CoronaGLSurfaceView.java:378) E/Vungle ( 5182): at com.ansca.corona.graphics.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1612) E/Vungle ( 5182): at com.ansca.corona.graphics.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1378)

When I get this error, calling ad.isAdPlayable gives me that error, even if I’ve already called ads.init:

W/Vungle ( 6091): Please call VunglePub.init() before isAdPlayable()

When it works and it managed to show a video ad, I get this error. That’s weird to get this exception since it succeeded in showing an ad.

I/ActivityManager(10411): do not start freezing screen for locked container getKeyguardshowstate = false E/Parcel (10411): Class not found when unmarshalling: com.vungle.publisher.c E/Parcel (10411): java.lang.ClassNotFoundException: com.vungle.publisher.c E/Parcel (10411): at java.lang.Class.classForName(Native Method) E/Parcel (10411): at java.lang.Class.forName(Class.java:308) E/Parcel (10411): at java.lang.Class.forName(Class.java:272) E/Parcel (10411): at android.os.Parcel.readParcelableCreator(Parcel.java:2275) E/Parcel (10411): at android.os.Parcel.readParcelable(Parcel.java:2239) E/Parcel (10411): at android.os.Parcel.readValue(Parcel.java:2146) E/Parcel (10411): at android.os.Parcel.readArrayMapInternal(Parcel.java:2479) E/Parcel (10411): at android.os.BaseBundle.unparcel(BaseBundle.java:221) E/Parcel (10411): at android.os.BaseBundle.getString(BaseBundle.java:918) E/Parcel (10411): at android.content.Intent.getStringExtra(Intent.java:5386) E/Parcel (10411): at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1803) E/Parcel (10411): at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1355) E/Parcel (10411): at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4637) E/Parcel (10411): at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4480) E/Parcel (10411): at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:140) E/Parcel (10411): at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3019) E/Parcel (10411): at android.os.Binder.execTransact(Binder.java:446) E/Parcel (10411): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.vungle.publisher.c" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]] E/Parcel (10411): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) E/Parcel (10411): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) E/Parcel (10411): at java.lang.ClassLoader.loadClass(ClassLoader.java:469) E/Parcel (10411): ... 17 more E/Parcel (10411): Suppressed: java.lang.ClassNotFoundException: com.vungle.publisher.c E/Parcel (10411): at java.lang.Class.classForName(Native Method) E/Parcel (10411): at java.lang.BootClassLoader.findClass(ClassLoader.java:781) E/Parcel (10411): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) E/Parcel (10411): at java.lang.ClassLoader.loadClass(ClassLoader.java:504) E/Parcel (10411): ... 18 more E/Parcel (10411): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available I/ActivityManager(10411): START u0 {flg=0x30000000 cmp=com.saladgamer.supermemory2/com.vungle.publisher.FullScreenAdActivity (has extras)} from uid 10281 on display 0

I also found this error in the log, just after trying to init or show Vungle. But my build.settings properly requires the “plugin.google.play.services”:

E/GooglePlayServicesUtil( 4893): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.

Hope it helps…

I’m surprised you’ve had problems with Vungle tbh, we’ve been using Vungle for about 2 years and of all the ad networks we’ve used over that time they’ve been the most reliable.

The fact you’re seeing this message:

Please call VunglePub.init() before isAdPlayable()

makes me wonder whether you’re accidentally overriding your “ads” object between calling init() and calling isAdPlayable(), or something like that.

E.g.

local ads = requires("ads") ads.init(some, init, params) --override ads = require("ads") ads.isAdPlayable()

That’s a simplified example (and in fact that may still work if require(“ads”) returns the same table the second time it’s called) - but hopefully it can help pinpoint a potential coding error if there is one.

Hi,

I spent the whole day doing some tests to try to understand what’s going on with my Vungle implementation. And I now conclude that Vungle is just unusable for me. I’m glad for you that it works as expected, but I don’t understand how you managed to do so.

I started a new project from scratch to try in a clean environment. Here is my app:

local ads = require( "ads" ) local text = display.newText("", 20, 20) local function vungleAdListener(event) text.text = "listener " .. tostring(event.type) .. " - isError: " .. tostring(event.isError) end text.text = "init" ads.init( "vungle", "###", vungleAdListener )

And the plugins in my build.settings:

 plugins = { ["plugin.google.play.services"] = { publisherId = "com.coronalabs" }, ["CoronaProvider.ads.vungle"] = { publisherId = "com.vungle", }, },

And I get pretty much the same results than with my full game. I launched the app on my 4 devices, with “test” and “active”, and waited 2 minutes to see if the listener is called. On some devices, the listener is never called. At best, it’s called 50% of the time. But during some period of time, it’s even worst. For example, during 2 hours, it was never called on any of my devices.

What I find is the first time the app is installed, the ads load fine. Any subsequent launch won’t trigger the listener. Delete the app from the device, install again and it works as expected. My tests are using Test Mode and were built using the latest daily build.

I sent an email to Vungle support 5 days ago regarding this issue but haven’t heard back.

Dave

When it doesn’t work, sometimes I get that just after the call to ads.init(“vungle” …)

E/Vungle ( 5182): VunglePub initialization failed E/Vungle ( 5182): com.vungle.publisher.cb E/Vungle ( 5182): at com.vungle.publisher.inject.ConfigurablePublisherModule.b(vungle:171) E/Vungle ( 5182): at com.vungle.publisher.inject.ConfigurablePublisherModule$$ModuleAdapter$ProvideOldAdTempDirectoryProvidesAdapter.get(vungle:183) E/Vungle ( 5182): at com.vungle.publisher.inject.ConfigurablePublisherModule$$ModuleAdapter$ProvideOldAdTempDirectoryProvidesAdapter.get(vungle:147) E/Vungle ( 5182): at com.vungle.publisher.VunglePubBase.init(vungle:91) E/Vungle ( 5182): at CoronaProvider.ads.vungle.LuaLoader.init(LuaLoader.java:173) E/Vungle ( 5182): at CoronaProvider.ads.vungle.LuaLoader$InitWrapper.invoke(LuaLoader.java:143) E/Vungle ( 5182): at com.ansca.corona.JavaToNativeShim.nativeResize(Native Method) E/Vungle ( 5182): at com.ansca.corona.JavaToNativeShim.resize(JavaToNativeShim.java:378) E/Vungle ( 5182): at com.ansca.corona.graphics.opengl.CoronaGLSurfaceView$CoronaRenderer.onSurfaceChanged(CoronaGLSurfaceView.java:378) E/Vungle ( 5182): at com.ansca.corona.graphics.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1612) E/Vungle ( 5182): at com.ansca.corona.graphics.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1378)

When I get this error, calling ad.isAdPlayable gives me that error, even if I’ve already called ads.init:

W/Vungle ( 6091): Please call VunglePub.init() before isAdPlayable()

When it works and it managed to show a video ad, I get this error. That’s weird to get this exception since it succeeded in showing an ad.

I/ActivityManager(10411): do not start freezing screen for locked container getKeyguardshowstate = false E/Parcel (10411): Class not found when unmarshalling: com.vungle.publisher.c E/Parcel (10411): java.lang.ClassNotFoundException: com.vungle.publisher.c E/Parcel (10411): at java.lang.Class.classForName(Native Method) E/Parcel (10411): at java.lang.Class.forName(Class.java:308) E/Parcel (10411): at java.lang.Class.forName(Class.java:272) E/Parcel (10411): at android.os.Parcel.readParcelableCreator(Parcel.java:2275) E/Parcel (10411): at android.os.Parcel.readParcelable(Parcel.java:2239) E/Parcel (10411): at android.os.Parcel.readValue(Parcel.java:2146) E/Parcel (10411): at android.os.Parcel.readArrayMapInternal(Parcel.java:2479) E/Parcel (10411): at android.os.BaseBundle.unparcel(BaseBundle.java:221) E/Parcel (10411): at android.os.BaseBundle.getString(BaseBundle.java:918) E/Parcel (10411): at android.content.Intent.getStringExtra(Intent.java:5386) E/Parcel (10411): at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1803) E/Parcel (10411): at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1355) E/Parcel (10411): at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4637) E/Parcel (10411): at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4480) E/Parcel (10411): at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:140) E/Parcel (10411): at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3019) E/Parcel (10411): at android.os.Binder.execTransact(Binder.java:446) E/Parcel (10411): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.vungle.publisher.c" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]] E/Parcel (10411): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) E/Parcel (10411): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) E/Parcel (10411): at java.lang.ClassLoader.loadClass(ClassLoader.java:469) E/Parcel (10411): ... 17 more E/Parcel (10411): Suppressed: java.lang.ClassNotFoundException: com.vungle.publisher.c E/Parcel (10411): at java.lang.Class.classForName(Native Method) E/Parcel (10411): at java.lang.BootClassLoader.findClass(ClassLoader.java:781) E/Parcel (10411): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) E/Parcel (10411): at java.lang.ClassLoader.loadClass(ClassLoader.java:504) E/Parcel (10411): ... 18 more E/Parcel (10411): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available I/ActivityManager(10411): START u0 {flg=0x30000000 cmp=com.saladgamer.supermemory2/com.vungle.publisher.FullScreenAdActivity (has extras)} from uid 10281 on display 0

I also found this error in the log, just after trying to init or show Vungle. But my build.settings properly requires the “plugin.google.play.services”:

E/GooglePlayServicesUtil( 4893): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.

Hope it helps…

I’m surprised you’ve had problems with Vungle tbh, we’ve been using Vungle for about 2 years and of all the ad networks we’ve used over that time they’ve been the most reliable.

The fact you’re seeing this message:

Please call VunglePub.init() before isAdPlayable()

makes me wonder whether you’re accidentally overriding your “ads” object between calling init() and calling isAdPlayable(), or something like that.

E.g.

local ads = requires("ads") ads.init(some, init, params) --override ads = require("ads") ads.isAdPlayable()

That’s a simplified example (and in fact that may still work if require(“ads”) returns the same table the second time it’s called) - but hopefully it can help pinpoint a potential coding error if there is one.

Hi,

I spent the whole day doing some tests to try to understand what’s going on with my Vungle implementation. And I now conclude that Vungle is just unusable for me. I’m glad for you that it works as expected, but I don’t understand how you managed to do so.

I started a new project from scratch to try in a clean environment. Here is my app:

local ads = require( "ads" ) local text = display.newText("", 20, 20) local function vungleAdListener(event) text.text = "listener " .. tostring(event.type) .. " - isError: " .. tostring(event.isError) end text.text = "init" ads.init( "vungle", "###", vungleAdListener )

And the plugins in my build.settings:

 plugins = { ["plugin.google.play.services"] = { publisherId = "com.coronalabs" }, ["CoronaProvider.ads.vungle"] = { publisherId = "com.vungle", }, },

And I get pretty much the same results than with my full game. I launched the app on my 4 devices, with “test” and “active”, and waited 2 minutes to see if the listener is called. On some devices, the listener is never called. At best, it’s called 50% of the time. But during some period of time, it’s even worst. For example, during 2 hours, it was never called on any of my devices.

What I find is the first time the app is installed, the ads load fine. Any subsequent launch won’t trigger the listener. Delete the app from the device, install again and it works as expected. My tests are using Test Mode and were built using the latest daily build.

I sent an email to Vungle support 5 days ago regarding this issue but haven’t heard back.

Dave

Hi Dave, I am experience the same behaviour with my Vungle test implementation. First ever load test ads displays fine - reload the app and Vungle doesn’t seem to initialise or cache on boot-up. Did you end up finding the reason for this from Vungle?

Simon

Hi Simon, never heard from Vungle but I removed all code from the Vungle listener except in “adStart” event.isError, where I switch to a different ad provider. ads.show( “interstitial” ) is placed outside in another function. It seems to have fixed the problem.

Dave

Hi Dave, I am experience the same behaviour with my Vungle test implementation. First ever load test ads displays fine - reload the app and Vungle doesn’t seem to initialise or cache on boot-up. Did you end up finding the reason for this from Vungle?

Simon

Hi Simon, never heard from Vungle but I removed all code from the Vungle listener except in “adStart” event.isError, where I switch to a different ad provider. ads.show( “interstitial” ) is placed outside in another function. It seems to have fixed the problem.

Dave