Skip to content

[in_app_purchase] Fatal Exception: java.lang.IllegalStateException Reply already submitted #103432

Open

Description

@youssefali424

I've got an error through Crashlytics
with in_app_purchase: ^3.0.2

Steps to Reproduce

I couldn't reproduce it locally but I guess it happens because of a race condition

Logs
Fatal Exception: java.lang.IllegalStateException: Reply already submitted
       at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:35)
       at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:14)
       at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl$1.onSkuDetailsResponse(MethodCallHandlerImpl.java:30)
       at com.android.billingclient.api.zzac.run(zzac.java:36)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:210)
       at android.app.ActivityThread.main(ActivityThread.java:7080)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:523)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:863)</summary>
Flutter version
Flutter 2.10.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 5464c5bac7 (3 weeks ago) • 2022-04-18 09:55:37 -0700
Engine • revision 57d3bac3dd
Tools • Dart 2.16.2 • DevTools 2.9.2

Running flutter doctor...
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 2.10.5, on Microsoft Windows [Version 10.0.19043.1645], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
[√] Chrome - develop for the web
[!] Visual Studio - develop for Windows (Visual Studio Build Tools 2017 15.9.25)
    X Visual Studio 2019 or later is required.
      Download at https://visualstudio.microsoft.com/downloads/.
      Please install the "Desktop development with C++" workload, including all of its default components
[√] Android Studio (version 2020.3)
[√] VS Code (version 1.67.0)
[√] Connected device (3 available)
[√] HTTP Host Availability

