IAP bugs when using Construct 2 runtime in C3 and exporting to iOS via Xcode

0 favourites
  • 10 posts
From the Asset Store
[C2] [C3] Support C3 build service and Android 14
  • Just a bit of background to this issue. I have a number of live apps in the Apple App Store. I have numerous people purchase IAP in these apps every month. A few day ago I received an email stating that a user had purchased one of my IAP, it had worked for a while and was now not working. He had tried to restore the purchases but the restore button wasn't doing anything. I've been offering this individual support and have been investigating the issue.

    The image above is not from the app the user is having issues with, it's actually from another app that I'm currently working on. It does however exhibit the same problems that the app in question has. The image above shows some of the code associated with my splash screen. One of the things I do in my apps is to check whether IAP have been previously purchased while the splash screen is being shown. If they have been purchased I set a variable that will unlock the required parts of the app.

    I can successfully perform a purchase of IAP and it will unlock the required parts of my app. These stay unlocked even when the app is opened and closed multiple times. The problem occurs if the app is later deleted. When it is reinstalled it does not detect that IAP has previously been purchased. The App Store knows that this Non Consumable IAP has been previously purchased because it tells you if you attempt to repurchase.

    The problem seems to be that when I call - Has Product"ProductID" - it is not actually querying the App Store to determine whether the product has previously been purchased. I know that product registration has completed successfully because the price of the IAP is returned from the App Store and written to a variable and then is shown on the purchase page of the app. But the check I put in to verify whether "Has Product" is executing (TXT_PURCHASECHECK - Set text to "Purchased") is never displayed. This check, along with previously purchased IAP remaining locked, indicates that the "Has Product" is failing to properly execute.

    This is a major problem to me. It potentially will cost me sales and will certainly result in unhappy customers who are not always getting what they have paid for. I've commented on a similar bug report from December 2018 (https://github.com/Scirra/Construct-3-bugs/issues/2440)that reports the same issue. I don't know whether anyone is actively working on this issue. I know that Nepeo wrote the IAP plugin. Maybe construct.net/en/users/253158/nepeo can help with this?

    It would be really good to resolve this as it appears to be a bug that is not just affecting me. I'm tearing my hair out at the moment over this issue and am becoming increasingly frustrated. Any help anyone can provide would be very much appreciated.

  • Just to add some further information to this. I have found out that minification when building a project affects whether the "Has product" in the IAP plugin works or not. I have always used minification when building projects. Whilst trying to trouble shoot the issues with the IAP plugin I thought of ways to get around using the native IAP plugin. I'm aware that someone sells an IAP plugin for Construct 2 and 3 and I was looking at the store page for this. It was then that a comment jumped out at me about this other plugin allowing minification and I wondered whether this may be affecting things at all. I know I was just grasping at straws but minification does seem to have some impact in some way on how the official IAP plugin works.

    If I use minification the "Has product" fails to work at all. However, if I don't minify during the build process it does have some impact on whether "Has product" works when the app is live. What I have found is that when you have the app installed on your iPhone you need to go through the following steps to eventually get the "Has product" to work:

    1. Purchase the IAP.
    2. When you restart the app the "Has product" should detect the IAP has been purchased when the splash screen is visible (see the image in my original post to see how I have set this up) - Unfortunately it does not detect the purchase no matter how many times you restart the app. The purchases you have made remain unlocked and available though.
    3. Delete the app.
    4. Reinstall the app.
    5. Run the app again, it still won't detect that a purchase has been made. The content you previously purchased is no longer available to you as the app cannot detect that it has been purchased.
    6. Purchase the IAP again. The App Store will tell you that you have already purchased the content and it will ask whether you wish to get it again for free. Click Ok. You now have access to the content that you previously purchased.
    7. Restart the app again.
    8. "Has product" now detects that a purchase has been made and works as expected!!!!

    The above should be indicative that there are some issues with the way the IAP plugin works. Given that another user complained about "Has Product" not working in December 2018 and logged a Bug for this I don't know why it still hasn't been fixed. This is an issue that would affect all people monetising their apps in the App Store with this plugin. Surely this is reason enough to give fixing it some level of priority.

    For now though I am telling anyone who complains about not being able to access the content they have purchased that they will need to "repurchase" the content for free from within the app. It is not an ideal solution, or a permanent fix, but it is all we have until someone on the development team investigates the issue and fixes this bug.

  • Well it seems like there is zero interest in fixing what is an obvious problem. For anyone who stumbles across this and is looking for a solution the Mobile Master IAP plugin looks promising https://chadorirebornxd.itch.io/mobile-master-monetization. This also has the ability to handle subscriptions and most importantly the developer looks to support his product by fixing bugs promptly! I'm intending to buy this and if it works well I'll update all my apps to use this.

  • Well it seems like there is zero interest in fixing what is an obvious problem. For anyone who stumbles across this and is looking for a solution the Mobile Master IAP plugin looks promising https://chadorirebornxd.itch.io/mobile-master-monetization. This also has the ability to handle subscriptions and most importantly the developer looks to support his product by fixing bugs promptly! I'm intending to buy this and if it works well I'll update all my apps to use this.

    I have not yet encountered this problem, I still have everything ahead. But I am also interested in this topic. Many thanks for the link. If everything works, let me know. For me, this is a new topic and I just have to go all this illegal way.)

  • The Mobile Master IAP works really well and is easy to use. I've swapped out the native IAP plugin in favor of this in one of my apps. I've even added a subscription option to the app to give my users additional choice in how they access content. This could not have been easier. The fact that the native IAP plugin lacks subscription functionality is a glaring omission in its functionality. I highly recommend buying the Mobile Master IAP plugin for anyone who needs a reliable way to monetize their apps.

  • The Mobile Master IAP works really well and is easy to use. I've swapped out the native IAP plugin in favor of this in one of my apps. I've even added a subscription option to the app to give my users additional choice in how they access content. This could not have been easier. The fact that the native IAP plugin lacks subscription functionality is a glaring omission in its functionality. I highly recommend buying the Mobile Master IAP plugin for anyone who needs a reliable way to monetize their apps.

    Could you give an example of how you made a subscription and in general how to set it up. I will be grateful.

  • You firstly need to set up the subscription in App Store Connect. Once you have done this you will do something similar to the image below within your app to purchase a subscription:

    What I'm doing above is when a user clicks on an image of a button I initiate the purchase of the subscription (ie. MobileMasterIAP -> Subscribe Product "SubscriptionID"). I then check if the subscription has succeeded (ie. MobileMasterIAP -> Subscription Succeeded - this has another condition which identifies the specific ID of the subscription that has been purchased.). I then run through a series of actions that occur when the subscription has been successful. In the case of my app, I change the image of the button from one that says "Subscribe" to "Subscribed" and then I set a variable which unlocks content in my app.

  • You firstly need to set up the subscription in App Store Connect. Once you have done this you will do something similar to the image below within your app to purchase a subscription:

    What I'm doing above is when a user clicks on an image of a button I initiate the purchase of the subscription (ie. MobileMasterIAP -> Subscribe Product "SubscriptionID"). I then check if the subscription has succeeded (ie. MobileMasterIAP -> Subscription Succeeded - this has another condition which identifies the specific ID of the subscription that has been purchased.). I then run through a series of actions that occur when the subscription has been successful. In the case of my app, I change the image of the button from one that says "Subscribe" to "Subscribed" and then I set a variable which unlocks content in my app.

    thank you for help.

  • No problem!

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Hey Brandon

    I'm having the exact problem with the Native Plugin. You think they would look into this.

    Going to try that other plugin that you suggested.

Jump to:
Active Users
There are 1 visitors browsing this topic (0 users and 1 guests)