Unable to restore purchases from previous version of the same app - ios

I have prepared a new build for my client's app - brand new, redesigned app. Everything is cool except that users of the new version are reporting that they are unable to restore their old non-consumable products (purchased in the old app). To make things even more weird - they are able to restore the same products, but purchased in the new app.
I believe that there is no difference in restored transactions no matter if they have been purchased within this or previous version of app when bundle identifier stays the same. I have double checked in Testflight app (with live Apple Id for restore) that only one out of six purchased products is already being restored.
My question is have you ever had such a weird issue in your apps? Any hints on peculiarities related to restoring purchases from previous versions of the app? Is it a bug in SDK? Does it make sense at all?

Problem solved. Clients were using live Apple ID in TestFlight build, not in the live app. Even if you use live account on TestFlight build it still operates in sandbox, and products purchased in production environment wont appear in sandbox when you restore purchases.

Related

Can I add an IAP without releasing a new build?

Hello I had to fix an IAP id after my iOS app was approved and published.
The app was pointing to IAP with id "MyIAP1" but the id on the AppStore was "MyIAPABC".
This obviously wasn't working... since the App was looking for a non existant IAP ID.
So to avoid releasing a new App build, I've created a new IAP on the AppStore with ID "MyIAP1", the one available in the published App. The IAP is working correctly when I run the App from Xcode but it is not working on production. Do I need to release a new build to somehow enable new IAP products on production? (even if the code is exactly the same of the previous build)
You can since you have already submitted IAP before.
Note: If you have already submitted an in-app purchase with your app,
and you decide to add additional in-app purchases later, you can do so
without submitting an app version.
ref: https://help.apple.com/app-store-connect/?lang=en#/dev1986a0e5c

How do in app purchases behave in Pending Developer Release?

I recently finished the first version of an iOS application. I have several in-app purchases within it. When testing these, I always used a physical iPhone. Apple just approved the build for release and the app is now in "Pending Developer Release." As one last sanity check, I generated a promo code for myself on app store connect and downloaded the app onto my phone through the app store. I quickly noticed that the SKProductsRequestDelegate method is never fired and the list of in-app purchases is never downloaded from Apple's IAP server. This is similar behavior to when the app is run within a simulator: the IAP data is never loaded.
I am unfamiliar with how the "Pending Developer Release" stage impacts in-app purchases. Will they work as expected when I release the app to the public? Is there some change I need to make and resubmit?
Any help would be greatly appreciated.
As far as I know, it should work seamlessly except for the charging (You won't be charged if your app is downloaded from outside AppStore). So trying to gather logs may help you in this case.
Turns out this was an issue on Apple's end. I contacted support and something on their end had been messed up when they approved the in-app purchases.

In-App purchases not loading unless I install the app directly from Xcode - RevenueCat

I recently started using RevenueCat for all of my InApp purchases; today my app was approved in the App Store so, I went ahead and downloaded it to try the new version directly from the App Store and I noticed that the In-App purchases are not loading. What is funny is that if I connect my phone to my computer and compile the app directly from Xcode it does show the In-App purchases.
So my question is, is there any setting in RevenueCat that we need to turn on when the app goes into production?
If such of setting does not exist, what would be a good way to troubleshoot the issue to determine where the problem is, if it's RevenueCat, the App Store or my code?
FYI - When I install the app directly from Xcode I can make purchases with a send-box account and everything functions as it should.
There aren't any RevenueCat settings to update when your app goes live. This sounds like a propagation issues with the App Store if these are new products - sometimes they can take ~24hrs to be available in production to all users after being approved.
Unfortunately, doing nothing and waiting is probably the answer here. In the future if you can not show new products to users until >24hrs after they're approved it should prevent this from happening again.

iOS check if user purchased the app before or no

I have developed an iOS application that was a paid app and it was released on AppStore. Many users have purchased it and downloaded it from there.
Now we have changed it to be free with some paid features. The problem now is that the past users who have already purchased the app are asked to pay for these new paid features. It shouldn't happen since they already purchased the whole app before.
Moreover, if one of those old users removed the app before new release then installed the new free release, he will be asked to pay for these new features also.
Is there a way to know whether the current Apple account has purchased this app - using the App ID - before ?
If not, is there a way to check if this app was installed before on the device then removed ?

in-app purchase theoretical procedure

i've searched around a similar question but i didn't found any, so:
I have an old iphone paid app on iStore (and a free/lite version with iAds banner), now i want to renew it, adding iPad version and other stuffs;
with this new version i'd like to set the app free, add in-app purchase to the paid app (and delete the lite version), adding iAd banner until user buy the in-app purchase item.
the problem is that an old user who paid for the old app and now download the new version will see the iAd banner (and of course i don't want this) and must pay again to avoid it.
Is there any way to check if a user of my new-version app is also an old user of the old-version app?
A partial solution i found out is to check a preference file that the old app saves in it's bundle documents folder, but that could work fine just in case the user has installed the old app on the device when he update my app, not in case he deleted from device (or installing to a new one)
Other solution could be to keep the lite version on iStore and add the inApp purchase only to that version, and let the full version with the current price, but doing so, the lite version after a user pay for inApp purchase item would become exactly equal to the piad app (and Apple may refuse this, and i don't like this solution too)
Any idea for this purpose, is there an easy way i have not seen?
thanks in advance
There is no way how to find out if the user paid for the app. The solution with the "bundle documents folder" is not good in my opinion, because once the user delete the app, he will not have available the premium version of the app again.
Similar questions:
Convert existing iOS paid app to freemium model with in-app purchase
Transition an existing paid for app to free version with In App Purchase
iPhone + upgrade existing paid application on app store to free application with In App purchase + what about the customers who have already purchased the paid application
I too had similar issues where I wanted to switch a paid app to free. There really isn't anyway to reliably check which user had already downloaded your app in the past. If you add iAds and they only disable through in-app purchase then it means it applies to everyone.
While writing this post I thought of one trick. Lets say you submit your app with iAd changes today to app store and it gets approved on 7/20/13. What you can do is upon app startup have a grace period code check i.e.
if (TodaysDate < 8/20/13)
{
//Make your NSUserdefaults to true. As if the user had purchased your in-app purchase. So don't show them any ads.
}
else
{
//Month has passed and hopefully most of your users who owned the app already had updated it by now
}
This way you have given your existing and any new users a month time (with no iAds). Any users who download the app after 8/20/13 will see your iAds and will have to pay in-app to disable them.
From my experience I have found that it's always advisable to keep your current users happy otherwise they will bomb your app rating with negative reviews. Which will show up under your latest app update.
Have you tried contacting developer support? https://developer.apple.com/support/
From what I know to be true you can't tell if they have previously bought the app without invading their privacy.

Resources