3

I'm using the Billing Manager provided in googlesamples to handle in app purchases in my android app. Everything seems to work until I click buy and am greeted with the error message:

The Transaction could not be completed.

From the logs I can see that I am getting a response code 6 ("Fatal error during the API action") back from the server. Additionally I can see two suspicious errors during the purchasing process:

E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
    at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:15168)
    at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2492)
    at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:688)
    at android.content.ContentProvider$Transport.call(ContentProvider.java:325)
    at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:275)
    at android.os.Binder.execTransact(Binder.java:404)
    at dalvik.system.NativeStart.run(Native Method)

E/Parcel: Class not found when unmarshalling: com.google.android.finsky.billing.common.PurchaseParams
java.lang.ClassNotFoundException: com.google.android.finsky.billing.common.PurchaseParams
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:251)
    at java.lang.Class.forName(Class.java:216)
    at android.os.Parcel.readParcelableCreator(Parcel.java:2140)
    at android.os.Parcel.readParcelable(Parcel.java:2104)
    at android.os.Parcel.readValue(Parcel.java:2020)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2321)
    at android.os.Bundle.unparcel(Bundle.java:249)
    at android.os.Bundle.getString(Bundle.java:1118)
    at android.content.Intent.getStringExtra(Intent.java:5151)
    at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1468)
    at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063)
    at com.android.server.am.ActivityManagerService.startActivityInPackage(ActivityManagerService.java:4385)
    at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:254)
    at com.android.server.am.ActivityManagerService.startActivityIntentSender(ActivityManagerService.java:4266)
    at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:260)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2712)
    at android.os.Binder.execTransact(Binder.java:404)
    at dalvik.system.NativeStart.run(Native Method)
 Caused by: java.lang.NoClassDefFoundError: com/google/android/finsky/billing/common/PurchaseParams
    at java.lang.Class.classForName(Native Method) 
    at java.lang.Class.forName(Class.java:251) 
    at java.lang.Class.forName(Class.java:216) 
    at android.os.Parcel.readParcelableCreator(Parcel.java:2140) 
    at android.os.Parcel.readParcelable(Parcel.java:2104) 
    at android.os.Parcel.readValue(Parcel.java:2020) 
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2321) 
    at android.os.Bundle.unparcel(Bundle.java:249) 
    at android.os.Bundle.getString(Bundle.java:1118) 
    at android.content.Intent.getStringExtra(Intent.java:5151) 
    at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1468) 
    at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063) 
    at com.android.server.am.ActivityManagerService.startActivityInPackage(ActivityManagerService.java:4385) 
    at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:254) 
    at com.android.server.am.ActivityManagerService.startActivityIntentSender(ActivityManagerService.java:4266) 
    at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:260) 
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2712) 
    at android.os.Binder.execTransact(Binder.java:404) 
    at dalvik.system.NativeStart.run(Native Method) 
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.finsky.billing.common.PurchaseParams" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at java.lang.Class.classForName(Native Method) 
    at java.lang.Class.forName(Class.java:251) 
    at java.lang.Class.forName(Class.java:216) 
    at android.os.Parcel.readParcelableCreator(Parcel.java:2140) 
    at android.os.Parcel.readParcelable(Parcel.java:2104) 
    at android.os.Parcel.readValue(Parcel.java:2020) 
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2321) 
    at android.os.Bundle.unparcel(Bundle.java:249) 
    at android.os.Bundle.getString(Bundle.java:1118) 
    at android.content.Intent.getStringExtra(Intent.java:5151) 
    at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1468) 
    at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063) 
    at com.android.server.am.ActivityManagerService.startActivityInPackage(ActivityManagerService.java:4385) 
    at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:254) 
    at com.android.server.am.ActivityManagerService.startActivityIntentSender(ActivityManagerService.java:4266) 
    at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:260) 
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2712) 
    at android.os.Binder.execTransact(Binder.java:404) 
    at dalvik.system.NativeStart.run(Native Method) 

However I am not sure that there is a connection between the errors and the failing of the purchase. Any idea where I went wrong?

Flomp
  • 524
  • 4
  • 17

1 Answers1

0

Try the solution from this github forum: Fixed bug w/ null vs. empty payload:

Changes Proposed in this pull request:

  • Promote null payloads to string.Empty to prevent confusion between the two. Empty payload strings get deserialized as null causing it to appear as though the purchase failed.
  • Initialize tcsPurchase earlier to prevent a possible race condition.

The said bug was first discussed here.

ReyAnthonyRenacia
  • 17,219
  • 5
  • 37
  • 56