Activity

  1. darshankawar commented on May 11, 2022

    @darshankawar
    Member

    at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl$1.onSkuDetailsResponse(MethodCallHandlerImpl.java:30)
    at com.android.billingclient.api.zzac.run(zzac.java:36)

    Seems to be indeed coming from the plugin. There was an old similar but fixed issue: #32462

    Labeling it for further investigation as there doesn't seem to be reproducible use case.

  2. added
    platform-androidAndroid applications specifically
    a: productionIssues experienced in live production apps
    needs repro infoAutomated crash report whose cause isn't yet known
    c: crashStack traces logged to the console
    and removed
    in triagePresently being triaged by the triage team
    on May 11, 2022
  3. added
    P2Important issues not at the top of the work list
    on May 12, 2022
  4. deskangel commented on Apr 12, 2023

    @deskangel

    Screenshot_20230412_200326_org telegram messenger
    encounter the same issue.

  5. 3 remaining items

  6. ozzy1873 commented on Sep 8, 2023

    @ozzy1873

    I am seeing this too:

    Fatal Exception: java.lang.IllegalStateException: Reply already submitted
    at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:35)
    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:14)
    at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl.lambda$queryProductDetailsAsync$0(MethodCallHandlerImpl.java:26)
    at com.android.billingclient.api.BillingClientImpl.zzJ(BillingClientImpl.java:19)
    at com.android.billingclient.api.zzl.run(zzl.java:4)
    at com.android.billingclient.api.zzw.run(zzw.java:29)
    at android.os.Handler.handleCallback(Handler.java:900)
    at android.os.Handler.dispatchMessage(Handler.java:103)
    at android.os.Looper.loop(Looper.java:219)
    at android.app.ActivityThread.main(ActivityThread.java:8668)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

  7. serhii-k commented on Sep 19, 2023

    @serhii-k
    Contributor

    Hello, I don't think my comment is related to the original issue, however it seems to be related with @deskangel and @ozzy1873 comments.

    In Crashlytics recently I started to see plenty of similar crashes (for the past 7 days 77 users affected).

    Important (which may be different to the original issue)
    In the case of my app the crashes happen:

    • in 94% cases on Huawei devices
    • 89% Android 8
    • 97% background

    Please check these stack traces from Crashlytics:

    Stack trace 1 (very common)
    Fatal Exception: java.lang.IllegalStateException: Reply already submitted
           at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:35)
           at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:14)
           at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl.lambda$queryProductDetailsAsync$0(MethodCallHandlerImpl.java:26)
           at com.android.billingclient.api.BillingClientImpl.zzJ(BillingClientImpl.java:19)
           at com.android.billingclient.api.zzl.run(zzl.java:4)
           at com.android.billingclient.api.zzw.run(zzw.java:29)
           at android.os.Handler.handleCallback(Handler.java:808)
           at android.os.Handler.dispatchMessage(Handler.java:101)
           at android.os.Looper.loop(Looper.java:166)
           at android.app.ActivityThread.main(ActivityThread.java:7529)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
    Stack trace 2 (much less common)
    Fatal Exception: java.lang.IllegalStateException: Reply already submitted
           at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:35)
           at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:14)
           at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl.lambda$queryPurchasesAsync$2(MethodCallHandlerImpl.java:33)
           at com.android.billingclient.api.BillingClientImpl.zzL(BillingClientImpl.java:19)
           at com.android.billingclient.api.zzu.run(zzu.java:4)
           at com.android.billingclient.api.zzw.run(zzw.java:29)
           at android.os.Handler.handleCallback(Handler.java:809)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:166)
           at android.app.ActivityThread.main(ActivityThread.java:7555)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)
  8. serhii-k commented on Sep 19, 2023

    @serhii-k
    Contributor

    I have found that developers of RevenueCat also had a similar issue that happened mostly on Huawei devices which was resolved after some investigation. Maybe that can be helpful in the resolution of this issue.
    RevenueCat/purchases-flutter#245

  9. youssefali424 commented on Sep 30, 2023

    @youssefali424
    ContributorAuthor

    @darshankawar RevenueCat/purchases-flutter#245 (comment)
    please look at this comment if possible I think this is the issue.
    this issue has been active for so long and it affected a lot of our user base but at the same time it is hard to reproduce but crashlytics reports it frequently.

  10. putnokiabel commented on Oct 30, 2023

    @putnokiabel

    Looks like the original issue originates from onSkuDetailsResponse.

    I just wanted to add that I'm seeing the same issue from queryProductDetailsAsync on the latest version of the plugin:

    Fatal Exception: java.lang.IllegalStateException: Reply already submitted
           at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:435)
           at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:263)
           at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl.lambda$queryProductDetailsAsync$0(MethodCallHandlerImpl.java:228)
           at com.android.billingclient.api.BillingClientImpl.zzJ(com.android.billingclient:billing@@6.0.1:3)
           at com.android.billingclient.api.zzl.run(com.android.billingclient:billing@@6.0.1:4)
           at com.android.billingclient.api.zzw.run(com.android.billingclient:billing@@6.0.1:4)
           at android.os.Handler.handleCallback(Handler.java:942)
           at android.os.Handler.dispatchMessage(Handler.java:99)
           at android.os.Looper.loopOnce(Looper.java:226)
           at android.os.Looper.loop(Looper.java:313)
           at android.app.ActivityThread.main(ActivityThread.java:8762)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
    

    Seems to happen exclusively on Samsung and Huawei devices on my end, and 100% of the crashes happen when the app is in the background:
    image

    Edit:
    I looked into the revenuecat issue mentioned before and it looks like the same issue is relevant here.
    RevenueCat/purchases-android#369 mentions:
    "BillingClient, in some cases, issues multiple responses to the querySkuDetailsAsync and queryPurchaseHistoryAsync callbacks. This was causing crashes for Flutter users and is currently the top crash in the sdk console."
    Meaning the plugin needs to take care that even if querySkuDetailsAsync issues multiple responses, only the first should be taken into account.

  11. FluffyBunniesTasteTheBest commented on Jul 8, 2024

    @FluffyBunniesTasteTheBest

    Same here with version 3.1.13 and a slightly different stack trace. Happens mainly on Huawei devices, though some Samsung, Nokia and TCL devices are reported as well. 56 effected users, of which 30 are running either Android 8 or 8.1. The remaining 26 crashes are distributed over Android 9 - 14.

    Exception java.lang.IllegalStateException: Reply already submitted
      at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply (DartMessenger.java:435)
      at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success (MethodChannel.java)
      at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl.lambda$queryProductDetailsAsync$0 (MethodCallHandlerImpl.java:228)
      at com.android.billingclient.api.BillingClientImpl.zzJ (com.android.billingclient:billing@@6.0.1:3)
      at com.android.billingclient.api.zzl.run (com.android.billingclient:billing@@6.0.1)
      at com.android.billingclient.api.zzw.run (com.android.billingclient:billing@@6.0.1:4)
      at android.os.Handler.handleCallback (Handler.java:808)
      at android.os.Handler.dispatchMessage (Handler.java:101)
      at android.os.Looper.loop (Looper.java:166)
      at android.app.ActivityThread.main (ActivityThread.java:7529)
      at java.lang.reflect.Method.invoke
      at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:245)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)
    

    Second stack trace got reported for five users:

    Exception java.lang.IllegalStateException: Reply already submitted
      at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply (DartMessenger.java:435)
      at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success (MethodChannel.java)
      at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl.lambda$queryPurchasesAsync$2 (MethodCallHandlerImpl.java:383)
      at com.android.billingclient.api.BillingClientImpl.zzL (com.android.billingclient:billing@@6.0.1:4)
      at com.android.billingclient.api.zzu.run (com.android.billingclient:billing@@6.0.1)
      at com.android.billingclient.api.zzw.run (com.android.billingclient:billing@@6.0.1:4)
      at android.os.Handler.handleCallback (Handler.java:809)
      at android.os.Handler.dispatchMessage (Handler.java:102)
      at android.os.Looper.loop (Looper.java:166)
      at android.app.ActivityThread.main (ActivityThread.java:7555)
      at java.lang.reflect.Method.invoke
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:469)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:963)
    
  12. AsjadSiddiqui commented on Jul 27, 2024

    @AsjadSiddiqui
    Contributor

    Same here with 3.22.3

    Stack trace from Vivo S19 running Android 14

    Fatal Exception: java.lang.IllegalStateException: Reply already submitted
           at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:35)
           at io.flutter.plugin.common.BasicMessageChannel$IncomingMessageHandler$1.reply(BasicMessageChannel.java:14)
           at io.flutter.plugins.inapppurchase.Messages$InAppPurchaseApi$7.success(Messages.java:10)
           at io.flutter.plugins.inapppurchase.Messages$InAppPurchaseApi$7.success(Messages.java:2)
           at io.flutter.plugins.inapppurchase.MethodCallHandlerImpl.lambda$queryProductDetailsAsync$4(MethodCallHandlerImpl.java:28)
           at com.android.billingclient.api.BillingClientImpl.zzS(BillingClientImpl.java:19)
           at com.android.billingclient.api.zzz.run(zzz.java:4)
           at com.android.billingclient.api.zzn.run(zzn.java:29)
           at android.os.Handler.handleCallback(Handler.java:1013)
           at android.os.Handler.dispatchMessage(Handler.java:101)
           at android.os.Looper.loopOnce(Looper.java:226)
           at android.os.Looper.loop(Looper.java:328)
           at android.app.ActivityThread.main(ActivityThread.java:9233)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:594)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    

    More stack traces from Itel P17 running Android 11

    Fatal Exception: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2015, result=0, data=null} to activity {com.mineswap.app/com.mineswap.app.MainActivity}: java.lang.IllegalStateException: Reply already submitted
           at android.app.ActivityThread.deliverResults(ActivityThread.java:5157)
           at android.app.ActivityThread.handleSendResult(ActivityThread.java:5198)
           at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
           at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
           at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2125)
           at android.os.Handler.dispatchMessage(Handler.java:106)
           at android.os.Looper.loop(Looper.java:223)
           at android.app.ActivityThread.main(ActivityThread.java:7989)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:635)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
    
    Caused by java.lang.IllegalStateException: Reply already submitted
           at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:35)
           at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:14)
           at com.jayesh.flutter_contact_picker.FlutterContactPickerPlugin.onActivityResult(FlutterContactPickerPlugin.java:15)
           at io.flutter.embedding.engine.FlutterEngineConnectionRegistry$FlutterEngineActivityPluginBinding.onActivityResult(FlutterEngineConnectionRegistry.java:25)
           at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.onActivityResult(FlutterEngineConnectionRegistry.java:14)
           at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onActivityResult(FlutterActivityAndFragmentDelegate.java:51)
           at io.flutter.embedding.android.FlutterActivity.onActivityResult(FlutterActivity.java:10)
           at android.app.Activity.dispatchActivityResult(Activity.java:8462)
           at android.app.ActivityThread.deliverResults(ActivityThread.java:5150)
           at android.app.ActivityThread.handleSendResult(ActivityThread.java:5198)
           at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
           at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
           at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2125)
           at android.os.Handler.dispatchMessage(Handler.java:106)
           at android.os.Looper.loop(Looper.java:223)
           at android.app.ActivityThread.main(ActivityThread.java:7989)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:635)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
    
  13. jiagengArctuition commented on Sep 4, 2025

    @jiagengArctuition

    same here with flutter 3.27.4 and in_app_purchase_android: 0.4.0+2

    Image
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work lista: productionIssues experienced in live production appsc: crashStack traces logged to the consoleneeds repro infoAutomated crash report whose cause isn't yet knownp: in_app_purchasePlugin for in-app purchasepackageflutter/packages repository. See also p: labels.platform-androidAndroid applications specificallyteam-androidOwned by Android platform teamtriaged-androidTriaged by Android platform team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions