I Have a strange problem with iphone in app purchase! i created a product in the ituneconnect and then (using MKstorekit) i bought the product in sandbox environment .. and everything went will the first time... i removed the app from the device and created another test account.
and i found in the debugger mode that it sees the product as already purchased !!
tried everything from cleaning the project and all the tricks for the cache problems.. but still the problem occure .. is that normal?? or i'm doing something wrong?
please advice
since you are deleting the app in that case there is no chance that NSUserDefault will be storing this purchase so only thing that comes to my mind is the type of purchase... what type of purchase did you state in itunesconnect consumable , non-consumable or subscription? it could be because you stated subscription as purchase type(subscription purchases can only be bought once)... hope this helps..
this is what I have come across at http://www.raywenderlich.com/2797/introduction-to-in-app-purchases
StoreKit will prompt the user “are you sure?”, ask them to enter their
username/password (if appropriate), make the charge, and send you a
success or failure. They’ll also handle the case where the user
already paid for the app and is just re-downloading it, and give you a
message for that as well.
I fount the solution..
in app delegate i have to call
- (BOOL) removeAllKeychainData
in MKStoreManager, call it once at beginning, and then remove it from code, you don't want to accidently leave that on release :S
I have implemented InApp Purchase in my App.
These are the steps i have taken
Created a new App Id as "QPSRWANSS5.com.cmpnyname.appname" Enabling Manage In App Purchase
Created Provisioning File and installed
In my Project Info.plist i gave Bundle Identifier like "com.cmpnyname.appname"
I added a binary iTunesConnect and rejected It
Now added a new InApp Purchase and gave all the info needed and the InApp Purchase is in the "Waiting For Review " State now.
Included the storekit and added the request and response code.
Created a test user in my account.
Signed out of Apple Id in my device, Uninstalled the previous build in the device
Installed the new build in my device new provisioning file
Now the Output is Invalid product id: com.cmpnyname.appname.feature
Can you guys help me out where is my problem.
Another question is in my Contracts/ tax/ Banking Contracts In process / iOS Paid Applications / view bank Info there is a Information in Red
"Note: Banking update in progress, your changes should be reflected within 24 hours.
You will not be able to make any changes until your update completes processing."
But i waited for more than 48 Hours and still this doesnt go.
Does this has effect in my Invalid Product Id Output?
Sometimes, more than 48h are needed..
You should take a look at this website : InApp purchases, a full walkthrough
And always on this website : Invalid Product Ids
Yes of Course, that matter with your invalid product ID. Paid Contract should be working in order to test In-app purchase.
I just went through all of this the last couple of days. I can verify the following
You don't need to upload a binary to test in-app purchase.
You don't need to use your device. You can use the simulator to test in-app purchase as long as the projects target deployment version is iOS 5.0. At least for querying the products, the simulator works fine
In my case, the missing link was missing bank info in my itunes account
so the steps are
Create new app id without asterisk
Create new development provisioning profile and install in xcode
Change your app settings to use the new bundle id and provisioning profile
Create new app in itunes by providing stub metadata
Create in app purchase product and also specify a screenshot
From the version details page of the app, "link" the in-app product with the app
You are ready to test by using the productid of the in-app product. This worked for me without having to wait at all before running the code.
UPDATE: Actually you don't need the device for none of the steps involved in the purchase. You can complete the process by logging in with a test account IN THE SIMULATOR.
Please make sure that you have completed all the financial requirements.
Go to agreements,tax and banking
Fill out all 3 columns of paid applications contract type including contact info, bank info and tax info.
Hopefully, this will resolve the issue.
OK so have a problem with the whole in-app purchase review process and hope someone can shed some light/experience on it.
We have a project which is a magazine for the ipad. Each issue requires an in-app purchase before it is downloaded. The issues are served from an XML feed when a new one is published.
The problem is, how can we have Apple review an in-app purchase without displaying the new issue. They wont be able to see it in the live binary. If we publish the issue we have to say "unavailable", which looks extremely unprofessional to the customer, until the in-app purchase is reviewed.
We dont want to have to publish a new binary each time a new issue is published as thats a pointless exercise for the customer
Thanks, any suggestions apart from change message to "coming soon" would be apprciated. The only other thought we had is a flag in the app settings which displays "unavailable issues"
If you login to your iOS developer account, you'll find this Getting Started with in App Purchase pdf file, which has information that you'll need in your setting up with your iAP item.
Specifically, I think what you need is an item belongs to the category named Subscriptions. This should solve your problem.
You can use consumable purchases, i.e. right to download 1 article. 5 purchases - 5 articles.
Or, give a user subscription for month or so.
You could always just keep some kind of "sample" issue available for the purposes of the user demoing the software.
That, or a few select pages from the active issue could be specified as "demo pages", as in they would be viewable from a demo version of the software.
I am working on adding In-App purchases to my app.
I am able to receive the productsRequest:didReceiveResponse method, and receive the array of products.
My problem arises when I add a SKPayment to the SKPaymentQueue. After I add the product to the queue, in the paymentQueue:updatedTransactions method the transactions always have the state SKPaymentTransactionStateFailed.
I NSLog the "transaction.error" and this is what it returns: Error
Domain=SKErrorDomain Code=0 UserInfo=0x165000 "Cannot connect to
iTunes Store"
I have logged out of the Store in the Settings app, but after trying to purchase a product in my app it never asks me to log in with my test account. It just fails with the above error.
I was getting SKPaymentTransactionStateFailed error code 0 "Cannot connect to iTunes Store" and thanks to thomax for this answer my problem is solved. Turns out you MUST enter a build number under Targets->Summary.
I spent the last 24 hours resetting my phone, screwing with iTunes connect, and doing just about everything i could think of before i stumbled upon this solution.
I assume you've done the standard sanity checks: double-checking your code, confirming your product IDs, comparing your code to the In-App Purchase Programming Guide, etc.
This may be ridiculous, but -- if you're certain your code is correct -- do a hard reset (full wipe) of your iPod (Settings => General => Reset => Erase All Content and Settings). I puzzled over this exact problem for hours -- it turned out my code was correct and the hard reset was the solution.
I had been getting the same error but I had been prompted for my test user account. And also a popup saying "An unknown error has occurred". It turns out that when I created my test user account and signed out of the settings -> store I had decided to sign in with my test user account which had prompted me for a bunch of information including billing, which had broken my test user account. When I created a new test user account and only signed in when prompted to during the in app purchase testing, everything worked smoothly.
This error (i.e. "Error! Cannot connect to iTunes Store") can occur if you do a sandboxed In App purchase but are signed in using your normal Apple account.
I find it helps avoid any confusion if I sign out of my Apple account before doing any In App purchases. Then in the "Sign In" dialog choose the "Use Existing Apple ID" option and enter your Test User details.
Just remember this will be set in your Settings so you will need to sign out after you've finished In App purchases.
Also, using a different Apple ID resets various iTunes-related settings such as iTunes Match.
You can check if the following link is working or timing out:
https://sandbox.itunes.apple.com/verifyReceipt
Alternatively, an unscientific but quite reliable way to check if the sandbox is working is to ask at:
https://devforums.apple.com/community/ios/connected/purchase
If the sandbox is down, there will probably be people already talking about it, like now (18 Jan 2012, 6:40pm UTC time).
I also was facing with the same error.
I figured out, that the Error only comes on the Simulator, when I switched to the device debugging, the error didn't appear.
Simply log off from your AppStore account on settings...
Solved the problem for me because my device was logged using my regular Apple ID and because the purchases on the sandbox are always done with the test user ID, the device was trying to send my regular Apple Store ID to the "test" App Store resulting on this "Cannot Connect to iTunes Store" error.
This is the most common cause I have seen on my device.
Hit with the same problem, i reset my device, cross verified the identifiers, re-installed the app. Also thought the problem was, because I had changed the reference and the description of the products. In reality, I feel it is because my test user had got locked as multiple people where using the same account, and it is a possibility that the password validation failed multiple times.
So I re-created another test user and in-app purchasing is back to working.
Hope this helps. I was totally stumped with this error.
Make sure your BundleIDs match. That was my problem.
Even a full restore did not resolve this problem for me.
After calling addPayment for an auto-renewing product identifier, about one second passed before I received the "SKErrorDomain Code=0" error from StoreKit. At no point was I prompted (as Apple's documentation suggests one should be) for an iTunes Store username and password; the transaction simply failed.
To resolve this, I had to add a fake "consumable" product to iTunes Connect and call addPayment using the fake consumable's product identifier. This caused the iTunes Store dialog to come up. I then logged in with a test account I had created in iTunes Connect. This succeeded: my application was notified that the consumable had been purchased.
After having done this, I was able to call addPayment with my auto-renewing product identifier and purchase the subscription normally.
make sure you're testing with sandbox user accounts created from itunesconnect and not your actual apple id for your personal account when testing this stuff.
I thought it worth mentioning that DonnaLea's solution of only logging in when prompted for payment also worked for the same issue with Unity and Prime31's StoreKit plugin.
Attempting to log in via the same settings menu you use to log out will prompt for all manner of billing\address details which seems to permanently "break" that test account.
I found myself in this situation when I was working on adding in-app purchases and didn't do it exactly right the first time. In my case I had an error in server-side PHP and as a result I think I wasn't getting all the way through to "finishTransaction:". Even after I fixed the problems (I put the program on a separate device and purchased successfully), I kept getting "You've already purchased this, click to download" followed by "Cannot connect to iTunes Store".
I finally got it to stop doing that by launching the game from Springboard (not XCode). It immediately processed the transaction successfully and stopped prompting me to redownload.
This is similar to the accepted answer above. I started getting the "cannot connect to iTunes store" error when trying to log in to my iTunes account on my phone after logging in with an IAP sandbox account.
To solve the problem, I was able to just do a Reset All Settings instead of Erase All Content and Settings (Settings => General => Reset => Reset All Settings). Definitely better than having to lose and reinstall everything on your device.
I had had the same problem, first of all I haven't created test account so I created via getting help from this link
https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/SettingUpUserAccounts.html#//apple_ref/doc/uid/TP40011225-CH25-SW10
Then You need to sign out from your current account on your device. and buy purchasing it will ask for user account, then enter the test account.
I had this same issue. I had previously created a test user account, and signed out of the itunes store expecting to be prompted with a sign in for my test user account when I made the in app purchase. instead I got the cannot connect to itunes store message. when I signed in with my real itunes username/password and tried my test app it worked perfectly. I then logged out of itunes store again and my app worked great, prompting me for my id/pw
I had the same error, but the problem was not exactly the same. Maybe usefull for someone:
I inserted an external file in the structure of my app. The reason why I did this is because in production, I insert this file dinamicaly from a server, but in development I thought it was faster to use an app called iExplorer to paste this file. I have done this is the past and I didn't have this problem. But in the last few days, if I paste this file directly using iExplorer, my app returns the error: "Cannot connect to iTunes Store". (in spanish: "No puede conectarse a iTunes Store").
I think that it is because this time I inserted the file inside the .app folder. So this makes me think that if you modify your .app folder in any way, the Codesignature breaks and the link with the iTunes Store stops working directly.
For me, the problem was fixed by uploading a binary. Since that answer was not given in this page, which seems to be among the top hits in Google, I thought I'd add it.
Figured I should share my recent experience with the same issue:
I experienced the same problem a few days ago, where it stopped working from one day to the other. I got the following error after having authenticated with my test user(s): Error Domain=SKErrorDomain Code=0 UserInfo=0x165000 "Cannot connect to iTunes Store"
I hadn't done any changes to the code and we couldn't think of any other changes to our iTunes account or IAP products that might've triggered the problems. The only thing that may have been related was the adding of more iTunes Test Users (although I've added ~15 accounts before without problems). I tested it on different devices and the simulator.
I went through all the available checklists and all possible solutions (everything mentioned above as well) without any success. Finally I figured I might as well take a break from it all over the weekend, since I was drawing blanks. And oddly (and for the first time ever), doing nothing actually worked!
I didn't change any code, nor did anything change on our iTunes account or the app.
The only reasons I can think of are:
Something was wrong on Apple's end.
Some other time-based factor with the app, a certificate or something caused the problems.
A leprechaun snuck into my office and fixed the issue.
Check if you are signed into your personal itunes account in the appstore. If you are you will receive this message. Even if you are signed into your sandbox account in the app. So, to resolve this issue sign out of your personal account in the app store and then try to purchase your in-app item and then use your sandbox account. This resolved my issue.
Well, as usual I "tried all solutions available and it didn't help" :)
So, here is my input to this unlimited collection of stumble stones:
If application is not currently on sale (at any reason), this error occurs.
I got the same error,
When I called SKProductsRequest's start method in my test env,
It ran in
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
When I called in my production env,
It's correct and ran in
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
Close charles or any http proxy software asap!
Close charles or any http proxy software asap!
Close charles or any http proxy software asap!
You know it~
I had had the same problem, but I solved by the following mode:
- I was using iPhone 5S emulator with iOS 8.4 (This is the most important. Apple Store connection is not working on iOS 11 emulator)
- on emulator I turned on the following setting: Settings/Developer/Allow HTTP services (This is for internet connection)
- temporarily I turned off Avast antivirus Web Shield (This is for internet connection too)
The In-App Purchase FAQ has this information:
Cannot connect to iTunes Store
The "Cannot connect to iTunes Store" issue may be due to one or more of the following reasons:
The sandbox may be unreachable.
Your app does not have a bundle version (CFBundleVersion). See Setting the Version Number and Build String for more information.
Your app is running in the Simulator, which does not support in-app purchase.
You are attempting to purchase a product that is unavailable for sale. See Query the App Store for product information before presenting your app’s store UI for more information.
In my case, the error occurred because I was using the simulator.
Even in the In-App Purchase Programming Guide says to use the development iOS device has a suggested testing step.
As Apple's Documentation:
Cannot connect to iTunes Store
The "Cannot connect to iTunes Store" issue may be due to one or more of the following reasons:
The sandbox may be unreachable.
Your app does not have a bundle version (CFBundleVersion). See Setting the Version Number and Build String for more information.
Your app is running in the Simulator, which does not support in-app purchase.
You are attempting to purchase a product that is unavailable for sale. See Query the App Store for product information before presenting your app’s store UI for more information.
https://developer.apple.com/library/content/technotes/tn2413/_index.html
I have tried all what I can to deal with this issue.
Real device not Simulator.
New registered Sandbox test account (not fill the extra info to make it a formal Apple ID)
Logout whatever accounts related.(iCould, App Store, maybe other app's sandbox testing account)
Fill all the tax and Agreements in itunesconnect website
Even restore to factory settings LOL
...
always return SKErrorDomain Code=0
“Cannot connect to iTunes Store”
...
My case's solution is finally come tome after 3 days' struggle:
And finally I find the key. Try with another device to test the iAP if your device's iOS is iOS13.4.x!!!And I upgrade this ”broken“ device's OS version to iOS14.0.1, iAP works like a charm.
I have had zero success with in app purchase. I have submitted the free app binary, and then rejected the binary. I have added the test product. I have approved the test product TAP001.
I have followed the code examples to no avail. I do a SKProducts request using both "com.companyname.appid.TAP001" and just "TAP001"
Regardless, I get an empty response.products and response.invalidProductIdentifiers with the product string I sent.
I created a test user, but seeing how I cannot get any product info, the test user doesn't really come into play yet.
Can in app purchase be tested in debug or release builds? Or does it have to be a distribution?
Must one have a fully accepted app in the app store prior to testing in app purchase?
I am simply trying to test the process out and I do not have an actual app yet. I went as far as to fill out all the bank and tax information. I have followed the steps in the app docs but clearly I have something wrong or missing.
Thanks
I just got it to work. I used only "TAP001" for a product instead of "com.companyname.appid.TAP001". and I got product information back.
I feel dumb but I know have tried "TAP001" in the past with no success but I have tried so many things prior to this that I must have had some other information wrong a the time I did.
For those who are struggling with this issue, I can say:
Your app does not need to be live in the store.
You do need an app in the App store submission. Reject the binary after uploading it.
Testing your app should work in Release or Debug modes
You do need an in app product "Cleared for sale"
Your product request only needs to contain the product id(s)
Here is an example:
- (IBAction)buyButton1Click:(id)sender{
NSSet *productList = [NSSet setWithObjects:#"TAP001", #"TAP002", nil];
SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:productList];
request.delegate = self;
[request start];
}
According to Apple's itunes connect FAQ, you need to create a test user in order to use the itunes store sandbox environment.
That being said, even after creating such a user and setting my iphone to use that user, I am still experiencing the same issue that you report: all products are "invalid" according to the store kit API.
I'll update this post when I figure it out.
I've also heard that some times, you need to wait several hours before the in-app item goes through apple sand box servers, so it could be the reason it doesn't work yet. I'm in that case, i'm going to wait 24 hours to see, i'll let you know !!!
So: Imagine an extremely complicated and convoluted set of rules for how to test in app purchases. Now make it ten times more complicated. That is apple's solution. :)
You'll need to read the itunes connect developer guide, and probably also the In App Purchase guide. The short answer is that you'll need a special test account and you'll also need to use it in a very particular way if you want to test your in app purchase.
Good luck!