Congratulations!
What was the effect of localisation on revenue from Brazil, if you don’t mind?
Congratulations!
What was the effect of localisation on revenue from Brazil, if you don’t mind?
Congratulations!
Could you share some details on these crashes?
Brazil is consistently in the top 2 countries for ad views and downloads. Unfortunately the eCPM for those ads is low, so they haven’t impacted my revenue much.
The united states provides most of my revenue, with far fewer ad views. Japan is #2 for revenue in the last 90 days.
I still think it was the right thing to do, of course. I think it’s really neat that the people of Brazil continue to enjoy the game in their native language! They’re friendly, and most give me good reviews.
I’ll be happy to send you what I can. The Play Console is light on details, unfortunately.
With Instant apps, they must wrap your code in their own libraries, since some of the crashes appear to be Google’s fault.
Screenshot below of the top offenders. I’ve been plagued by most of these for months, with really useless stack traces. I never know if it is Defold or one of my dependencies (like unity ads, GPGS).
Here’s an example stack trace that I’ve been getting since I released to production last year.
This one happened on Android 11, affecting a few hundred people yesterday. The devices are quite varied. The usual mix of Chinese ones, but also several Samsung models.
java.lang.NoClassDefFoundError:
at androidx.core.view.ViewCompat.<clinit> (ViewCompat.java:1199)
at androidx.core.view.ViewCompat.dispatchUnhandledKeyEventBeforeHierarchy (ViewCompat.java:3802)
at androidx.core.view.KeyEventDispatcher.dispatchBeforeHierarchy (KeyEventDispatcher.java:63)
at androidx.core.app.ComponentActivity.dispatchKeyEvent (ComponentActivity.java:137)
at com.android.internal.policy.DecorView.dispatchKeyEvent (DecorView.java:403)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent (ViewRootImpl.java:6090)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:5958)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5451)
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:5508)
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:5474)
at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:5626)
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:5482)
at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:5683)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5455)
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:5508)
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:5474)
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:5482)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5455)
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:5508)
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:5474)
at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:5659)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent (ViewRootImpl.java:5819)
at android.view.inputmethod.InputMethodManager$PendingEvent.run (InputMethodManager.java:3210)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback (InputMethodManager.java:2752)
at android.view.inputmethod.InputMethodManager.finishedInputEvent (InputMethodManager.java:2743)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished (InputMethodManager.java:3187)
at android.view.InputEventSender.dispatchInputEventFinished (InputEventSender.java:143)
at android.os.MessageQueue.nativePollOnce (Native Method)
at android.os.MessageQueue.next (MessageQueue.java:335)
at android.os.Looper.loop (Looper.java:193)
at android.app.ActivityThread.main (ActivityThread.java:7861)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:600)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:967)
One more that I get all the time. Feels like it’s the OS’s fault, but it’s hard to say.
android.os.BadParcelableException:
at android.os.Parcel.readParcelableCreator (Parcel.java:3376)
at android.os.Parcel.readParcelable (Parcel.java:3284)
at android.os.Parcel.readValue (Parcel.java:3186)
at android.os.Parcel.readArrayMapInternal (Parcel.java:3579)
at android.os.BaseBundle.initializeFromParcelLocked (BaseBundle.java:292)
at android.os.BaseBundle.unparcel (BaseBundle.java:236)
at android.os.Bundle.filterValues (Bundle.java:394)
at android.os.Bundle.filterValues (Bundle.java:404)
at android.content.Intent.removeUnsafeExtras (Intent.java:9228)
at android.app.ActivityThread.handleRequestAssistContextExtras (ActivityThread.java:4116)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2264)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:246)
at android.app.ActivityThread.main (ActivityThread.java:8587)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
Hmm, not sure what’s going on. What is the exact setup you have? Extensions. Defold version.
I’ve been seeing that same error across Defold versions.
I believe the current production release is 1.2.185.
The instant app version is older, last updated on May 27, and was probably using the latest Defold at the time.
Full dependencies below. The first 5 have been in my game since it was released, and I’ve seen similar errors the whole time. Just getting a lot more right now thanks to the increased plays from being featured. Nice problem to have?
dependencies#0 = https://github.com/rgrams/rendercam/archive/v1.0.2.zip
dependencies#1 = https://github.com/AGulev/DefVideoAds/archive/3.7.2.zip
dependencies#2 = https://github.com/defold/extension-gpgs/archive/2.2.0.zip
dependencies#3 = https://github.com/subsoap/defsave/archive/v1.2.1.zip
dependencies#4 = https://github.com/defold/extension-iap/archive/2.0.2.zip
dependencies#5 = https://github.com/defold/extension-review/archive/3.0.1.zip
dependencies#6 = https://github.com/subsoap/defglot/archive/master.zip
It’s been quite a fun two weeks since the game was featured on the Play Games app! I’ve basically been glued to the Google Play and Unity Ads dashboards.
Prior to being featured, I had a pretty small amount of players, and therefore small daily revenue from ads & IAP. I never put any effort into advertising or promotion, so that was expected.
During the feature, I was blown away. Now that it’s over, I’m really curious about the long term effects. The daily downloads and amount of ratings shot way up, so my suspicion is this will help the game be more discoverable by the Play Store algorithms.
Fun numbers:
Most of the graphs look like below. Huge spike, then a gradual drop to what I hope is the new normal for a while, significantly higher than before. I’m really excited, and see real potential now in this silly game.
I received some helpful feedback in one or two of the user reviews, so I am going to make a few updates.
First requested update: When you reach the maximum number of spiders, give the player a few seconds to “save” the run. As it was, the game immediately went to Game Over when you reached the maximum spiders, but with all of the chaos and coordination involved to user the rain or bug spray, it can be unforgiving.
To implement this, I’m effectively starting a 3 second timer after you reach the max spiders, and enabling some UI cues.