New Purchases UI `Class not found when unmarshalling` error
- [x] I have updated Purchases SDK to the latest version
- [x] I have read the Contribution Guidelines
- [x] I have searched the Community
- [x] I have read docs.revenuecat.com
- [x] I have searched for existing Github issues
Describe the bug When I call
var result = await PaywallsPresenter.PresentIfNeeded("vip", new PaywallOptions(displayCloseButton: true));
I see Error Parcel Class not found when unmarshalling: error on Android device twice.
2025/10/25 12:02:57.705 18272 18359 Error Parcel Class not found when unmarshalling: com.revenuecat.purchasesunity.ui.PaywallUnityOptions
2025/10/25 12:02:57.705 18272 18359 Error Parcel java.lang.ClassNotFoundException: com.revenuecat.purchasesunity.ui.PaywallUnityOptions
2025/10/25 12:02:57.705 18272 18359 Error Parcel at java.lang.Class.classForName(Native Method)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at java.lang.Class.forName(Class.java:454)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at android.os.Parcel.readParcelableCreator(Parcel.java:3031)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at android.os.Parcel.readParcelable(Parcel.java:2981)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at android.os.Parcel.readValue(Parcel.java:2883)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at android.os.Parcel.readArrayMapInternal(Parcel.java:3261)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at android.os.BaseBundle.unparcel(BaseBundle.java:236)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at android.os.BaseBundle.getString(BaseBundle.java:1160)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at m7.tn.a(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):42)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreatedByScionActivityInfo(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):23)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at m7.jt.w(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):55)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at m7.cc.onTransact(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):21)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at android.os.Binder.transact(Binder.java:914)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at com.google.android.gms.internal.measurement.zzbl.zzc(com.google.android.gms:play-services-measurement-base@@23.0.0:2)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at com.google.android.gms.internal.measurement.zzcp.onActivityCreatedByScionActivityInfo(com.google.android.gms:play-services-measurement-base@@23.0.0:5)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at com.google.android.gms.internal.measurement.zzet.zza(com.google.android.gms:play-services-measurement-sdk-api@@23.0.0:8)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at com.google.android.gms.internal.measurement.zzeq.run(com.google.android.gms:play-services-measurement-sdk-api@@23.0.0:2)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2025/10/25 12:02:57.705 18272 18359 Error Parcel at java.lang.Thread.run(Thread.java:919)
2025/10/25 12:02:57.705 18272 18359 Error Parcel Caused by: java.lang.ClassNotFoundException: com.revenuecat.purchasesunity.ui.PaywallUnityOptions
2025/10/25 12:02:57.705 18272 18359 Error Parcel ... 21 more
2025/10/25 12:02:57.705 18272 18359 Error FA Throwable caught in onActivityCreated: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.revenuecat.purchasesunity.ui.PaywallUnityOptions: m7.tn.a(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):42)
2025/10/25 12:02:57.731 18272 18272 Info MultiWindowDecorSupport updateCaptionType >> DecorView@4712fd7[], isFloating: false, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: true
2025/10/25 12:02:57.852 18272 18359 Error Parcel Class not found when unmarshalling: com.revenuecat.purchases.ui.revenuecatui.activity.PaywallActivityArgs
2025/10/25 12:02:57.852 18272 18359 Error Parcel java.lang.ClassNotFoundException: com.revenuecat.purchases.ui.revenuecatui.activity.PaywallActivityArgs
2025/10/25 12:02:57.852 18272 18359 Error Parcel at java.lang.Class.classForName(Native Method)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at java.lang.Class.forName(Class.java:454)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at android.os.Parcel.readParcelableCreator(Parcel.java:3031)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at android.os.Parcel.readParcelable(Parcel.java:2981)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at android.os.Parcel.readValue(Parcel.java:2883)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at android.os.Parcel.readArrayMapInternal(Parcel.java:3261)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at android.os.BaseBundle.unparcel(BaseBundle.java:236)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at android.os.BaseBundle.getString(BaseBundle.java:1160)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at m7.tn.a(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):42)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreatedByScionActivityInfo(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):23)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at m7.jt.w(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):55)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at m7.cc.onTransact(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):21)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at android.os.Binder.transact(Binder.java:914)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at com.google.android.gms.internal.measurement.zzbl.zzc(com.google.android.gms:play-services-measurement-base@@23.0.0:2)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at com.google.android.gms.internal.measurement.zzcp.onActivityCreatedByScionActivityInfo(com.google.android.gms:play-services-measurement-base@@23.0.0:5)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at com.google.android.gms.internal.measurement.zzet.zza(com.google.android.gms:play-services-measurement-sdk-api@@23.0.0:8)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at com.google.android.gms.internal.measurement.zzeq.run(com.google.android.gms:play-services-measurement-sdk-api@@23.0.0:2)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2025/10/25 12:02:57.852 18272 18359 Error Parcel at java.lang.Thread.run(Thread.java:919)
2025/10/25 12:02:57.852 18272 18359 Error Parcel Caused by: java.lang.ClassNotFoundException: com.revenuecat.purchases.ui.revenuecatui.activity.PaywallActivityArgs
2025/10/25 12:02:57.852 18272 18359 Error Parcel ... 21 more
2025/10/25 12:02:57.853 18272 18359 Error FA Throwable caught in onActivityCreated: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.revenuecat.purchases.ui.revenuecatui.activity.PaywallActivityArgs: m7.tn.a(:com.google.android.gms.dynamite_measurementdynamite@[email protected] (100400-0):42)
- Environment
- Platform: Android
- SDK version: 8.4.0
- OS + version: 10
- Xcode/Android Studio version:
- Unity version: 6000.0.058f1
- How widespread is the issue. Percentage of devices affected. Local
- Debug logs that reproduce the issue
- Steps to reproduce, with a description of expected vs. actual behavior
- Other information (e.g. stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc.)
Additional context Paywall shows fine, but the error is still thrown. I'm afraid it would affect something in production.
👀 We've just linked this issue to our internal tracker and notified the team. Thank you for reporting, we're checking this out!
@cihadturhan this is very strange. How are you installing the plugin, are you using UPM or the .unitypackage? Are you able to export the Android project and open it in Android Studio? I would love to see if the Android project is correctly resolving the RevenueCatUI.androidlib module
The fact that it works and presents the paywall but still throws that exception is very intriguing
@cihadturhan this is very strange.
I'm not android dev, I got copilot to fix the issue. It did stuff, but nothing worked.
How are you installing the plugin, are you using UPM or the
.unitypackage?
I used both (beta version first from .unitypackage, then the released stable version from UPM). Same error.
Are you able to export the Android project and open it in Android Studio? I would love to see if the Android project is correctly resolving the
RevenueCatUI.androidlibmodule
I haven't tried it. I'm working on iOS version of the app right now so I'm not available to do it. I'll let you know when I can do it.
@vegaro I have spotted one thing. Maybe it can help resolving.
The call stack has android.gms.dynamite_measurementdynamite which appears to be an analytics library (Firebase?)
I see the error happens right after paywall is shown? Paywall is shown properly then this exception is thrown immediately.
Interesting... can you share which other plugins you are using? maybe your UPM dependencies so we can try to reproduce it. It could be Firebase indeed, yeah
Interesting... can you share which other plugins you are using? maybe your UPM dependencies so we can try to reproduce it. It could be Firebase indeed, yeah
I have firebase installed. If you'd like to try, I use analytics, crashlytics, remote config and storage libraries at version 13.4.0
I will try removing firebase in my build to see if it happens.