j3k0 / cordova-plugin-purchase

In-App Purchase for Cordova on iOS, Android and Windows
https://purchase.cordova.fovea.cc
1.3k stars 537 forks source link

Android - store events stopped being fired after calling store.referesh() #703

Closed coder-kl closed 6 years ago

coder-kl commented 6 years ago

system info

cli packages: (/Users/SamirMac/.npm-global/lib/node_modules)

@ionic/cli-utils  : 1.19.2
ionic (Ionic CLI) : 3.20.0

global packages:

cordova (Cordova CLI) : 6.5.0

local packages:

@ionic/app-scripts : 3.1.2
Cordova Platforms  : android 6.3.0 ios 4.5.4
Ionic Framework    : ionic-angular 3.9.2

System:

ios-deploy : 1.9.2
ios-sim    : 6.1.2
Node       : v6.9.2
npm        : 3.10.9
OS         : macOS Sierra
Xcode      : Xcode 9.1 Build version 9B55

Expected behavior

Observed behavior

Testing products I used are: ["android.test.purchased","android.test.canceled","android.test.item_unavailable"]

Here are logs: [06:23:33] console.log: Loading Products: [] [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased cancelled' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased unverified' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased loaded' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased approved' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased verified' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased registered' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased updated' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased owned' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased finished' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased expired' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased cancelled' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.purchased error' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'android.test.canceled registered' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'aliasandroid.test.canceled registered' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'non renewing subscription registered' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'registered' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'android.test.canceled updated' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'aliasandroid.test.canceled updated' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'non renewing subscription updated' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'updated' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled cancelled' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled unverified' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled loaded' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled approved' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled verified' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled registered' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled updated' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled owned' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled finished' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled expired' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled cancelled' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.canceled error' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'android.test.item_unavailable registered' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'aliasandroid.test.item_unavailable registered' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'non renewing subscription registered' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'registered' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'android.test.item_unavailable updated' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'aliasandroid.test.item_unavailable updated' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'non renewing subscription updated' [06:23:33] console.log: [store.js] DEBUG: store.queries !! 'updated' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable cancelled' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable unverified' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable loaded' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable approved' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable verified' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable registered' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable updated' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable owned' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable finished' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable expired' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable cancelled' [06:23:33] console.log: [store.js] DEBUG: queries ++ 'android.test.item_unavailable error' [06:23:33] console.log: [store.js] DEBUG: store.trigger -> triggering action refreshed [06:23:33] console.log: [store.js] DEBUG: queries !! 'refreshed' [06:23:33] console.log: InAppBilling[js]: setup ok

        ["android.test.purchased","android.test.canceled","android.test.item_unavailable"]

[06:23:33] console.log: store_error {"code":6777001,"message":"Init failed - Failed to query inventory: IabResult: Error refreshing inventory (querying owned items). (response: 6777017:Error)"}

NOTE: I do have log statements added in all other events, but those are not being fired.

Steps to reproduce

-> During testing, I called product.verify() from store.approved event, to test my validator logic. However, due to an error the verify never finished. I believe due to this the product is left in the unfinished state. I had similar issue, where I did not called product.finish, however, in the next store.referesh() call, I was able to set status to finish from store.product.updated event.

I understand it is pending product issue, but I am not sure why store product events are stopped. If anyone can give feedback, would be great help.

Thanks.

Dexus commented 6 years ago

it looks like your "items" are not available from the (apple|play)store... so try again later. Or create the items at the playstore or apple store. The init from the plugin already failing...

Regards

coder-kl commented 6 years ago

Finally.. I figured it out. The issue is the mock products Ids provided by Google to test in app purchase, hangs when we call verify method. The mock products does required to verify, and internally IAP api itself fails and hangs. To get back to testing, one will need to clear Google Play data, by going to Settings -> Apps -> Google Play -> Clear Data.

Here are two links which helped me understand the issue in detail: https://github.com/j3k0/cordova-plugin-purchase/issues/76 https://stackoverflow.com/questions/14600664/android-in-app-purchase-signature-verification-failed

Thank you very much to all who has helped developing this plugin. This plugin is really awesome, and I am almost ready to release my app to Android and Google :)

bchellingworth commented 4 years ago

Clearing cache and data on google play services app solved the problem for me