In App Purchase not working while reviewing by Apple - ios

I have an app with working In App purchases, it was approved by Apple and it is now in Appstore. A few days ago I submitted a new version of the app with one new consumable purchase, implemented as others were.
I'm using MKStoreKit and this method to buy a feature:
// ... showing loading window
[[MKStoreManager sharedManager] buyFeature:feature
onComplete:^(NSString* purchasedFeature,NSData* purchasedReceipt, NSArray* availableDownloads) {
// ... some handler and close loading
onCancelled:^ {
// ... another handler and close loading
}];
In Sandbox mode this method ends either in onComplete block, either onCancelled block, getting all correct identifiers (with new purchase too). However, due to Apple's reviewer's answer my loading is never closed. Also, they say that new purchase is now in Developer Action Needed Status, but can not edit it now, and I can not delete it (even if I check Cleared For Sale for NO).
May the problem be in the new purchase product or is it something else? I'm totally confused...
What can I do? Anyone encountered such a problem? I can not reproduce the error in Sandbox since it is working fine, so is there any way I can get the same result as in the Apple Review Team?

that was a strange bug on Apple servers caused by this new In App. I don't know why, but I could not delete it. Also, it had broken all In Apps but only while Apple Review testing, as I've said, all was fine in Sandbox mode. The solution was to write to Apple's support, and after a while they fixed it, I deleted this In App and everything started to work as is should.

Related

In-App Purchase fails to unlock content on some devices

We have had users reporting that they have paid for our product via in-app purchase but we have failed to unlock the content. The common denominator between these reports is iOS 9 so far. It seems like the purchase with success method does not get called. The IAP seems to work and even says that the purchase has been restored successfully (Apple's own alert), yet it does not deliver the content (unlocks the app).
This is a very odd bug because it works perfectly fine on iOS 10, and there is no reason why it should't work on other older devices. At some point, we had a customer complain of the same issue with iOS 10 as well and we just can't produce the issue. I am using RMStore for my in app purchases but this has not started since we used this library. It has been happening even with standard IAP integration.
Does anyone knows or may have heard of what causes this issue?
Any tips would be great!
I have several apps on the App Store and I'm facing similar issues. For about 1% of the users, the success callback is not called after an in-app purchase. If the users restore their purchases later, the purchased features unlock properly, so the App Store processed the purchase properly, and this is likely a bug in the app. I could never find the issue as I could not reproduce it on any of my devices.
After I just read that you use RMStore, I checked the emails that my users sent me during the last two years about this issue and noticed that this occurs exclusively with apps that use RMStore. While the code of that library looks really clean, I assume that the bug is somewhere hidden in there.
As RMStore hasn't been updated since almost two years, I consider it deprecated and will remove it from my apps in the near future. I will update this answer if the issue persists after the removal.
Update after three months: After the removal of RMStore for the in-app purchase handling from one of my apps, the problems have apparently disappeared.

I need to check the itunes store to see if a user has bought a subscription in the past version of my app

I'm rolling out a new version of an iPad app, and you could buy subscriptions on the old version. However, the new app has different subscriptions than the old one did, but I still need to know if they used to have a subscription, so I can apply it to the new app.
So, how can I check the iTunes store to see if they bought a certain product in the past when they load the app? From what I can tell it should be possible to do because it is the same app and connected to the same app ID in the iTunes store.
I'm trying to get some sample code to put in here but I have literally no idea where to even start.
You can use the SKPaymentQueue's -restoreCompletedTransactions to restore everything apart from non-recurring subscriptions. Your observer should get then receive every relevant transaction since the beginning of time, each with a state of SKPaymentTransactionStateRestored.
Apple requires you to support transaction restoration so hopefully your old version's code should have this built in somewhere, behind a 'restore' button or similar.

In-App-Purchase invalid product id only on release version

I released a new version of an app yesterday which added in app purchases. We did testing with a test account in sandboxed mode and everything worked correctly, however once we download the app from the app store the SKProductsRequestDelegate method:
(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
returns invalid product id's instead of valid ones. I'm baffled because I've had these types of problems before but only when trying to get them to work in debug mode, never after the app has been released from the app store. I've double checked everything on the list here http://troybrant.net/blog/2010/01/invalid-product-ids/ and none of those are the problem.
Here's another thread which is exactly my problem but no solution here: iOS In App Purchase - "Invalid Product ID" in release, NOT development version
I also encounter this problem and after 22 hours the problem be fixed automated. So I think this is the app store's problem that apple need some time to add your iap ID in their server.
It turns out in app purchases are magic. At around 8 pm we noticed that things started working normally. We had previously filed a request for help from Apple but never received a response so I'm not sure if that's what kicked off the fix or if it was just one of those things we needed to wait on.
I am also suffering with this issue and I went to Apple Developer Forum to get the solution. The problem is might be with Review team's device or environment.
Here is the link of full thread: https://devforums.apple.com/thread/233371

IAP fails after release, but no in development stage

Here is the history of my app.
In v1.0 I didn't have IAP.
In v2.0 I had IAP code, and it worked while I was developing. When v2.0 was released, I checked and run a non-testing device (an iPhone under my itunesconnect user name, but does not have provision file installed, so I take it as a non-relevant device) and I got error message, which of course was set up by myself. The error is for situation that the app could not connect to Apple or could not find IAP for the app. The error shows up quickly right after clicking buy IAP. This is as expected since no product ID is available. It doesn't need wait payment queue at all.
Then I checked itunesconnect and found the IAP probably not linked to the app, so I updated to v2.1 and added the IAP to my app in itunesconnect (no real code change, at least no IAP-related code changed), and IAP works fine finally in development stage in my testing iPad. Now v2.1 came out, but I still have the same problem as v2.0, that means IAP encounters error, most likely no IAP product ID found. At the time I'm typing, v2.1 has been released for 2 hours, and I still have quick error --- the product ID problem, most likely.
[edit]
BTW, there was a glitch between v2.0 and v2.1. When I noticed the IAP was not linked to my app, I did something too quick so that I cannot remember exactly. Basically the IAP was hung over there, I could modify it or submit it. After talking to Apple, I was told I need reject my binary of v2.1 and resubmit v2.1 along with the IAP. I don't know if this is related, but anyway I can buy IAP in development stage with my sandbox testing iPad.
[edit]
Any idea? Thanks.
BTW, the app is set to English default, but with Chinese/Spanish localization.
[edit]
One more thing, don't know if it's related. All v1.0, v2.0, and v2.1 versions are deployed to iOS 6 or later. When I was developing v2.1, I was trying to back to iOS 5 (via adopting so deprecated methods or constants). My app could run on iOS 5, but IAP wouldn't work iOS 5. Since IAP doesn't work, there's no point for me to go compatible with iOS 5, so I removed all deprecated methods and constants and went back to original v2.0 version and resubmitted with linked IAP to become v2.1.
For those who cares, here is my app. You're welcome to try. long press first page would get you to options page where you can try buy IAP --- no worry, there is supposed to be a confirmation dialog where you can cancel, even if my IAP works.
https://itunes.apple.com/us/app/icalc24!/id566916783?mt=8
[edit]
One more edit:
OH yeah, it works now. I don't which step of the following make it work:
1, I delete my app and restart my iPhone again (and again, yes) and re-download
2, it's 4 hours now after v2.1 is approved.

In-app payment still says it's in sandbox mode

I built a in-app payment for one of my iPhone apps. It worked in sandbox mode.
I submitted my app to the app store and it got accepted. I even submit my in app payment. It got accepted and it's status is 'ready for sale'.
However, when I go get my app in the app store, it still says it's in sandbox?
Is there something in MKStoreKit that you have to transfer environments, or does it take some time for it to change?
I currently pulled it from the store because of it. Please help! Thanks.
Hmmm. Are you using your Test User ID or a real Apple ID?
When this happens, it's usually because you previously used the same device for testing IAP in sandbox mode. To fix, just go into "Settings", then go to "Store", then log out and back in again. That should clear that up, assuming that you are actually using the archived app that you downloaded from iTunes, rather than your dev copy.
Re-released my app today so I could get it and see if the in app payment would work. Surprisingly, it worked and it wasn't in sandbox mode! So I guess it just takes time for apple's servers to make the change.
If anyone else had this problem, don't fret like I did! Just wait and be patient. Hold for developer release and wait around 24 hours and you should be good!
Here's the real solution (edit):
Set your availability date to the future so it will be removed from the app store
Set your availability date to the day it is so it will re appear

Resources