[expo-in-app-purchases] finishTransactionAsync() does not consume purchased item

Hello,

I went to the bare workflow for expo-in-app-purchases. I use the code from the documentation:

      InAppPurchases.setPurchaseListener(({ responseCode, results, errorCode }) => {
        console.log(results);
        if (responseCode === InAppPurchases.IAPResponseCode.OK) {
          console.log("RESPONSE CODE OK");
          results.forEach(async purchase => {
            if (!purchase.acknowledged) {
              console.log(`Successfully purchased ${purchase.productId}`);
              // Process transaction here and unlock content...

              // Then when you're done
              await InAppPurchases.finishTransactionAsync(purchase, true);
            }
          });
        }
        // Else find out what went wrong
        else if (responseCode === InAppPurchases.IAPResponseCode.USER_CANCELED) {
          console.log('User canceled the transaction');
        } else if (responseCode === InAppPurchases.IAPResponseCode.DEFERRED) {
          console.log('User does not have permissions to buy but requested parental approval (iOS only)');
        } else {
          console.warn(`Something went wrong with the purchase. Received errorCode ${errorCode}`);
        }
      })

InAppPurchases.finishTransactionAsync(purchase, true) is supposed to consume the product but each time I buy again, it piles up with the products purchased earlier.
Here is the output of results after 3 purchases of the same item:

[   {
      "acknowledged":false,
      "orderId":"GPA.3324-8205-8555-10022",
      "packageName":"com.***t",
      "productId":"220credits",
      "purchaseState":1,
      "purchaseTime":1590673171487,
      "purchaseToken":"goiknpliojkfllolbijkiino.AO-J1OwWxXrn-mMhRr17pIBAI69kcVevjn-ekuT1-en0gKQtNZk4XpXCSPMJLXc_RBxp_VAWSRqgn8VoqJZRTVOnIy1lZOWp-Ep4UgVR4Nfu0kl1fCYNsE8RwZ_3mp4cG-cfP7f3pSLz"
   
},
   {
      "acknowledged":false,
      "orderId":"GPA.3359-4349-6316-57677",
      "packageName":"com.***",
      "productId":"220credits",
      "purchaseState":1,
      "purchaseTime":1590673180845,
      "purchaseToken":"flinnafimlibdnijhbplalnm.AO-J1Ox7Q9j0g3BWNLGPfjt0zUKKSLPnImtvk2zUA-XdC7VptmGLFsuTkgoFCyBCWPTqKOcKZdMOfZzXPFF44e88CbHBExgoNDuZzPKoWjTEz0Zzv8NX4o3GbwtVhizO0W4x0D6q8HRb"
   
},
   {
      "acknowledged":false,
      "orderId":"GPA.3323-3164-9373-99628",
      "packageName":"com.***",
      "productId":"220credits",
      "purchaseState":1,
      "purchaseTime":1590673189256,
      "purchaseToken":"ccmlgiokbjbjlglhomchmmnc.AO-J1OyqciKd3ZJQ7FvBoZd_hCtIsUfWNV16jBfgMPw9JH_RJ1n-VXjcAlwsbBpDNn-wpR7OlOlcjL8EVa0HwU47K_Uoy-4kp0It0Ru7JbGvYPphfcS_ljvq97Bl4e_RjmKZyUdkGssg"
   
}
]

If I comment await InAppPurchases.finishTransactionAsync(purchase, true); I get the same behavior but get an errorCode 8 if I click again on the same item. Although I still get aknowledged=false and purchaseState=1.

I don’t understand how this should work and there is nothing more on the internet related to expo-in-app-purchases, I don’t know if I should even keep trying with this.

1 Like