I've implemented a simple non-consumable in-app purchase mechanism by following the Ray Wenderlich tutorial book.
When my app starts, I initiate a product info request:
self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; _productsRequest.delegate = self; [_productsRequest start];
The SKProductRequest gets created. It has a memory address but nothing else happens. None of the delegate methods gets called:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSLog(@"Product info received..."); NSArray *products = response.products; for (SKProduct *product in products) { NSLog(@"ID: %@, title:%@, (%f)", product.productIdentifier, product.localizedTitle, product.price.floatValue); } self.productsRequest = nil; } - (void)request:(SKRequest *)request didFailWithError:(NSError *)error { NSLog(@"Failed to load list of products"); self.productsRequest = nil; }
I checked twice:
The Ray Wenderlich book doesn't mention I must do anything else besides this.
Only once I saw a -didFailWithError: call to my delegate on the Device, but it never again appeared. My delegate doesn't get called both on device or simulator. I let it run for minutes with no response at all.
iTunes Connect gives this confusing warning:
Your first In-App Purchase(s) must be submitted with a new app version. Select them from the In-App Purchases section of the Version Details page and then click Ready to Upload Binary.
Is this required prior to being able to test In-App Purchases?
It is impossible to make a purchase on a simulator (it is only possible to request a list of available purchases). To test purchases, you first need to set up products on App Store Connect and then use the user's sandbox environment and a real device. In this case, purchases for the developer are free.
You can either add new IAP under same group, or create new group, or even delete the existing one. The final step now is making this configuration file is available for testing in the simulator. What you need to do is using the storekit in our debug options in our scheme.
Sign In to the App Store with Your Sandbox Apple ID In iOS and iPadOS, the sandbox account appears in Settings > App Store after the first time you use the device to attempt a purchase in a development-signed app. There's no need to sign out of the non-Sandbox Apple ID.
In a web browser, go to the your app's page on the Apps & Games Developer Portal. Add your IAP purchasable items to your app, if you have not already done so. Click the link to download your JSON Data File. Name the downloaded file "amazon.sdktester.json".
Implementing in-app purchases requires the application to utilize the StoreKit API on the device. StoreKit manages all communication with Apple’s iTunes servers to get product information and perform transactions. The provisioning profile must be configured for in-app purchasing and product information must be entered in iTunes Connect.
From the App Tester main menu, tap the IAP Items in JSON File option to display a human-readable list of the item data in the JSON file. Familiarize yourself with the App Tester tool and the test options for IAP:
If your test device has macOS 11.1 or earlier installed, sign out of the Mac App Store, then build your app in Xcode and launch it from Finder. The first time you make a purchase in a development-signed app, sign in to the App Store using your Sandbox Apple ID to begin testing.
In the current version of Xcode 5.0 (5A1413), In-App purchases will not work in the iOS simulator.
StoreKit (In-App purchases) will not work in the Simulator. 13962338
Source: Xcode 5.0 Release Notes > Known issues > iOS Simulator https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/xc5_release_notes/xc5_release_notes.html#//apple_ref/doc/uid/TP40001051-CH2-SW303
In iOS simulator documentation it is written :
API Limitations
Within iOS Simulator, there are some limitations to the APIs and features, including:
Apple Push Services Privacy alerts for access to Photos, Contacts, Calendar, and Reminders The UIBackgroundModes key iCloud document syncing and key-value storage support
Unsupported frameworks include:
External Accessory Media Player Message UI Event Kit In UIKit, the UIVideoEditorController class Store Kit
As in-app purchase needs Store Kit to work and the Store Kit framework is unsupported for Simulator, you can't test IAP in iOS Simulator.
More information : iOS Simulator documentation
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With